请求对象、响应对象(二)

request既是请求对象,也是一个域对象。

一、HttpServletRequest request请求对象

HttpServletRequest request由服务器创建、管理、和销毁,我们只管使用。
request用来封装要请求的信息,我们通过request就可以获取这些请求信息。

1.配置Servlet的虚拟路径

servlet3.0以后支持注解配置,可以简化我们的配置
urlPatterns 和 value 一个意思,都是配置Servlet的虚拟路径

//方式1
@WebServlet(name = "MyServlet1",value = {"/demo1","haha","heihei"})
//方式2
@WebServlet(urlPatterns = "/demo2")

一个servlet可以配置多个虚拟路径;一个映射路径只能对应一个servlet;
当映射路径只有一个,value可以不写;但urlpatterns不可省略

2.通过request获取请求行的请求信息
  1. 获取请求参数
String queryString = request.getQueryString();//结果还需自己截取
  1. 获取请求方式
String method = request.getMethod();
  1. 获取请求ip
String ip = request.getRemoteAddr();
  1. 获取请求协议
String protocol = request.getProtocol();
  1. 获取标识符
    URI:统一资源标识符(资源)
 String uri = request.getRequestURI();
  1. 获取定位符
    URL:统一资源定位符(协议:主机:端口://资源)
StringBuffer url = request.getRequestURL();
  1. 动态获取项目的上下文路径
String contextPath = request.getContextPath();
3.获取请求头的值
String header = request.getHeader("user-Agent");
user-Agent:用户设备
4.获取请求体的信息(只有post请求有)
  1. 获取请求参数
		if(request.getMethod().equals("POST")){
            //post请求获取请求参数
            BufferedReader reader = request.getReader();
            String s = reader.readLine();
        }else if(request.getMethod().equals("GET")){
            //get请求获取请求参数
            String queryString = request.getQueryString();
        }
  1. 上传文件
ServletInputStream in = request.getInputStream();
  1. 通用的获取请求参数
		String username = request.getParameter("username");
        String password = request.getParameter("password");
  1. 中文乱码问题
//tomcat8.0以上的版本,get请求中文不乱码;但post请求中文会乱码。
//解决中文乱码问题
        request.setCharacterEncoding("utf-8");
  1. 去复选框里的数据——针对复选框
爱好:<input type="checkbox" name="hobby" value="running">跑步
    <input type="checkbox" name="hobby" value="singing">唱歌
    <input type="checkbox" name="hobby" value="swimmimg">游泳
        String[] hobbies = request.getParameterValues("hobby");
        for (String hobby : hobbies) {
            System.out.println(hobby);
        }
  1. 一次性获取表单里的所有内容
Map<String, String[]> parameterMap = request.getParameterMap();
        Set<Map.Entry<String, String[]>> entries = parameterMap.entrySet();
        for (Map.Entry<String, String[]> entry : entries) {
            String key = entry.getKey();
            System.out.println(key);
            String[] value = entry.getValue();
            System.out.println(Arrays.toString(value));
        }
  1. 获取表单里的所有的键
//获取所有参数的名称,枚举类型
        Enumeration<String> parameterNames = request.getParameterNames();
        while(parameterNames.hasMoreElements()){
            String s = parameterNames.nextElement();
            System.out.println(s);//键
            String parameter = request.getParameter(s);//键找值
            System.out.println(parameter);
        }
5.请求转发
request.getRequestDispatcher("/demo2").forward(request,response);
  1. 请求转发、重定向
请求转发、重定向
共同点都可以进行资源的跳转
不同点重定向:两次请求,两次响应;请求转发:一次请求,一次响应
重定向:地址栏,会发生变化;请求转发:地址栏不发生变化
重定向:既可以跳转内部资源,也可以跳转外部资源;请求转发只能跳转内部资源
6.request域对象
  1. 范围:是一次请求,一次响应(只存在于一次请求响应中)
  2. 存取数据:
request.setAttribute("name","张三");
Object name = request.getAttribute("name");
  1. ServletContext全局域对象、request请求域对象
ServletContext全局域对象request请求域对象
ServletContext 代表整个web应用request 域对象:他代表的范围,是一次请求和一次响应
  1. 注意:
  • request域对象共享数据时——>用请求转发
    用重定向时——>不能用request,可以用ServletContext域对象共享数据
  • WEB-INF下面的资源,重定向不能访问
    WEB-INF下面的资源,要访问,只能请求转发
7.路径的书写

建议以/开头

  • (html、jsp)页面上的都需要项目的上下文路径;
  • 重定向也需要项目的上下文路径;
  • 请求转发不需要,写了会报错(请求转发只能访问内部资源)。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值