欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Servlet的一些问题

程序员文章站 2022-04-09 22:21:15
...

1.传输中文的乱码问题

接收中文乱码(就是页面向服务器提交数据)

  get方式  
    解决方式:new String(string.getBytes("ISO-8859-1"),"UTF-8");
    分析:表单中文数据在页面以ISO编码后,通过Http协议传输,到达Servlet后,若以UTF-8解码,会出现乱码。所以需要先转成字节(ISO-8859-1解码,传过来的是以它编码的),再包装成字符串(UTF-8编码)。Servlet中就可以显示了(UTF-8)。
post方式 
    解决方式:request.setCharacterEncoding("UTF-8");
    分析:这里单向设置服务器端的解码方式UTF-8即可(注意是通过request设置)。因为从服务器来的页面一般已经设置成了UTF-8格式了(例如JSP提交的页面)。

输出中文乱码(服务器向页面输出)

字符流
    解决方式一:response.setContentType("text/html;charset=UTF-8");
    等价于解决方式二:response.setCharacterEncoding("UTF-8");//UTF-8编码
                    response.setHeader("Context-Type","text/html;charset=utf-8");
                    //通知浏览器UTF-8解码网页文件
    分析:方式一和方式二作用一样。这种场景一般是Servlet程序中有中文字符,需要向页面输出。先设置服务器端的编码方式UTF-8(注意是通过response设置),再通过设置响应的头字段,通知浏览器以UTF-8进行解码即可。
字节流
    解决方式:response.setHeader("Content-Type", "text/html;charset=UTF-8"); 
            // 设置浏览器默认打开的时候采用的字符集编码
            response.getOutputStream().write("中文".getBytes("UTF-8"));    
            // 设置中文转成字节数组的时候取出的编码,默认会是ISO-8859-1
    分析:字节流的中文输出包括两步:先通知浏览器以UTF-8解码。再想页面(字节流)输出字节。输出内容:将中文字符串转成字节数组(并设置以指定的UTF-8编码)。

2.跳转

//内部跳转
        request.getRequestDispatcher(url).forward(request, response);
        
        //重定向
        response.sendRedirect(url);