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 
复制代码

 

posted @   一心二念  阅读(1864)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
点击右上角即可分享
微信分享提示