HttpServletRequest

来源:互联网 发布:云计算和传统的区别 编辑:程序博客网 时间:2024/06/08 12:08
     HttpServletRequest对象用来操作Http请求中的请求部分(请求消息行,请求消息头,请求正文),下面是常用的方法
1、请求行
     ①getMethod();获得请求方式(Get,Post)
     ②***getRequestURL();获得客户端请求的完整的URL
     ③***getRequestURI();获得请求行中的资源名部分
     ④***getContextPath();获得应用的目录
     ⑤getQueryString();获得请求消息行中的参数部分
2、请求消息头
     ①getHeader(String header);根据头名得到对应的信息值
     ②getHeaderNames();得到所有头名
     ③getHeaders(String header);更具头名得到所有相同头名对应的信息值
下面对请求行和请求消息头这些方法进行测试的Servlet:
package Test_HttpServletRequest;import java.io.IOException;import java.util.Enumeration;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;public class Test_HttpServletRequest extends HttpServlet{       @Override       protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {             //请求消息行部分             System.out.println(req.getMethod());//得到请求方式             System.out.println(req.getRequestURL());//得到客户端请求的完整URL             System.out.println(req.getRequestURI());//得到请求行中的资源名部分             System.out.println(req.getContextPath());//得到应用的虚拟目录 Servlet             System.out.println(req.getQueryString());//得到请求消息行中的参数部分             //请求消息头部分             String header = req.getHeader("User-Agent");//得到客户端的信息             System.out.println(header);             Enumeration<String> names = req.getHeaderNames();//得到所有请求消息头中的name             while(names.hasMoreElements()){//得到每一个name对应的值                    String name = names.nextElement();                    System.out.println(name+":"+req.getHeader(name));             }       }       @Override       protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {             doGet(req,resp);       }}
Servlet对应的xml配置:
<servlet>       <servlet-name>request</servlet-name>       <servlet-class>Test_HttpServletRequest.Test_HttpServletRequest</servlet-class></servlet><servlet-mapping>       <servlet-name>request</servlet-name>       <url-pattern>/request</url-pattern></servlet-mapping>
3、请求正文
     常用如下方法来获取从form标签(表单)中提交的数据:
     ①***getParameter(String name) 根据表单中的name值获取value属性值
     ②***getPaeameterValues(String name) 根据name值获取复选框中value的值,该方法返回一个字符串数组
     ③getParameterNames() 获取表单中所有name值
     ④***getParameterMap 得到表单提交的所有值
     ⑤getInputStream 以字节流的方式得到所有表单数据
下面是一个例子,用来获取表单数据:
Servlet代码:
package Test_HttpServletRequest;import java.io.IOException;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;/** * 获取表单数据 * @author wushijia * */public class getForm extends HttpServlet{    @Override    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {        req.setCharacterEncoding("UTF-8");//告诉服务器使用什么编码,HTML文档用的是什么编码,里面的值就传什么编码        //获取表单数据        String username = req.getParameter("username");//用户名        String pwd = req.getParameter("pwd");//密码        String sex = req.getParameter("sex");//性别        String[] hobby = req.getParameterValues("hobby");//爱好        String city = req.getParameter("city");//所在地        System.out.println(username);        System.out.println(pwd);        System.out.println(sex);        for (int i = 0;hobby != null && i < hobby.length; i++) {            System.out.print(hobby[i]+" ");        }        System.out.println();        System.out.println(city);    }    @Override    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {        doGet(req, resp);    }}
html文档:
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Strict//EN" "http://www.w3.org/TR/html4/strict.dtd"><html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>Insert title here</title></head><body>       <form action="/Servlet/form" method="post"><!-- 提交到指定位置的servlet中 -->             用户名:<input type="text" name="username"><br/>             密码:<input type="password" name="pwd"><br/>             性别:<input type="radio" name="sex" value="男">男                    <input type="radio" name="sex" value="女">女                    <br/>             爱好:                    <input type="checkbox" name="hobby" value="编程">编程                    <input type="checkbox" name="hobby" value="健身">健身                    <input type="checkbox" name="hobby" value="看书">看书                    <br/>             所在城市:                    <select name="city">                           <option value="cq">重庆</option>                           <option value="bj">北京</option>                    </select>                    <br>                    <input type="submit" value="提交">       </form></body></html>
3、操作非表单数据
     想要向request对象中添加非表单数据(即不是从表单里提交的数据),使用setAttribute(String name,Object obj)即可,如果想要获取添加的数据,使用getAttribute(String name)即可
4、请求转发和请求重定向的区别
     我们都知道,请求转发是利用request对象中的getRequestDispatcher()和forward()方法来完成的,而请求重定向是用response对象中的sendRedirect()方法来完成的,下面说说他们的区别。
     请求转发:①请求转发后,浏览器地址栏的地址不会改变
                     ②客户端始终只请求一次
                     ③请求转发只能跳转到当前应用下的Servlet,不能跳转到其他应用
                     ④请求转发能够传递数据
                     ⑤转发由服务器执行
     请求重定向:①不能传递数据
                        ②客户端发送两次请求
                        ③请求重定向能够跳转到其他应用
                        ④浏览器的地址栏的地址会发生改变
                        ⑤重定向由客户端执行
原创粉丝点击