重温servlet③

请求转发 forward 仅有一个请求 至少两个servlet

前一个的响应头保留着,但是响应体不保留了。

设置响应体太大,会报错

 

请求包含Include 都包含,响应头和响应体都会保留着

 

Request域

在两个servlet通过转发或者包含的时候设置其参数。

SetAttribute

GetAttribute

RemoveAttribute

 

请求转发与重定向的区别

  1. 请求转发是请求一次响应,而重定向是两次请求两次响应。
  2. 请求转发地址栏不变化,而请求重定向会显示后一个请求的地址。
  3. 请求转发只能发到本项目其他的servlet,而重定向不只能重定向到本项目的其他servlet中,还能定向到其他项目。
  4. 请求转发是服务器端行为,只需给出转发的servlet的路径,而重定向需要给出requestURI,即包含项目名。

 

响应编码

Iso-8859-1 拉丁文编码 不支持中文

Gbk 中国国标 gb2312

Utf-8万国码 ,支持全世界所有的字符都可以。

 

乱码问题

在Getwriter之前输入

Response.setconType("text/html;charset=utf-8");

 

页面请求编码 就是页面的编码

 

适用post方法是需要在getparameter之前设置request.setchar

    public void doGet(HttpServletRequest request, HttpServletResponse response)

            throws ServletException, IOException {

        /**

         * 1.先获取传递过来的参数

         * 2.回退,适用utf-8重编

         */

        String name =request.getParameter("username");

        byte[]b=name.getBytes("iso-8859-1");

        name=new String (b,"utf-8");

        System.out.println(name);

    }

 

    public void doPost(HttpServletRequest request, HttpServletResponse response)

            throws ServletException, IOException {

        /**

         * 在获取参数之前需要先调用requestsetcharterEncoding("utf-8")

         */

        request.setCharacterEncoding("utf-8");

        String name=request.getParameter("username");

        System.out.println(name);

    }

 

}

 

url乱码

    @Test

    public void f1() throws UnsupportedEncodingException{

        String name="张三";

        byte[]b=name.getBytes("utf-8");

        System.out.println(Arrays.toString(b));

        

        String s=URLEncoder.encode(name,"utf-8");

        System.out.println(s);

        System.out.println(URLDecoder.decode(s, "utf-8"));

        

    }

 

 

原文地址:https://www.cnblogs.com/chengzhipcx/p/4989394.html