Request快速入门!!!

Request快速入门!!!

Request简述

什么是request?HTTP协议中的request,Servlet中的request

在这里插入图片描述

Http

超文本传输协议,用于定义web浏览器与web服务器之间交换数据的过程!

默认端口:80

Http请求

  • 请求行
    • get方式:请求方式/请求地址/请求参数/协议
    • post方式:请求不会将请求参数放到请求行中,而是放到了请求体中
  • 请求头
  • 请求体(get请求没有请求体)

Request-获取请求行

两种方式:get,post

  • getMethod()

  • getContextPath():获取请求行中的项目地址
String path = request.getContentPath();

Request-获取请求头

  • getHeader():获取请求头中的一个键对应的一个值

//获取浏览器的类型
String type = request.getHeader("User-Agent");
System.out.println(type);

Request-获取请求体-获取参数-解决中文乱码问题

//1.获取请求体中的参数
//get请求没有请求体,也可以通过这个方法来获取参数
String username = request.getParameter("username");		//传入的参数要和表单中的name的值相同才可以获取
String password = requestt.getParameter("password");


  • 中文传输乱码问题

    tomcat 8.5 默认可以处理get请求中的中文

    如果是POST请求,需要自己手动设置编码 setCharactEncoding()

    request.setCharacterEncoding("UTF-8");
    

Request-获取请求体-获取多个值

  • String[] values = getParameterValues(String name)
  • Map<String,String[]> getParameterMap();
//获取多个值,将传过来的值封装到map中
Map<String,String[]> map = request.getParamterMap();
Set<String> keys = map.keySet();
for (String key : keys) {
    System.out.println(key + " " Arrayy.toString(map.get(key));
}

apache BeanUtils工具类

BeanUtils是什么?是apache组件的成员之一,主要用于简化JavaBean封装数据的操作,需要导入jar包

//在没有使用BeanUtils,封装JavaBean很麻烦
//1.获取所有的参数
Map<String,String[]> map = request.getParameterMap();

String[] usernames = map.get("username");
String[] passwords = map.get("password")
//2.一个个封装    
User user = new User();
user.setUsername(usernames[0]);
user.setPassword(password[0]);
.....
.....

BeanUtils-populate

//populate(Object o,Map map),将要封装的对象和封装的集合传个参数
//注意!!!必须要让参数的参数名与类成员变量名一致
try {
    BeanUtils.populate(user,map);
} catch (Exception e) {
    e.printStack()
}
System.out.prinln(user);


底层源码分析

获取key,生成set方法

如:key-username ---->setUsername

调用对象中同名的set方法封装值

request-转发(forward)

什么是请求转发,浏览器访问Servlet1,Servlet1处理请求得到结果,没有将结果返回给浏览器,而是将请求转发到Servlet2,由Servlet2再处理之后返回给浏览器。

在这里插入图片描述

请求转发的方法

  • setAttribute(String key,Object o): 给请求域中设置值

  • getAttribute(String key):获取请求域中的值

  • getRequestDispatcher("/demo").forward(request,response); 请求转发

    //将“游戏本”转发到下一个Servlet
    //1.存数据
    request.setAttribute("name","游戏本");
    request.getRequestDispatcher("/demo02").forward(request.response);
    
    //在另一个Servlet中获取转发过来的数据,组装渲染后响应到浏览器
    String name = request.getAttribute("name");
    response.setContentType("text/html;charset=utf-8");
    response.getWriter().write("<font color='red'>" + name + "</font>");
    

请求转发与重定向的区别

  • 重定向:

    • 两次请求,两次响应
    • 重定向不携带数据
    • 地址栏发生变化
  • 转发

    • 一次请求,一次响应
    • 转发携带数据
    • 地址栏不发生变化

在这里插入图片描述

案例-登录注册功能

//一个简易的注册的servlet

@WebServlet("/register")
public class Demo02_RegisterServlet extends HttpServlet {

    private UserService userService = new UserService();

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

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

        //1.获取请求参数
        Map<String, String[]> map = request.getParameterMap();
        User user = new User();
        BeanUtils.populate(user,map);
        boolean flag = userService.register(user);
        if (flag) {
            response.sendRedirect(request.getContextPath() + "login.jsp");
        } else {
            response.getWriter().write("注册失败!");
        }

    }
}

登录

@WebServlet("/login")
public class Demo02_LoginServlet extends HttpServlet {

    private UserService userService = new UserService();

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

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

        //1.获取请求参数
        String username = request.getParameter("username");
        String password = request.getParameter("password");
        
        User user = userService.login(username,password);
        if (user != null) {
            //如果登录成功,将用户信息存到session,转发到首页
            HttpSession session = request.getSession();
            session.setAttribute("user",user);
            request.getRequestDispatcher("index.jsp").forward(request,response);
        } else {
            //将错误信息转发到登录页面
            request.setAttribute("message","用户名或密码错误!");
            request.getRequestDispatcher("login.jsp").forward(request,response);
        }
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值