一 : HttpServletRequest简述
HttpServletRequest
: 当创建Servlet时会覆盖service()
方法,或doGet()
与doPost
这些方法中都会有request
与response
参数,分别代表请求和响应.
doGet()与doPost方法的request类型是HttpServletRequest而service
方法的类型是ServletRequest
,HttpServletRequest
是ServletRequest
的子接口,功能更加强大.1HttpServletRequest运行过程与HttpServletReponse
一样.
二 : HttpServletRequest方法
-
获得请求行
//获取请求方式
String method = request.getMethod();
System.out.println(method);
//获取请求资源相关
String uri = request.getRequestURI();
StringBuffer url = request.getRequestURL();
System.out.println("uri : " + uri);
System.out.println("url : " + url);
//获取web应用名称
String name = request.getContextPath();
System.out.println(name);
//获取地址后参数
String parms = request.getQueryString();
System.out.println(parms);
//获得客户机IP地址
String add = request.getRemoteAddr();
System.out.println(add);
GET
uri : /WEBpro/line
url : http://localhost:8080/WEBpro/line
/WEBpro
null
0:0:0:0:0:0:0:1
-
获得请求头
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//获取指定的头
String user = request.getHeader("User-Agent");
System.out.println(user);
//获得所有头的名字
Enumeration<String> em = request.getHeaderNames();
while(em.hasMoreElements()) {
String key = em.nextElement();
String value = request.getHeader(key);
System.out.println(key + " : " + value);
}
}
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36
host : localhost:8080
connection : keep-alive
upgrade-insecure-requests : 1
user-agent : Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36
accept : text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
accept-encoding : gzip, deflate, br
accept-language : zh-CN,zh;q=0.9
cookie : Pycharm-33f57aa8=68b58c91-5eb9-4266-8cce-24e5ca585161; Phpstorm-37f204a9=27ada96d-4b5d-4f2a-bee0-f72f9b9a4b77
refer
头执行该访问的来源做防盗链
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//对来源进行判断
String head = request.getHeader("referer");
//输出
if (head !=null && head.startsWith("http://localhost")) {
//中文
response.setContentType("text/html;charset=UTF-8");
response.getWriter().write("请阅览");
}else {
response.getWriter().write("可耻的盗贼");
}
}
-
获得请求体
获得单个表单的值
String par = request.getParameter("username");
System.out.println("单个表单 : " + par);
获得多个表单的值
String[] hobby = request.getParameterValues("hobby");
for (String item : hobby) {
System.out.println("多个表单的值为 : " + item);
}
获得所有请求参数名称
Enumeration<String> en = request.getParameterNames();
while(en.hasMoreElements()) {
String name = en.nextElement();
System.out.println("name : " + name);
}
获取所有参数,参数封装到MAP<String,String[]>
Map<String, String[]> map = request.getParameterMap();
for (Map.Entry<String, String[]> ent : map.entrySet()) {
System.out.println("key : " + ent.getKey());
for (String item : ent.getValue()) {
System.out.println("value : "+item);
}
System.out.println();
}
注意 :
获取get请求方式的请求参数,与post相同
三 : 解决参数乱码
乱码原因 : 客户端采用UTF-8编码,在服务器端使用iso8859-1解码所以对应的字符不对
编码-解码
解决办法 :
先使用iso8859-1编码回去,在使用utf-8解码->找到对应的中文字符
代码 :
此为post与get通用方式
String username = request.getParameter("username");
// username = new String(username.getBytes("iso8859-1"),"UTF-8");
Post可以直接这么写 :
request.setCharacterEncoding("UTF-8");
四 : request转发
使用request转发,其中转发是服务器内部之间的传递,所以getRequestDispatcher("")
参数地址的项目名字可以省略.
转发是一次访问.
request.getRequestDispatcher("login.jsp").forward(request, response);
五 : request 域对象
request也是一个存储数据的区域对象
具有方法 :
setAttribute(String name, Object o)
getAttribute(String name)
removeAttribute(String name)
作用范围 : 一次请求中
六 : Mac 访问 jsp 500 问题
新建了一个 .jsp页面,路径也没有问题,直接访问就500,要不就是404.很奇怪,查了很久原因最后发现原来是mac
权限的问题,mac电脑下tomcat/work/Catalina/localhost
没有读写权限的问题,怎么解决呢 : 不用命令那么麻烦,直接右击文件夹 ->显示简介,更改权限为读与写即可,再重新run就搞定了
网友评论