欢迎访问 生活随笔!

生活随笔

当前位置: 首页 >

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

发布时间:2024/9/30 39 豆豆
生活随笔 收集整理的这篇文章主要介绍了 Request和Response-学习笔记02【请求转发和request共享数据、Request_获取ServletContext、request登录案例】 小编觉得挺不错的,现在分享给大家,帮大家做个参考.
  • Java后端 学习路线 笔记汇总表【黑马程序员】
  • Request和Response-学习笔记01【Request_原理和继承体系、Request_获取请求数据】【day01】
  • Request和Response-学习笔记02【请求转发和request共享数据、Request_获取ServletContext、request登录案例】[day01]
  • Request和Response-学习笔记03【HTTP响应协议、response之重定向、response之相对路径和绝对路径】【day02】
  • Request和Response-学习笔记04【response之输出数据、response之验证码】【day02】
  • Request和Response-学习笔记05【ServletContext对象、文件下载】【day02】
  • 目录

    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

    package cn.itcast.util;import com.alibaba.druid.pool.DruidDataSourceFactory;import javax.sql.DataSource; import javax.xml.crypto.Data; import java.io.IOException; import java.io.InputStream; import java.sql.Connection; import java.sql.SQLException; import java.util.Properties;/*** JDBC工具类 使用Durid连接池*/ public class JDBCUtils {private static DataSource ds;static {try {//1.加载配置文件Properties pro = new Properties();//使用ClassLoader加载配置文件,获取字节输入流InputStream is = JDBCUtils.class.getClassLoader().getResourceAsStream("druid.properties");pro.load(is);//2.初始化连接池对象ds = DruidDataSourceFactory.createDataSource(pro);} catch (IOException e) {e.printStackTrace();} catch (Exception e) {e.printStackTrace();}}/*** 获取连接池对象*/public static DataSource getDataSource() {return ds;}/*** 获取连接Connection对象*/public static Connection getConnection() throws SQLException {return ds.getConnection();} }

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

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

    package cn.itcast.dao;import cn.itcast.domain.User; import cn.itcast.util.JDBCUtils; import org.springframework.dao.DataAccessException; import org.springframework.jdbc.core.BeanPropertyRowMapper; import org.springframework.jdbc.core.JdbcTemplate;/*** 操作数据库中User表的类——增删改查方法全在此类中*/ public class UserDao {//声明JDBCTemplate对象共用private JdbcTemplate template = new JdbcTemplate(JDBCUtils.getDataSource());/*** 登录方法** @param loginUser 只有用户名和密码* @return user包含用户全部数据, 没有查询到,返回null*/public User login(User loginUser) {try {//1.编写sqlString sql = "select * from user where username = ? and password = ?";//2.调用query方法User user = template.queryForObject(sql,new BeanPropertyRowMapper<User>(User.class),loginUser.getUsername(), loginUser.getPassword());return user;} catch (DataAccessException e) {e.printStackTrace(); // 记录日志return null;}} }

    测试login()方法

    登录案例_代码实现2

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

    LoginServlet.java:

    package cn.itcast.web.servlet;import cn.itcast.dao.UserDao; import cn.itcast.domain.User; import org.apache.commons.beanutils.BeanUtils;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.lang.reflect.InvocationTargetException; import java.util.Map;@WebServlet("/loginServlet") public class LoginServlet extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//1.设置编码req.setCharacterEncoding("utf-8");/* //2.获取请求参数String username = req.getParameter("username");String password = req.getParameter("password");//3.封装user对象User loginUser = new User();loginUser.setUsername(username);loginUser.setPassword(password);*///2.获取所有请求参数Map<String, String[]> map = req.getParameterMap();//3.创建User对象User loginUser = new User();//3.2使用BeanUtils封装try {BeanUtils.populate(loginUser, map);} catch (IllegalAccessException e) {e.printStackTrace();} catch (InvocationTargetException e) {e.printStackTrace();}//4.调用UserDao的login方法UserDao dao = new UserDao();User user = dao.login(loginUser);//5.判断userif (user == null) {//登录失败req.getRequestDispatcher("/failServlet").forward(req, resp);} else {//登录成功//存储数据req.setAttribute("user", user);//转发req.getRequestDispatcher("/successServlet").forward(req, resp);}}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {this.doGet(req, resp);} }

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

    SuccessServlet.java:

    package cn.itcast.web.servlet;import cn.itcast.domain.User;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;@WebServlet("/successServlet") public class SuccessServlet extends HttpServlet {protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//获取request域中共享的user对象User user = (User) request.getAttribute("user");if(user != null){//给页面写一句话//设置编码response.setContentType("text/html;charset=utf-8");//输出response.getWriter().write("登录成功!"+user.getUsername()+",欢迎您!");}}protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {this.doPost(request,response);} }

    FailServlet.java:

    package cn.itcast.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;@WebServlet("/failServlet") public class FailServlet extends HttpServlet {protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//给页面写一句话//设置编码response.setContentType("text/html;charset=utf-8");//输出response.getWriter().write("登录失败,用户名或密码错误!");}protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {this.doPost(request,response);} }

    开发步骤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对象中

    总结

    以上是生活随笔为你收集整理的Request和Response-学习笔记02【请求转发和request共享数据、Request_获取ServletContext、request登录案例】的全部内容,希望文章能够帮你解决所遇到的问题。

    如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。