javaweb之request

Request

什么是request

http协议中的request:http协议>超文本传输协议

http协议的默认端口是80

Servlet中的request

HttpServletRequest对象,在改接口中定义了获取请求头,请求行,和请求体的方法

获取请求行

String getMethod() //获取请求头中请求的类型 GET POST
String getContextPath() // 获取请求行中项目访问路径

	@WebServlet("/header")
public class GetHeaderServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //获取请求方式(Get,Post)
        String header = request.getMethod(); //GET
        //获取访问的项目名
        String result = request.getContextPath(); ///webDay04_war_exploded
        System.out.println("请求方式为"+header);
        System.out.println("请求路径名为"+result);
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doPost(request,response);
    }
}
获取请求头

String getHeader(String name)//根据键名获取值
Enumeration getHeaderNames(); //获取所有请求头
Enumeration迭代器 hasMoreElement() nextElement()
例如:获取浏览器的类型(User-Agnet)
用于做浏览器的兼容

	@WebServlet("/header")
public class GetHeaderServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //用于获取访问的浏览器
        String name = request.getHeader("User-Agent");
        System.out.println(name);
        //获取所有请求头信息
        //返回的是一个Enumeration迭代器  其中有两个主要的方法 hasMoreElement()  nextElement()
        Enumeration<String> headerNames = request.getHeaderNames();
        //遍历获取里面的内容
        while (headerNames.hasMoreElements()){
            //获取到键值
            String key = headerNames.nextElement();
            //根据键名获取值
            String value = request.getHeader(key);

            //输出打印
            System.out.println(key +":"+ value);

        }

    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doPost(request,response);
    }
}
Enumeration
基本方法

在这里插入图片描述

如何遍历
	
	 //遍历获取里面的内容
        while (en.hasMoreElements()){
            //获取到键值
            String key = en.nextElement();
            //输出打印
            System.out.println(key );

        }

项目的访问路径与项目名称没有任何关系

修改项目访问地址名称
修改名称

请求头,请求行,请求体(http中request)

http中request

get请求

只有请求头与请求行,因为请求体在请求行中

post请求

请求体是浏览器真正要发给服务器的数据

修改欢迎页

在这里插入图片描述

request对象的方法

获取参数

String getParameter(String name)//参数 一个值时
String[] getParameterValues(String name)// 获取多个值时
//获取所有的参数名和参数值
Map<String,String> map = request.getParameterValues(String name)(很少单独使用,会与BeanUtils一起使用)

	//根据参数名,获取到值
    String username = request.getParameter("username");
    //获取到该参数名的多个值
    String[] hobbies = request.getParameterValues("hobby");
    //获取到前端所有数据
    Map<String, String[]> map = request.getParameterMap();

处理中文

Tomcat8.5 已默认可以处理GET请求的中文提交,但是没有处理POST的中文提交
//设置请求体的数据的编码为utf-8

	request.setCharacterEncoding("UTF-8");

BeanUtils工具类

BeanUtils是Apache Commons组件的成员之一,主要用于简化JavaBean封装数据的操作
使用时,需要导包

BeanUtils中的populate类

使用步骤:

  • 添加jar到web/WEB_INF/lib目录
  • idea识别
  • 选中jar包—>右键,选择add AS Libary
  • 调用populate()方法

参数的参数名与类的成员变量名一致
前端页面
在这里插入图片描述

user类
在这里插入图片描述

使用BeanUtils

	@WebServlet("/login")
public class LoginServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        response.setContentType("text/html;charset=utf-8");
        //创建一个用户对象
        User user = new User();

        //获取到前端所有数据
        Map<String, String[]> map = request.getParameterMap();

        //由于前端页面的参数太多,所以使用BeanUtils工具包来直接获取前端输入框中的数据
        try {
            BeanUtils.populate(user,map);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

    }
}

请求转发和重定向

转发与重定向的区别

请求转发与重定向的区别

什么是转发

浏览器访问Servlet1,Servlet1将参数处理得到结果,没有直接返回给浏览器,而是将结果带给Servlet2,由servlet2再处理之后返回给浏览器。

请求转发

	request.getRequestDispatcher(地址).forward(request,response);

如果HTML文件是存放在WEB_INF目录下的,那么只能使用请求转发。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值