一 : 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/WEBpronull0: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就搞定了
文件夹
作者:TianTianBaby223
链接:https://www.jianshu.com/p/dd7d0db2196e
、
共同學習,寫下你的評論
評論加載中...
作者其他優質文章