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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 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编程运行原理