欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Request对象

程序员文章站 2022-06-11 15:46:52
...

Request对象

Request对象概述

Request对象获取客户端的请求数据, 接口ServletRequest,子接口HttpServletRequest继承ServletRequest.

HttpServletRequest接口的实现类是Tomcat引擎提供.

Request对象获取请求行

  • String getMethod() 获取提交的方式 (GET,POST)
  • String getRequestURI() 获取请求的参数,请求服务器路径
  • StringBuffer getRequestURL() 获取请求的参数,请求服务器路径
  • String getQueryString()获取请求行 问号后面的参数 (GET)
  • String getContextPath() 获取WEB应用名称
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    //request对象方法 getMethod()获取客户端的请求方式
    String method = request.getMethod();
    System.out.println(method);
    //方法 String getRequestURI() 获取请求服务器路径
    //方法 StringBuffer getRequestURL() 获取请求服务器路径
    String URI = request.getRequestURI();
    StringBuffer URL = request.getRequestURL();
    System.out.println("URI=="+URI);//   /WEB04/line
    System.out.println("URL=="+URL);//  http://localhost:8080/WEB04/line

    //方法 String getQueryString()获取请求行,?后面的所有参数
    String query = request.getQueryString();
    System.out.println(query);//username=kjhgf&pass=32erg&hobby=on&hobby=on

    //获取WEB应用名称  String getContextPath()
    String path = request.getContextPath();
    System.out.println(path);//   /WEB04
  //response.sendRedirect(request.getContextPath()+"/ddd");
}

Request对象获取请求头

​ 请求头数据格式键值对, k:v

​ 指导性信息,指导服务器

  • String getHeader(String key)返回对应键的值
  • Enumeration getHeaderNames()
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    /*
     * request获取请求头
     */
     //方法  String getHeader(String key)
    String key = request.getHeader("Referer");
    System.out.println(key);
    /*
     * Enumeration getHeaderNames() 获取所有的请求头的键
     * 返回值Enumeration接口 (向量枚举)
     * 集合:1.0-1.1 Enumeration    集合1.2  迭代器
     * Iterator迭代器接口:  hasNext()   next()
     * Enumeration接口:  hasMoreElement()  nextElement()
     */
    Enumeration<String> enums  = request.getHeaderNames();
    while (enums.hasMoreElements()){
         key = enums.nextElement();
         String value = request.getHeader(key);
        System.out.println(key+"=="+value);
    }
}

Request获取请求参数

  • String getParameter(“表单中的name值”)获取指定的请求参数
  • String[] getParameterValues(“表单中的name值”)获取参数中的一键多值
  • Map<String,String[]> getParameterMap()获取提交的所有参数
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    /*
     * request 获取客户端提交数据
     */
    //方法getParameter(String key)指定表单中的参数
    String username = request.getParameter("username");
    String password = request.getParameter("pass");
    System.out.println(username+"=="+password);

    //方法getParameterValues()获取一键多值  checkbox  radio
    String[] hobby = request.getParameterValues("hobby");
    System.out.println(Arrays.toString(hobby));
    System.out.println("=============");
    //方法 getParameterMap()获取提交的所有参数
    Map<String,String[]> map = request.getParameterMap();
    for (String key : map.keySet()){
        String[] value = map.get(key);
        System.out.println(key+"="+Arrays.toString(value));
    }
}

Request域对象

作用域: Request域对象的作用域比较小,范围是一次请求有效

再一次请求无效

  • 域对象存储数据: setArratibute(String key, Object value)
  • 取出域对象数据: Object getAttribute(String key)
  • 移除域对象数据: removeAttribute(String key)
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    //向域对象 ,request 存储数据
    request.setAttribute("heima","java");
    //取出域对象数据
    Object value = request.getAttribute("heima");
    System.out.println("servlet1="+value);
}

转发

Request对象

转发的实现步骤

  • request对象方法获取转发器 RequestDispatcher getRequestDispatcher(“转发地址”)返回值就是转发器
  • 使用转发器对象的方法 forward
//获取转发器对象,传递转发的路径
RequestDispatcher dispatcher = request.getRequestDispatcher("/servlet2");
//转发器方法
dispatcher.forward(request,response);

转发和重定向区别

Request对象

用户注册功能

Request对象

开发步骤

  • 创建数据库数据表
  • 创建新Module
  • 复制页面
  • 创建包
    • 添加需要jar
    • 配置文件
  • 功能,编写服务器程序
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    /*
     * 获取客户端提交的数据 Map
     * 数据封装到JavaBean对象中 (User)
     * 调用业务层的方法,传递User
     * 页面重定向到登录页面
     */
    request.setCharacterEncoding("utf-8");
    //获取客户端提交的数据 Map
    Map<String,String[]> map = request.getParameterMap();
    //集合中数据封装到User中
    User user = new User();
    //apache 开发工具类,简化JavaBean开发
    //BeanUtils类,静态方法 populate(JavaBean,map集合)
    try {
        BeanUtils.populate(user, map);
    }catch (Exception ex){ex.printStackTrace();}
    //调用业务层方法,传递JavaBean,完成注册
    UserService service = new UserService();
    service.register(user);
    //注册完成,页面到达登录页面,cdx
    response.sendRedirect( request.getContextPath()+"/login.jsp" );
}
/**
 *  注册方法
 *  接收web层传递JavaBean对象
 *  将JavaBean传递dao层
 */
public void register(User user){
    UserDao dao = new UserDao();
    try {
        dao.register(user);
    } catch (SQLException e) {
        e.printStackTrace();
    }
}
/**
 *  注册方法
 *  接收service传递JavaBean
 *  取出JavaBean数据,写入数据表
 */
public void register(User user) throws SQLException {
    QueryRunner qr = new QueryRunner(C3P0Utils.getDataSource());
    //拼写添加数据SQL语句
    String sql = "insert into user values(?,?,?,?,?,?,?)";
    //创建数组,存储User对象的数据
    Object[] params = {null,user.getUsername(),user.getPassword(),user.getEmail(),
                      user.getName(),user.getGender(),user.getBirthday()};
    //执行SQL
    qr.update(sql,params);
}

用户登录

Request对象

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    /*
     * 实现登录Servlet
     * 接收客户端提交用户名密码
     * 提交参数传递业务层
     * 接收业务层返回结果 (boolean)
     * 判断结果: true 登录成功
     *    页面重定向到首页
     *
     * 判断结果: false 登录失败
     *   错误数据存储到request域中
     *   转发回原有的登录页面
     */
    String username = request.getParameter("username");
    String password = request.getParameter("password");
    //调用业务层方法,获取返回值,传递用户名密码
    UserService service = new UserService();
    boolean flag = service.login(username, password);
    //判断flag值,是true,登录成功,重定向首页
    if(flag){
        response.sendRedirect( request.getContextPath() );
    }else{
        //flag值是false,登录失败,错误信息存储到request域
        request.setAttribute("msg","用户名或密码错误");
        //转发回登录页面
        request.getRequestDispatcher("/login.jsp").forward(request,response);
    }
}
/**
 * 登录方法
 * 接收Web层传递用户名和密码
 * 参数传递dao层(数据验证)
 * 获取dao返回值,User
 * 结果,返回web层boolean
 */
public boolean login(String username,String password){
    UserDao dao = new UserDao();
    User user = null;
    try {
       user =  dao.login(username,password);
    } catch (SQLException e) {
        e.printStackTrace();
    }
    //判断user对象,是null,登录失败返回false
    if(user==null)
        return false;
    return true;
}
/**
 * 登录方法
 * 接收service层传递用户名和密码
 * 查询数据表,获取结果集
 * 结果集封装User对象,返回业务层
 */
public User login(String username,String password) throws SQLException {
    QueryRunner qr = new QueryRunner(C3P0Utils.getDataSource());
    //拼写登录查询语句
    String sql = "select * from user where username=? and password=?";
    User user = qr.query(sql,new BeanHandler<User>(User.class),username,password);
    return user;
}

login.jsp

<div style="color: red">
						<!--
						  显示服务器中存储数据
						  数据存储到request域中
						  写Java代码
						  标记:  < %   任意Java代码   %>
						  需要,在页面中显示数据

						  域取出数据,没有数据,显示null
						-->
						<%=  request.getAttribute("msg")==null?"":request.getAttribute("msg")   %>
					</div>