栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

4-27 请求参数的通用方法/请求转发/共享数据/获取ServletContext

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

4-27 请求参数的通用方法/请求转发/共享数据/获取ServletContext

 获取请求体的参数的通用方法 

  1. 获取请求参数通用方式:不论get还是post请求方式都可以使用下列方法来获取请求参数
                1. String getParameter(String name):根据参数名称获取参数值   

例如username=zs&password=123  参数写入username 会返回zs的字符串
                2. String[] getParameterValues(String name):根据参数名称获取参数值的数组 

例如 hobby=study&hobby=game(键相同值不同)   多用于复选框 得到一个String数组
                3. Enumeration getParameterNames():获取所有请求的参数名称 

得到的是枚举类型
                4. Map getParameterMap():获取所有参数的map集合  键和值都获取出来存在map集合中      为什么 是为了兼容上面2中的情况

方法演示

这里就是post 或者get方法都可以用了

package cn.itcat.web.servlet;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.Enumeration;
import java.util.Map;
import java.util.Set;

//注意这里时获取参数   请求体的参数
@WebServlet( "/demo10")
public class RequestDemo10 extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        String username = request.getParameter("username");
        System.out.println(username);



        String[] hobbies = request.getParameterValues("hobby");
        for (String hobby : hobbies) {
            System.out.println(hobby);
        }



        Enumeration parameterNames = request.getParameterNames(); //出现了枚举就要用hasMoreElement()  nextElement()方法来
        while(parameterNames.hasMoreElements()){
            String name = parameterNames.nextElement();
            System.out.println(name);
            String value = request.getParameter(name);
            System.out.println(name+":"+value);  //因为getParameter();方法只能获取一个参数值所以复选框选了俩但是只有一个会被打印
            System.out.println("=======");
        }


        Map parameterMap = request.getParameterMap(); //名字和值都拿出来 封装到一个Map集合中  String[]避免了复选框获取不到
        //map遍历 keySet();方法
        Set keySet = parameterMap.keySet();
        for (String name : keySet) {
            //根据key键来获取值
            System.out.println(name);
            String[] values = parameterMap.get(name); //注意这是一个数组
            for (String value : values) {
                System.out.println(value);
                System.out.println("------");
            }
        }

    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
              this.doPost(request,response);  //这样就两个代码一样了
    }
}

html:

 

中文乱码问题:

获取参数就是获取请求体的参数

  * 中文乱码问题:
                    * get方式:tomcat 8 已经将get方式乱码问题解决了
                    * post方式:会乱码
                        * 解决:在获取参数前,设置request的编码request.setCharacterEncoding("utf-8");

get: 如果在html表单form标签设置get不会出现下面的中文乱码问题

post: 输入中文会乱码 英文不乱码  

解决:

加一行代码request.setCharacterEncoding("utf-8");    ("  ")中的内容跟着html中的下图的文字格式来

 加了这行代码request.setCharacterEncoding("utf-8"); 就不会出现post提交中文乱码问题

请求转发 :   请求转发和数据共享也时不一样的

一种在服务器内部的资源跳转方式  使每一个servlet的功能细化

如下图  Aservlet完成一部分工作   再跳转到Bservlet完成一部分工作

  1. 步骤:
         1. 通过request对象获取请求转发器对象RequestDispatcher:

RequestDispatcher getRequestDispatcher(String path--转发资源的路径好比/demo01)
          2. 使用转发器RequestDispatcher对象中的forward来进行转发:

forward(ServletRequest request, ServletResponse response) 

两行代码结合

req.getRequestDispatcher("/RequestDemo10").forward(req,resp); 
 //一行代码做到请求转发  绿色的内容要看具体的参数名称
两个Demo   注意dopost 和 doget都要写东西

 

 

客户端发送一个请求间接访问了两个资源 

输出:demo12被访问了  demo13被访问了

 

         2. 特点:
                    1.如上图虽然访问了RequestDemo12 和RequestDemo13但是 浏览器地址栏路径不发生变化
                    2. 只能转发到当前服务器内部资源中。 只能访问服务器项目内部 就好比不能访问百度
                    3. 转发是一次请求  就是只发了一个请求给demo12  但是两个资源同时被访问了,多个资源使用的是同一个请求
 

 3. 共享数据(域对象):

涉及数据转发呢就涉及到数据通信好比servletA告诉B自己干到哪了(数据通信共享)
                * 域对象:一个有作用范围的对象,可以在范围内共享数据
                * request域(就是域对象):代表一次请求的范围,结构图servletA和B在一次请求的范围内,request域一般用于请求转发的多个资源中共享数据

    * 方法:如何实现数据共享? request提供了三种方法  
                    1. void setAttribute(String name,Object obj):存储键值对存储数据 设置的是键值对
                    2. Object getAttitude(String name):通过键获取值
                    3. void removeAttribute(String name):通过键移除键值对
代码:

 

 

 输出:

 4. 获取ServletContext:
                * ServletContext    getServletContext()   返回值是ServletContext 对象

 

 

 

 


             

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/841736.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号