HttpServletRequest

     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,不能跳转到其他应用
                     ④请求转发能够传递数据
                     ⑤转发由服务器执行
     请求重定向:①不能传递数据
                        ②客户端发送两次请求
                        ③请求重定向能够跳转到其他应用
                        ④浏览器的地址栏的地址会发生改变
                        ⑤重定向由客户端执行
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值