我重新编辑了一个东西,是页面转移的,由AddServlet.java,BookWriter.java,Book.java,hello.jsp源代码按顺序如下package jp.bcat;import java.io.*;import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.*;import java.text.SimpleDateFormat;
import java.util.Date;/**
 * Servlet implementation class AddServlet
 */
@WebServlet("/AddServlet")
public class AddServlet extends HttpServlet {
private static final long serialVersionUID = 1L;    /**
     * @see HttpServlet#HttpServlet()
     */ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
String step = request.getParameter("step");
if ("prepare".equals(step))
prepare(request, response); }
void prepare(HttpServletRequest request, HttpServletResponse response) throws IOException {
String errorMessage = "";
Book book = new Book();
String title = request.getParameter("title");
book.setTitle(title);
if (title == null || title.length() == 0)
errorMessage += "<P>タイトルを入力してください。</P>";
response.setContentType("text/html; charset=utf-8");
PrintWriter out = response.getWriter();
out.println("<HTML><HEAD><TITLE>図書登録確認</TITLE></HEAD>");
if (errorMessage.length() == 0) {
out.println("<BODY>"); out.println("<PRE>");
new BookWriter(out, "+ ").write(book);
out.println("</PRE>"); out.println("</BODY>");
}
out.println("</HTML>");
}
}package jp.bcat;import java.io.PrintWriter;public class BookWriter {
protected PrintWriter out;
protected String indent; public BookWriter(PrintWriter out, String indent) {
this.out = out;
this.indent = indent;
} public void write(Book book) {
out.println(indent + "タイトル: " + book.getTitle()); }
}package jp.bcat;import java.io.Serializable;public class Book implements Serializable { protected String title; public String getTitle() {
return title;
} public void setTitle(String value) {
title = value;
}
}<%@ page language="java" contentType="text/html; charset=utf-8"
    pageEncoding="windows-31j"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Insert title here</title>
</head>
<body>
  <FORM action="AddServlet" method="POST">
    <TABLE>
      <TR><TD>タイトル: </TD><TD><INPUT name="title"></TD></TR>   <TR><TD><INPUT type="submit" value="登録"></TD></TR>
  <INPUT type="hidden" name="step" value="prepare">
</TABLE>
  </FORM>
</body>
</html>如果输入汉字,显示的是????的乱码。
我估计我好像是Filter的设置好像不对,我的Filter的代码如下,如何在程序中使用这个过滤器呢?请高手们帮助,谢谢大家了。
package jp.bcat.util;import java.io.IOException;
import javax.servlet.*;public class RequestEncodingFilter implements Filter {
private String encoding; public void init(FilterConfig config) throws ServletException {
encoding = config.getInitParameter("encoding");
} public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {
if (encoding != null)
req.setCharacterEncoding(encoding);
chain.doFilter(req, res);
} public void destroy() {
}
}

解决方案 »

  1.   

    JSP中的 pageEncoding="windows-31j"
    改为 pageEncoding="UTF-8"试试
      

  2.   

    jsp页面的charset的值改成gbk就行了
      

  3.   

    不好意思我用的是日文的系统所以编码是Shift_JIS,不好意思没有事先说明。
      

  4.   

    AddServlet 加个中文转换package jp.bcat;import java.io.*;import javax.servlet.ServletException;
    import javax.servlet.annotation.WebServlet;
    import javax.servlet.http.*;import java.text.SimpleDateFormat;
    import java.util.Date;/**
     * Servlet implementation class AddServlet
     */
    @WebServlet("/AddServlet")
    public class AddServlet extends HttpServlet {
        private static final long serialVersionUID = 1L;    /**
         * @see HttpServlet#HttpServlet()
         */    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            // TODO Auto-generated method stub
            String step = request.getParameter("step");
            if ("prepare".equals(step))
                prepare(request, response);    }
        void prepare(HttpServletRequest request, HttpServletResponse response) throws IOException {
            String errorMessage = "";
            Book book = new Book();
            String title = request.getParameter("title");
            if(title.trim!=null){
                String temTitle = new String(title .getBytes("ISO-8859-1"),"GB2312");
            book.setTitle(temTitle);
            }else{
                book.setTitle("");
            }
            if (title == null || title.length() == 0)
                errorMessage += "<P>タイトルを入力してください。</P>";
            response.setContentType("text/html; charset=utf-8");
            PrintWriter out = response.getWriter();
            out.println("<HTML><HEAD><TITLE>図書登録確認</TITLE></HEAD>");
            if (errorMessage.length() == 0) {
                out.println("<BODY>");            out.println("<PRE>");
                new BookWriter(out, "+ ").write(book);
                out.println("</PRE>");            out.println("</BODY>");
            }
            out.println("</HTML>");
        }
    }new String(iso.getBytes("ISO-8859-1"),"GB2312");
      

  5.   

    都改为UTF-8也是在下一页有乱码但是原来的乱码是??,改成UTF-8以后就变成真的乱码了。
      

  6.   

    在if(title.trim!=null)这一行有错误
      

  7.   


    encoding = config.getInitParameter("encoding");web.xml里面是怎么配置的这个参数?
      

  8.   

    日本人为什么总是走得这么靠前啊,Servlet3.0的项目还是头一次见到!
      

  9.   

    WebContent中的XML,不是在lib的XML,WebContent中的XML的设置如下<?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE web-app PUBLIC
        "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
        "http://java.sun.com/dtd/web-app_2_3.dtd">
    <web-app>
        <filter>
            <filter-name>requestEncodingFilter</filter-name>
            <filter-class>jp.bcat.util.RequestEncodingFilter</filter-class>
            <init-param>
                <param-name>encoding</param-name>
                <param-value>Shift_JIS</param-value>
            </init-param>
        </filter>
        <filter-mapping>
            <filter-name>requestEncodingFilter</filter-name>
            <url-pattern>/*</url-pattern>
        </filter-mapping>
    <servlet>
    <servlet-name>add</servlet-name>
    <servlet-class>jp.bcat.AddServlet</servlet-class>
    </servlet>
    <servlet>
    <servlet-name>list</servlet-name>
    <servlet-class>jp.bcat.ListServlet</servlet-class>
    </servlet>
    <servlet>
    <servlet-name>delete</servlet-name>
    <servlet-class>jp.bcat.DeleteServlet</servlet-class>
    </servlet>
    <servlet-mapping>
         <servlet-name>add</servlet-name>
         <url-pattern>/add</url-pattern>
       </servlet-mapping>
    <servlet-mapping>
         <servlet-name>list</servlet-name>
         <url-pattern>/list</url-pattern>
       </servlet-mapping>
    <servlet-mapping>
         <servlet-name>delete</servlet-name>
         <url-pattern>/delete</url-pattern>
       </servlet-mapping>
    </web-app>
      

  10.   

    <init-param>
      <param-name>encoding</param-name>
      <param-value>Shift_JIS</param-value>
      </init-param>
    Shift_JIS改为utf-8试试
      

  11.   

    实在不好意思啊,我在这个地方还有一个其他的问题就是在
    <servlet>
     <servlet-name>add</servlet-name>
     <servlet-class>jp.bcat.AddServlet</servlet-class>
    </servlet>

    <servlet-mapping>
       <servlet-name>add</servlet-name>
       <url-pattern>/add</url-pattern>
    </servlet-mapping>
    这两个地方都设成add,就是说如果把<FORM action="AddServlet" method="POST">改成<FORM action="add" method="POST">这个add能够实现AddServlet,但是
    但是从http://localhost:8080/char/hello.jsp按登录按钮之后,出现
    type ステータスレポートメッセージ /char/add説明 The requested resource (/char/add) is not available.
    这个错误,应该是web.xml的设定没有起到作用,如果实现不了,可能这个和filer过滤器也应该起不到作用吧?
    请求高手的帮助,十分感谢!!!!!
     
      

  12.   

    所有地方全都UTF-8也出现乱码
      

  13.   

    response.setContentType("text/html;charset=utf-8");
      

  14.   

    所有的地方都改成UTF-8也是乱码
      

  15.   

    你用的TOMCAT吗? 如果是则在conf/server.xml 中找到<connector ,在其中加上URIEncoding="UTF-8",其它的类似
      

  16.   

    request.setCharacterEncoding("Windows-31J");
    String step = request.getParameter("step");
    在string前加入request.setCharacterEncoding("Windows-31J");
    问题得到解决,谢谢大家的帮助。