(10A)HttpServletRequest:获取客户机信息、获取消息头信息、获取客户机请求参数、请求转发forward
来源:互联网 发布:oracle数据库教程pdf 编辑:程序博客网 时间:2024/06/06 20:10
HttpServletRequest
该对象表示浏览器的请求,当web服务器得到该请求后,会把请求信息封装成一个HttpServletRequest对象,所以在servlet中可以通过request取数据。
一、获取客户机信息
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html;charset=utf-8"); PrintWriter out = response.getWriter(); //得到URL String url=request.getRequestURL().toString(); out.println("url:"+url+"<br/>");http://localhost:8080/request/demo //获取URI String uri=request.getRequestURI().toString(); out.println("uri:"+uri+"<br/>");uri:/request/demo //获取请求部分的数据,http://localhost:8080/request/demo?username=zhangsan&psw=1234 //得到的是请求行中的参数部分(参数名+值) String queryString=request.getQueryString(); out.println("queryString"+queryString+"<br/>");//queryStringusername=zhangsan&psw=1234 //获取发送请求的客户端ip地址 String addr=request.getRemoteAddr(); out.println("addr"+addr+"<br/>"); //用途:可以封杀某个客户端,不让其访问该界面 if(addr.equals("192.168.2.4")) { //response.sendRedirect("/request/error");//简单封杀,转到某个页面 } //获取发送请求的主机名,在dns中注册,则会返回主机名。否则返回ip地址 String host=request.getRemoteHost(); out.println("host:"+host+"<br/>"); //获取客户机使用的端口 int port=request.getRemotePort(); int serverport=request.getLocalPort(); out.println("客户端口:"+port+"---服务器端口"+serverport); }
二、获取消息头信息
getHeader方法:根据键获得值
getHeaders方法(用的少)
getHeaderNames方法
Enumeration <String> headers=request.getHeaderNames(); while(headers.hasMoreElements()) { //获取键 String name=headers.nextElement(); String value=request.getHeader(name); out.println(name+"---"+value+"<br/>"); }
三、获取客户机请求参数
注意
①复选框的提交:request.getParameterValues(name)
②文本域textarea标签
③下拉菜单select标签
④隐藏标签hiddern
<body> <form action="/request/Demo2" method="post"> 用户名:<input type="text" name="username"/><br/> 密 码:<input type="password" name="psw"/><br/> 性 别:<input type="radio" name="sex" value="man" >男 <input type="radio" name="sex" value="girl" >女<br/> 爱 好:<input type="checkbox" name="hobbies" value="dance"/>跳舞 <input type="checkbox" name="hobbies" value="sing"/>唱歌 <input type="checkbox" name="hobbies" value="basketball"/>篮球 <input type="checkbox" name="hobbies" value="football"/>足球<br/> 城 市:<select name="cities"> <option value="beijing">北京</option> <option value="shanghai">上海</option> <option value="guangdong">广东</option> <option value="shenzhen">深圳</option> </select><br/> 简 介:<textarea cols="20" row="10" name="intro" value="">请输入介绍</textarea><br/> 提交照片:<input type="file" name="image" value=""/> <br/> <input type="hidden" name="hidden1" value="avb" ><br/> <input type="submit" value="提交"/> </form> </body>
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html;charset=utf-8"); request.setCharacterEncoding("utf-8"); PrintWriter out = response.getWriter(); Enumeration<String> names=request.getParameterNames(); while(names.hasMoreElements()) { String name=names.nextElement(); if(name.equals("hobbies"))// { String[] str=request.getParameterValues(name); out.println(name+":"); for(int i=0;i<str.length;i++) { if(i==str.length-1){ out.print(str[i]); } else{ out.print(str[i]+","); } } out.println(); } else { String value=request.getParameter(name); out.println(name+":"+value+"<br/>"); } } }
四、请求转发
使用请求转发来实现response.sendDedirect()方法效果
request一次请求有效时间是:未返回浏览器前
public class LoginServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html;charset=utf-8"); PrintWriter out = response.getWriter(); out.println("<form action='/forward/servlet1' method='post'>"); out.println("用户名:<input type='text' name='username' value=''/>"); out.println("<input type='submit' value='提交'/>"); out.println("</form"); }
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html;charset=utf-8"); request.setCharacterEncoding("utf-8"); PrintWriter out = response.getWriter(); String username=request.getParameter("username"); //把username放入request域对象中 request.setAttribute("username", username); //表示使用转向的方法,把request和response对象转向/servlet2 request.getRequestDispatcher("/servlet2").forward(request, response); }
public class servlet2 extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html;charset=utf-8"); request.setCharacterEncoding("utf-8"); PrintWriter out = response.getWriter(); String u=(String) request.getAttribute("username"); out.println("接收到的用户名为:"+u); }
注意
①使用forward不能转到该web应用之外的URL
②因为forward是发生在web服务器,所以servlet1与servlet2使用的是同一个request和response
使用sendRedirect()方法不能通过request.setAttribute()把属性传递给下一个servlet
(因为已经返回给客户端,request不同)
sendRedirect()和forward的区别是什么?
①叫法不同,sendRedirect()重定向(转发),forward叫转发
②实际发生的位置不同
sendRedirect发生在浏览器
forward发生在web服务器
③用法不一样
request.getRequestDispatcher(“/servlet2”).forward(request, response);[]
response.sendRedirect(“/web应用/资源URI”);
④跳转范围不同
sendRedirect可以去任何的URL
forward只能当前的web应用的资源名
一次http请求?
只要没有停止,也没有回到浏览器重定向,一次http中可以有多个servlet forward
如果转发多次,浏览器地址栏保留的是第一次转向的servletURL
- (10A)HttpServletRequest:获取客户机信息、获取消息头信息、获取客户机请求参数、请求转发forward
- 获取HttpServletRequest请求消息头、消息行信息
- httpServletRequest对象获取请求消息头
- 4种方式获取客户机的请求参数
- HttpServletRequest获取请求参数
- 演示获取请求头信息
- 黑马day04 request获取客户机的信息
- Java web获取客户机相关信息
- 获取HttpServletRequest头文件信息
- 请求消息头获取
- httpServletRequest对象获取请求参数
- url get请求头信息获取
- php获取请求返回头信息
- 获取请求头杂七杂八的信息
- Servlet--获取Http协议请求头信息
- 从请求的头获取信息
- HttpServletRequest请求中获取操作系统,浏览器及浏览器版本信息
- 学习笔记(JSJ-servlet获取请求头信息)
- 在VMware虚拟机的Red Hat Enterprise Linux 6.5 64bit安装oracle 11g
- web HTML,JS面试题
- 代理模式
- cmake 为release版本创建pdb文件
- 【Spark系列3】Spark优化
- (10A)HttpServletRequest:获取客户机信息、获取消息头信息、获取客户机请求参数、请求转发forward
- 234
- 安装演示数据库Sakila
- 计算几何练习
- 单片机C 浮点数转化为字符数组问题
- R语言基础
- PAT乙级1009. 说反话 (20)
- VC++ 对话框工程MFC中父窗口和子窗口传值方法
- 使用jQuery获取select的length属性致错