小言_互联网的博客

Request和Response-学习笔记02【请求转发和request共享数据、Request_获取ServletContext、request登录案例】

570人阅读  评论(0)
  1. Request和Response-学习笔记01【Request_原理和继承体系、Request_获取请求数据】
  2. Request和Response-学习笔记02【请求转发和request共享数据、Request_获取ServletContext、request登录案例】

目录

03 请求转发和request共享数据

Request_请求转发

Request_共享数据(域对象)

04 Request_获取ServletContext

Request_获取ServletContext

05 request登录案例

登录案例_需求

登录案例_分析

登录案例_代码实现1

开发步骤1:创建项目,导入html页面,配置文件,jar包

开发步骤2:创建数据库环境

开发步骤3:创建包cn.itcast.domain,创建类User

开发步骤4:创建包cn.itcast.util,编写工具类JDBCUtils

开发步骤5:创建包cn.itcast.dao,创建类UserDao,提供login方法

测试login()方法

登录案例_代码实现2

​开发步骤6: 编写cn.itcast.web.servlet.LoginServlet类

​开发步骤7:编写FailServlet和SuccessServlet类

开发步骤8:login.html中form表单的action路径的写法

登录案例_BeanUtils基本使用

开发步骤9:BeanUtils工具类,简化数据封装

登录案例_BeanUtils介绍


03 请求转发和request共享数据

Request_请求转发

Request_其他功能:
        1. 获取请求参数通用方式:不论get还是post请求方式都可以使用下列方法来获取请求参数。
        2. 请求转发:一种在服务器内部的资源跳转方式
            1. 步骤:
                1. 通过request对象获取请求转发器对象:RequestDispatcher getRequestDispatcher(String path)
                2. 使用RequestDispatcher对象来进行转发:forward(ServletRequest request, ServletResponse response)
            2. 特点:
                1. 浏览器地址栏路径不发生变化。
                2. 只能转发到当前服务器内部资源中。
                3. 转发是一次请求。

Request请求转发&域对象

Request_共享数据(域对象)

Request_其他功能:
        1. 获取请求参数通用方式:不论get还是post请求方式都可以使用下列方法来获取请求参数。
            1. String getParameter(String name):根据参数名称获取参数值 username=zs&password=123
            2. String[] getParameterValues(String name):根据参数名称获取参数值的数组 hobby=xx&hobby=game
            3. Enumeration<String> getParameterNames():获取所有请求的参数名称
            4. Map<String,String[]> getParameterMap():获取所有参数的map集合
        2. 请求转发:一种在服务器内部的资源跳转方式
            1. 步骤:
                1. 通过request对象获取请求转发器对象:RequestDispatcher getRequestDispatcher(String path)
                2. 使用RequestDispatcher对象来进行转发:forward(ServletRequest request, ServletResponse response)
            2. 特点:
                1. 浏览器地址栏路径不发生变化
                2. 只能转发到当前服务器内部资源中。
                3. 转发是一次请求
        3. 共享数据:
            * 域对象:一个有作用范围的对象,可以在范围内共享数据
            * request域:代表一次请求的范围,一般用于请求转发的多个资源中共享数据
            * 方法:
                1. void setAttribute(String name,Object obj):存储数据
                2. Object getAttitude(String name):通过键获取值
                3. void removeAttribute(String name):通过键移除键值对
        4. 获取ServletContext

Request请求转发&域对象

04 Request_获取ServletContext

Request_获取ServletContext

Request_其他功能:
        1. 获取请求参数通用方式
        2. 请求转发
        3. 共享数据
        4. 获取ServletContext:
            * ServletContext getServletContext()

05 request登录案例

登录案例_需求

案例:用户登录

* 用户登录案例需求:
    1.编写login.html登录页面
        username & password 两个输入框
    2.使用Druid数据库连接池技术,操作mysql,day14数据库中user表
    3.使用JdbcTemplate技术封装JDBC
    4.登录成功跳转到SuccessServlet展示:登录成功!用户名,欢迎您
    5.登录失败跳转到FailServlet展示:登录失败,用户名或密码错误

 

登录案例_分析

登录案例分析

登录案例_代码实现1

开发步骤1:创建项目,导入html页面,配置文件,jar包

 

开发步骤2:创建数据库环境

CREATE DATABASE day14;

USE day14;

CREATE TABLE USER(
    id INT PRIMARY KEY AUTO_INCREMENT,
    username VARCHAR(32) UNIQUE NOT NULL,
    PASSWORD VARCHAR(32) NOT NULL
);

开发步骤3:创建包cn.itcast.domain,创建类User

开发步骤4:创建包cn.itcast.util,编写工具类JDBCUtils


  
  1. package cn.itcast.util;
  2. import com.alibaba.druid.pool.DruidDataSourceFactory;
  3. import javax.sql.DataSource;
  4. import javax.xml.crypto.Data;
  5. import java.io.IOException;
  6. import java.io.InputStream;
  7. import java.sql.Connection;
  8. import java.sql.SQLException;
  9. import java.util.Properties;
  10. /**
  11. * JDBC工具类 使用Durid连接池
  12. */
  13. public class JDBCUtils {
  14. private static DataSource ds;
  15. static {
  16. try {
  17. //1.加载配置文件
  18. Properties pro = new Properties();
  19. //使用ClassLoader加载配置文件,获取字节输入流
  20. InputStream is = JDBCUtils.class.getClassLoader().getResourceAsStream("druid.properties");
  21. pro.load(is);
  22. // 2.初始化连接池对象
  23. ds = DruidDataSourceFactory.createDataSource(pro);
  24. } catch (IOException e) {
  25. e.printStackTrace();
  26. } catch (Exception e) {
  27. e.printStackTrace();
  28. }
  29. }
  30. /**
  31. * 获取连接池对象
  32. */
  33. public static DataSource getDataSource() {
  34. return ds;
  35. }
  36. /**
  37. * 获取连接Connection对象
  38. */
  39. public static Connection getConnection() throws SQLException {
  40. return ds.getConnection();
  41. }
  42. }

开发步骤5:创建包cn.itcast.dao,创建类UserDao,提供login方法

// 调用query方法
User user = template.queryForObject(sql, new BeanPropertyRowMapper<User>(User.class), loginUser.getUsername(), loginUser.getPassword());


  
  1. package cn.itcast.dao;
  2. import cn.itcast.domain.User;
  3. import cn.itcast.util.JDBCUtils;
  4. import org.springframework.dao.DataAccessException;
  5. import org.springframework.jdbc.core.BeanPropertyRowMapper;
  6. import org.springframework.jdbc.core.JdbcTemplate;
  7. /**
  8. * 操作数据库中User表的类——增删改查方法全在此类中
  9. */
  10. public class UserDao {
  11. //声明JDBCTemplate对象共用
  12. private JdbcTemplate template = new JdbcTemplate(JDBCUtils.getDataSource());
  13. /**
  14. * 登录方法
  15. *
  16. * @param loginUser 只有用户名和密码
  17. * @return user包含用户全部数据, 没有查询到,返回null
  18. */
  19. public User login(User loginUser) {
  20. try {
  21. //1.编写sql
  22. String sql = "select * from user where username = ? and password = ?";
  23. //2.调用query方法
  24. User user = template.queryForObject(sql,
  25. new BeanPropertyRowMapper<User>(User.class),
  26. loginUser.getUsername(), loginUser.getPassword());
  27. return user;
  28. } catch (DataAccessException e) {
  29. e.printStackTrace(); // 记录日志
  30. return null;
  31. }
  32. }
  33. }

测试login()方法

登录案例_代码实现2

​开发步骤6: 编写cn.itcast.web.servlet.LoginServlet类

LoginServlet.java:


  
  1. package cn.itcast.web.servlet;
  2. import cn.itcast.dao.UserDao;
  3. import cn.itcast.domain.User;
  4. import org.apache.commons.beanutils.BeanUtils;
  5. import javax.servlet.ServletException;
  6. import javax.servlet.annotation.WebServlet;
  7. import javax.servlet.http.HttpServlet;
  8. import javax.servlet.http.HttpServletRequest;
  9. import javax.servlet.http.HttpServletResponse;
  10. import java.io.IOException;
  11. import java.lang.reflect.InvocationTargetException;
  12. import java.util.Map;
  13. @WebServlet("/loginServlet")
  14. public class LoginServlet extends HttpServlet {
  15. @Override
  16. protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
  17. //1.设置编码
  18. req.setCharacterEncoding( "utf-8");
  19. /* //2.获取请求参数
  20. String username = req.getParameter("username");
  21. String password = req.getParameter("password");
  22. //3.封装user对象
  23. User loginUser = new User();
  24. loginUser.setUsername(username);
  25. loginUser.setPassword(password);*/
  26. //2.获取所有请求参数
  27. Map<String, String[]> map = req.getParameterMap();
  28. //3.创建User对象
  29. User loginUser = new User();
  30. //3.2使用BeanUtils封装
  31. try {
  32. BeanUtils.populate(loginUser, map);
  33. } catch (IllegalAccessException e) {
  34. e.printStackTrace();
  35. } catch (InvocationTargetException e) {
  36. e.printStackTrace();
  37. }
  38. //4.调用UserDao的login方法
  39. UserDao dao = new UserDao();
  40. User user = dao.login(loginUser);
  41. //5.判断user
  42. if (user == null) {
  43. //登录失败
  44. req.getRequestDispatcher( "/failServlet").forward(req, resp);
  45. } else {
  46. //登录成功
  47. //存储数据
  48. req.setAttribute( "user", user);
  49. //转发
  50. req.getRequestDispatcher( "/successServlet").forward(req, resp);
  51. }
  52. }
  53. @Override
  54. protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
  55. this.doGet(req, resp);
  56. }
  57. }

​开发步骤7:编写FailServlet和SuccessServlet类

SuccessServlet.java:


  
  1. package cn.itcast.web.servlet;
  2. import cn.itcast.domain.User;
  3. import javax.servlet.ServletException;
  4. import javax.servlet.annotation.WebServlet;
  5. import javax.servlet.http.HttpServlet;
  6. import javax.servlet.http.HttpServletRequest;
  7. import javax.servlet.http.HttpServletResponse;
  8. import java.io.IOException;
  9. @WebServlet("/successServlet")
  10. public class SuccessServlet extends HttpServlet {
  11. protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  12. //获取request域中共享的user对象
  13. User user = (User) request.getAttribute( "user");
  14. if(user != null){
  15. //给页面写一句话
  16. //设置编码
  17. response.setContentType( "text/html;charset=utf-8");
  18. //输出
  19. response.getWriter().write( "登录成功!"+user.getUsername()+ ",欢迎您!");
  20. }
  21. }
  22. protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  23. this.doPost(request,response);
  24. }
  25. }

FailServlet.java:


  
  1. package cn.itcast.web.servlet;
  2. import javax.servlet.ServletException;
  3. import javax.servlet.annotation.WebServlet;
  4. import javax.servlet.http.HttpServlet;
  5. import javax.servlet.http.HttpServletRequest;
  6. import javax.servlet.http.HttpServletResponse;
  7. import java.io.IOException;
  8. @WebServlet("/failServlet")
  9. public class FailServlet extends HttpServlet {
  10. protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  11. //给页面写一句话
  12. //设置编码
  13. response.setContentType( "text/html;charset=utf-8");
  14. //输出
  15. response.getWriter().write( "登录失败,用户名或密码错误!");
  16. }
  17. protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  18. this.doPost(request,response);
  19. }
  20. }

开发步骤8:login.html中form表单的action路径的写法

登录案例_BeanUtils基本使用

开发步骤9:BeanUtils工具类,简化数据封装

登录案例_BeanUtils介绍

BeanUtils工具类,简化数据封装
    * 用于封装JavaBean的
        1. JavaBean:标准的Java类
            1. 要求:
                1. 类必须被public修饰
                2. 必须提供空参的构造器
                3. 成员变量必须使用private修饰
                4. 提供公共setter和getter方法
            2. 功能:封装数据
        2. 概念:
            成员变量:
            属性:setter和getter方法截取后的产物
                例如:getUsername() --> Username--> username
        3. 方法:
            1. setProperty()
            2. getProperty()
            3. populate(Object obj, Map map):将map集合的键值对信息,封装到对应的JavaBean对象中


转载:https://blog.csdn.net/weixin_44949135/article/details/113795552
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场