<!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=Shift_JIS">
<title>Insert title here</title>
</head>
<body>
  <FORM action="AddServlet" method="POST">
    <TABLE>
      <TR><TD>タイトル: </TD><TD><INPUT name="title"></TD></TR>
  <TR><TD>著者:    </TD><TD><INPUT name="author"></TD></TR>
  <TR><TD>訳者:    </TD><TD><INPUT name="translator"></TD></TR>
  <TR><TD>出版社:  </TD><TD><INPUT name="publisher"></TD></TR>
  <TR><TD>出版日:  </TD><TD><INPUT name="publicationDate"></TD></TR>
  <TR><TD>ISBN:   </TD><TD><INPUT name="code"></TD></TR>
  <TR><TD>メモ:    </TD><TD><INPUT name="memo"></TD></TR>
  <TR><TD>キーワード: </TD><TD><INPUT name="keyword"></TD></TR>
  <TR><TD>登録者:  </TD><TD><INPUT name="dataCreator"></TD></TR>
  <TR><TD><INPUT type="submit" value="登録"></TD></TR>
  <INPUT type="hidden" name="step" value="prepare">
</TABLE>
  </FORM>
</body>
</html>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()
     */
    public AddServlet() {
        super();
        // TODO Auto-generated constructor stub
    } /**
 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
 */
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
} /**
 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
 */
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);
else
confirm(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>";
String author = request.getParameter("author");
book.setAuthor(author);
if (author == null || author.length() == 0)
errorMessage += "<P>著者を入力してください。</P>";
String translator = request.getParameter("translator");
book.setTranslator(translator);
String publisher = request.getParameter("publisher");
book.setPublisher(publisher);
if (publisher == null || publisher.length() == 0)
errorMessage += "<P>出版社を入力してください。</P>";
String publicationDate = request.getParameter("publicationDate");
book.setPublicationDate(publicationDate);
if (publicationDate == null || publicationDate.length() == 0)
errorMessage += "<P>出版年月日を入力してください。</P>";
String code = request.getParameter("code");
book.setCode(code);
String memo = request.getParameter("memo");
book.setMemo(memo);
String keyword = request.getParameter("keyword");
book.setKeyword(keyword);
String dataCreator = request.getParameter("dataCreator");
book.setDataCreator(dataCreator);
if (dataCreator == null || dataCreator.length() == 0)
errorMessage += "<P>登録者名を入力してください。</P>";
String now = new SimpleDateFormat("yyyy-MM-dd")
.format(new Date());
book.setDataCreatedDate(now); response.setContentType("text/html; charset=Shift_JIS");
PrintWriter out = response.getWriter();
out.println("<HTML><HEAD><TITLE>図書登録確認</TITLE></HEAD>");
if (errorMessage.length() == 0) {
out.println("<BODY>");
out.println("この内容で登録しますか?");
out.println("<PRE>");
new BookWriter(out, "+ ").write(book);
out.println("</PRE>");
out.println("<FORM method='POST'>");
out.println("<INPUT type='hidden' name='step' value='confirm'>");
out.println("<INPUT type='submit' value='登録'>");
out.println("</FORM>");
out.println("<A href='./'>メニューに戻る</A>");
out.println("</BODY>");
request.getSession().setAttribute("book", book);
} else {
out.println("<BODY>");
out.println(errorMessage);
out.println("<A href='./'>メニューに戻る</A>");
out.println("</BODY>");
}
out.println("</HTML>");
} void confirm(HttpServletRequest request, HttpServletResponse response) throws IOException {
Book book = (Book)request.getSession().getAttribute("book");
BookCatalog catalog = BookCatalog.getInstance();
catalog.addBook(book); response.setContentType("text/html; charset=Shift_JIS");
PrintWriter out = response.getWriter();
out.println("<HTML><HEAD><TITLE>図書登録結果</TITLE></HEAD>");
out.println("<BODY>");
out.println("<P>登録しました。</P>");
out.println("<A href='./'>メニューに戻る</A>");
out.println("</BODY>");
out.println("</HTML>");
}
}
我用的是eclipse动态网页编程,在addForm.html(上述html文件)的界面中输入汉字以后不能在(図書登録確認)界面中显示出来,在(図書登録確認)页面中显示出来的是乱码(????),我用的是日语的系统文字码是Shift_JIS,请求高手的帮助。十分感谢大家!!

解决方案 »

  1.   

    将你JSP HTML里面涉及charset encoding的编码都设置为UTF8 ,同时在servlet的过滤器也都设置为UTF8就应该可以了,可惜我不懂日文,懂就帮你改好了
      

  2.   

    是吧Shift_JIS的地方换成UTF8是吗?
      

  3.   

    嗯,全部换掉,还需要用servlet过滤器
      

  4.   

    获取远程编码,在本底设置。或者全是UTF-8
      

  5.   

    我刚才换了UTF8但是显示的是乱码,您说的过滤器应该是这个东西吧?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() {
    }
    }这个东西确实是有,但是好像要在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>
    这个是我的XML文件,但是好像还是不管用,不知道问题出在了什么地方请求高手的解决。
      

  6.   


      <param-name>encoding</param-name>
      <param-value>Shift_JIS</param-value>

    这个就已经设置了编码方式为Shift_JIS,要用就全部都用统一的吧(Shift_JIS,我没用过,不知道是什么编码的)
      

  7.   

    我全都设成Shift_JIS了但是还是无法显示。
      

  8.   

    Tomcat里面也要改一下编码方式。。
      

  9.   

    试下MS932呢,一般用MS932代替SHIFT_JIS,可减少乱码
      

  10.   


    tomcat中修改编码方式是:
       <Connector port="8080" protocol="HTTP/1.1" 
                   connectionTimeout="20000" 
                   redirectPort="8443" /> 
    中添加编码方式的属性,<Connector port="8080" 
                 URIEncoding="XXX" 你要设置的编码方式 
                 protocol="HTTP/1.1" 
                 connectionTimeout="20000" 
                 redirectPort="8443" /> 
      

  11.   

    嗯,同意楼上的,都改成utf-8
    response.setCharacterEncoding("utf-8");
    request.setCharacterEncoding("utf-8");
    ====
    在HTML的页面上也改成utf-8的……
      

  12.   


    response.setContentType("text/html;charset=UTF-8");把接收的参数全部转换String x = new String(param.getBytes("ISO-8859-1"), "UTF-8");