读书人

web编程的乱码有关问题

发布时间: 2012-02-27 10:00:22 作者: rapoo

web编程的乱码问题
在eclipse中我编辑了一个东西,是页面转移的,由AddServlet.java,BookWriter.java,Book.java,hello.jsp源代码按顺序如下

Java code
Java codepackage 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=Shift_JIS");        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>");    }}



Java code
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());    }}



Java code
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;    }}


HTML code
<%@ page language="java" contentType="text/html; charset=Shift_JIS"    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的代码如下,如何在程序中使用这个过滤器呢?请高手们帮助,谢谢大家了。

Java code
Java codepackage 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() {    }}


[解决办法]
response.setContentType("text/html; charset=Shift_JIS");
改成
response.setContentType("text/html; charset=utf-8");
试试!

[解决办法]
Java code
request.setCharacterEncoding("UTF-8");
[解决办法]
<%@ page language="java" contentType="text/html; charset=Shift_JIS"
pageEncoding="windows-31j"%>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">

你在这个页面一下就写了3种编码(Shift_JIS、windows-31j、utf-8),换成统一的一种,再在Filter中设置时也设置同一种编码方式呢
[解决办法]
统一都换成yutf-8试试
[解决办法]
不知道你的filter是怎么配置,我把我的贴出来让你参考!
XML code
<filter>        <filter-name>Set Character Encoding</filter-name>        <filter-class>            com.hxk.common.servlet.EncodingFilter        </filter-class>        <init-param>            <param-name>encoding</param-name>            <param-value>GBK</param-value>        </init-param>    </filter>    <filter-mapping>        <filter-name>Set Character Encoding</filter-name>        <url-pattern>/*</url-pattern>    </filter-mapping> 

读书人网 >Eclipse开发

热点推荐