重定向

1.概述

浏览器请求服务器,服务器通过HTTP协议约定响应头去告诉浏览器,并实现请求

状态码:302

2.特点

a.两次请求,两次响应

b.地址栏会发生变化

c.可以跳转到外部站点资源,也可以跳转到内部站点的资源

3.方法

a.方式1

response.setStatus(302);设置状态码

response.setHeader("location", "网址");设置头,跳转外部网址

response.setHeader("location", "内部文件");设置头,跳转内部资源

        b.方式2

                response.sendRedirect("跳转地址");


        String method = request.getMethod();  

               // 获取URI 

     String uri = request.getRequestURI();        

   // 获取URL        StringBuffer url = request.getRequestURL();  

          

        // 获取协议版本  

        String protocol = request.getProtocol();  

          

        // 获取ip  

        String ip = request.getRemoteAddr();  

          

        // 获取主机名  

        String host = request.getRemoteHost();  

          

        // 获取端口  

        int port = request.getRemotePort();  

          

        System.out.println(method);  

        System.out.println(uri);  

        System.out.println(url);  

        System.out.println(protocol);  

        System.out.println(ip);  

        System.out.println(host);  

        System.out.println(port);  

          

  }  

    public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {  

        this.doGet(request, response);  

   } 

处理请求:解决中文乱码

处理表单提交后台的数据

a.处理get请求

get请求参数拼接在URL后面,通过getQueryString();获取请求参数

获取的是浏览器进行了一个URLEncode()编码后的值

要通过URLDecoder.decode();进行编码,否则会出现中文乱码

b.处理post请求

post请求把请求参数封装在请求体里面

通过request.getReader().readLine();获取

然后通过decode进行编码

c.验证

在index.jsp中写一个表单,提交用户名(中文)和密码

观察控制台获取的参数


    String line = request.getQueryString();  
 
        // 通过decode进行编码 username=张三&password=123456  
        line = URLDecoder.decode(line, "utf-8");  
 
        // 获取信息  
        // 截取&  
        String[] split = line.split("&");  
        // 截取=获取信息  
        String username = split[0].split("=")[1];  
        String password = split[1].split("=")[1];  
 
        System.out.println(username + "---" + password);  
    }  
 
    // post请求  
    public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {  
        // 从请求体中获取处参数  
        String line = request.getReader().readLine();  
 
        // 转码 username=张三&password=123456  
        line = URLDecoder.decode(line, "utf-8");  
 
        // 获取信息  
        // 截取&  
        String[] split = line.split("&");  
        // 截取=获取信息  
        String username = split[0].split("=")[1];  
        String password = split[1].split("=")[1];  
 
        System.out.println(username + "---" + password);  
    } 

    请求域

1.request

a.是一个请求对象,用来封装请求消息

b.是一个域对象,可以在他的范围内共享数据

c.请求的范围:一次请求和一次响应之间

2.请求转发

a.request.getRequestDispatcher("/mydemo").forward(request, response);

将当前请求转向1mydemo2,不用输入工程名

b.特点

1)一次请求一次响应

2)地址栏不发生变化

3)只能访问内部站点资源

c.什么时候使用重定向?什么时候使用转发?

1)如果需要在请求的多个资源中共享数据,则使用转发

2)如一次性的数据存入请求域中