zoukankan      html  css  js  c++  java
  • HttpServletRequest和ServletRequest的区别

    Java中HttpServletRequest接口是ServletRequest子接口,HttpServletRequest接口遵循http协议。
    相比于HttpServletRequest接口,ServletRequest的应用范围更加广泛,HttpServletRequest只适合在web开发中的http协议的请求,而ServletRequest则没有具体要求

    一、HttpServletRequest和ServletRequest都是接口

             HttpServletRequest继承自ServletRequest

            HttpServletRequest比ServletRequest多了一些针对于Http协议的方法。如getHeader (String name), getMethod () ,getSession () 等等。

            他们对应的实现类:

            javax.servlet.ServletRequestWrapper (implements javax.servlet.ServletRequest)

            javax.servlet.http.HttpServletRequestWrapper (implements javax.servlet.http.HttpServletRequest) 

    二、

     @Override  
        public void doFilter(ServletRequest request, ServletResponse response,  
                FilterChain filterChain) throws IOException, ServletException {  
            // 过滤用户请求,判断是否登录  
            HttpServletRequest httpServletRequest = (HttpServletRequest)request;  
            HttpServletResponse httpServletResponse = (HttpServletResponse)response;  
            httpServletResponse .setContentType("text/html;charset=utf-8");  
            httpServletRequest.setCharacterEncoding("utf-8");  
            httpServletResponse.setCharacterEncoding("utf-8");  
              
            String username = (String)httpServletRequest.getSession().getAttribute("username");  
            if (username == null) {  
                String path = httpServletRequest.getContextPath();  
                httpServletResponse.sendRedirect(path+"/index.jsp");  
            }  
            filterChain.doFilter(httpServletRequest, httpServletResponse);  
        } 

    三、

    1. 获得客户机信息
        getRequestURL方法返回客户端发出请求时的完整URL。
        getRequestURI方法返回请求行中的资源名部分。
        getQueryString 方法返回请求行中的参数部分。
        getRemoteAddr方法返回发出请求的客户机的IP地址 
        getRemoteHost方法返回发出请求的客户机的完整主机名
        getRemotePort方法返回客户机所使用的网络端口号
        getLocalAddr方法返回WEB服务器的IP地址。
        getLocalName方法返回WEB服务器的主机名 
        getMethod得到客户机请求方式
     2.获得客户机请求头 

        getHeader(string name)方法 
        getHeaders(String name)方法 
        getHeaderNames方法 

     3. 获得客户机请求参数(客户端提交的数据)
        getParameter(name)方法
        getParameterValues(String name)方法
        getParameterNames方法 
        getParameterMap方法

     public void doGet(HttpServletRequest request, HttpServletResponse response)  
                throws ServletException, IOException {  
                System.out.println("getRequestURL: "+request.getRequestURL());  
                System.out.println("getRequestURI: "+request.getRequestURI());  
                System.out.println("getQueryString: "+request.getQueryString());  
                System.out.println("getRemoteAddr: "+request.getRemoteAddr());  
                System.out.println("getRemoteHost: "+request.getRemoteHost());  
                System.out.println("getRemotePort: "+request.getRemotePort());  
                System.out.println("getRemoteUser: "+request.getRemoteUser());  
                System.out.println("getLocalAddr: "+request.getLocalAddr());  
                System.out.println("getLocalName: "+request.getLocalName());  
                System.out.println("getLocalPort: "+request.getLocalPort());  
                System.out.println("getMethod: "+request.getMethod());  
                System.out.println("-------request.getParamterMap()-------");  
                //得到请求的参数Map,注意map的value是String数组类型  
                Map map = request.getParameterMap();  
                Set<String> keySet = map.keySet();  
                for (String key : keySet) {  
                String[] values = (String[]) map.get(key);  
                for (String value : values) {  
                    System.out.println(key+"="+value);  
                }  
             }  
                System.out.println("--------request.getHeader()--------");  
                //得到请求头的name集合  
                Enumeration<String> em = request.getHeaderNames();  
                while (em.hasMoreElements()) {  
                String name = (String) em.nextElement();  
                String value = request.getHeader(name);  
                System.out.println(name+"="+value);  
            }  
                  
        }  

    浏览器上地址栏:http://localhost:8080/RequestAndResponse/requestmethod?name=sunjob&password=123456&password=haha

    控制台输出:

    getRequestURL: http://localhost:8080/RequestAndResponse/requestmethod  
        getRequestURI: /RequestAndResponse/requestmethod  
        getQueryString: name=sunjob&password=123456&password=haha  
        getRemoteAddr: 127.0.0.1  
        getRemoteHost: 127.0.0.1  
        getRemotePort: 2374  
        getRemoteUser: null  
        getLocalAddr: 127.0.0.1  
        getLocalName: localhost  
        getLocalPort: 8080  
        getMethod: GET  
        -------request.getParamterMap()-------  
        name=sunjob  
        password=123456  
        password=haha  
        --------request.getHeader()--------  
        host=localhost:8080  
        user-agent=Mozilla/5.0 (Windows NT 5.1; rv:17.0) Gecko/20100101 Firefox/17.0  
        accept=text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8  
        accept-language=zh-cn,en-us;q=0.8,zh;q=0.5,en;q=0.3  
        accept-encoding=gzip, deflate  
        connection=keep-alive  
        cache-control=max-age=0 
  • 相关阅读:
    MySQL
    权限(二)
    权限(一)
    化栈为队
    栈的最小值
    实现简易版react中createElement和render方法
    12.整数转罗马数字
    call,apply,bind的理解
    8. 字符串转换整数 (atoi)
    172.阶乘后的0
  • 原文地址:https://www.cnblogs.com/h-c-g/p/10892731.html
Copyright © 2011-2022 走看看