1.HttpServletRequest基本概念
HttpServletRequest对象代表了客户端的请求,当客户端通过HTTP协议访问服务器的时候,HTTP请求头中的所有的信息都封装在这个对象中,开发人员可以通过这个对象的方法,获得客户端的信息
2.常用方法
获得浏览器的信息
- getRequetsURL:返回客户端发送请求的完整URL
- getRequestURI:返回请求行中的资源名部分
- getQueryString:返回请求行中的参数部分
- getPathInfo:返回请求URL中的额外路径信息。额外路径信息是请求URL中的位于Servlet的路径之后和查询参数之前的内容,它以“/”开头。
- getRemoteAddr:返回发出请求的客户机的IP地址
- getRemoteHost:返回发出请求的客户机的完整主机名
- getRemotePort:返回客户机所使用的网络端口号
- getLocalAddr:返回WEB服务器的IP地址。
- getLocalName:返回WEB服务器的主机名
获得请求头的信息
- getHeader
- getHeaders
- getHeaderName
获得客户端提交的数据
- getParameter
- getParameterValues(String name)
- getParameterNames
3.应用
防盗链
比如:我现在想访问某些资源,就将链接复制给别人,别人黏贴就直接访问到了资源(没看我的首页广告,少了很多推广,血亏)
//获得消息头
String referer = req.getHeader("Referer");
//如果不是从首页来或者从地址栏直接访问
if(referer == null || !referer.contains("url")) {
//返回首页
resp.sendRedirect("/index.jsp");
}
//如果是从首页进来的
resp.setContentType("text/html;charset=UTF-8");
resp.getWriter().write("test");

正常访问


当我们输入http://localhost:8080/webDemo/HelloServlet 回返回首页

超链接方式提交数据
常见的get方式提交数据的方式有使用超链接,sendRediret()
<a href="<%=request.getContextPath()%>/servlet/HelloServlet?username = XXX">测试!</a>
//接受数据
String username = request.getParameter("username");
sendRedirect():
sendRedirect("servlet的地址?username = aaaa & password = xxxxx");
解决中文乱码问题
- post方式的话直接改request对象的编码
- get方式需要手工转换编码
- get方式也可以修改Tomcat服务器的编码
- 提交数据推荐使用post
4.请求转发
request.getRequestDispatcher("/servlet2").forward(req,resp);
我们知道ServlContext可以在servlet中实现通信,请求转发也可以。那么我们在开发的时候用那个呢?推荐后者,因为前者会耗费大量资源。后者的话会随着请求的结束而回收资源,后者在开发中使用是非常频繁的。
转发和重定向的区别

使用哪个?
1.转发:URL地址不变,访问Servlet处理业务逻辑,然后forward到JSP显示结果
2.重定向:方式表单重复提交,直接跳转到另一个JSP,地址栏改变。
网友评论