2、 针对EJB类和不可以直接运行的支持类(如JavaBean类) 由于这种类它们本身被其它的类调用,不直接与用户交互,故对这种类来说,我们的建议的处理方式是内部程序中应该采用字符流来处理程序内部的中文字符串(具体如上面一节中一样),同时,在编译类时用-encoding gb2312参数指示源文件是中文格式编码的即可。 3、 针对Servlet类
针对Servlet,我们建议用以下方法: 在编译Servlet类的源程序时,用-encoding指定编码为GBK或GB2312,且在向用户输出时的编码部分用response对象的setContentType("text/html;charset=GBK");或gb2312来设置输出编码格式,同样在接收用户输入时,我们用request.setCharacterEncoding("GB2312");这样无论我们的servlet类移植到什么操作系统中,只有客户端的浏览器支持中文显示,就可以正确显示。如下是一个正确的示例: //HelloWorld.java package hello; import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public class HelloWorld extends HttpServlet { public void init() throws ServletException { } public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { request.setCharacterEncoding("GB2312"); //设置输入编码格式 response.setContentType("text/html;charset=GB2312"); //设置输出编码格式 PrintWriter out = response.getWriter(); //建议使用PrintWriter输出 out.println("<hr>"); out.println("Hello World! This is created by Servlet!测试中文!"); out.println("<hr>"); } public void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { request.setCharacterEncoding("GB2312"); //设置输入编码格式 response.setContentType("text/html;charset=GB2312"); //设置输出编码格式 String name = request.getParameter("name"); String id = request.getParameter("id"); if(name==null) name=""; if(id==null) id=""; PrintWriter out = response.getWriter(); //建议使用PrintWriter输出 out.println("<hr>"); out.println("你传入的中文字串是:" + name); out.println("<hr>你输入的id是:" + id); out.println("<hr>"); } public void destroy() { } } 请用javac -encoding gb2312 HelloWorld.java来编译此程序。 测试此Servlet的程序如下所示: <%@page contentType="text/html; charset=gb2312"%> <%request.setCharacterEncoding("GB2312");%> <html><head><title></title> <Script language="JavaScript"> function Submit() { //通过URL传递中文字符串值给Servlet document.base.action = "./HelloWorld?name=中文"; document.base.method = "POST"; document.base.submit(); } </Script> </head>
|