• Java后端 学习路线 笔记汇总表【黑马程序员】
  1. Request和Response-学习笔记01【Request_原理和继承体系、Request_获取请求数据】【day01】
  2. Request和Response-学习笔记02【请求转发和request共享数据、Request_获取ServletContext、request登录案例】[day01]
  3. Request和Response-学习笔记03【HTTP响应协议、response之重定向、response之相对路径和绝对路径】【day02】
  4. Request和Response-学习笔记04【response之输出数据、response之验证码】【day02】
  5. 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登录案例】相关推荐

  1. Servlet和HTTP请求协议-学习笔记02【Servlet_体系结构与urlpartten配置、HTTP请求协议】

    Java后端 学习路线 笔记汇总表[黑马程序员] Servlet和HTTP请求协议-学习笔记01[Servlet_快速入门-生命周期方法.Servlet_3.0注解配置.IDEA与tomcat相关配置 ...

  2. JavaWeb黑马旅游网-学习笔记02【注册功能】

    Java后端 学习路线 笔记汇总表[黑马程序员] JavaWeb黑马旅游网-学习笔记01[准备工作] JavaWeb黑马旅游网-学习笔记02[注册功能] JavaWeb黑马旅游网-学习笔记03[登陆和 ...

  3. JavaWeb-综合案例(用户信息)-学习笔记02【登录功能】

    Java后端 学习路线 笔记汇总表[黑马程序员] JavaWeb-综合案例(用户信息)-学习笔记01[列表查询] JavaWeb-综合案例(用户信息)-学习笔记02[登录功能] JavaWeb-综合案 ...

  4. VBA 学习笔记 - 网络请求

    VBA 学习笔记 - 网络请求 Microsoft.XMLHTTP MSXML2.serverXMLHTTP.6.0 WinHttp.WinHttpRequest.5.1 参考资料 Microsoft ...

  5. JSP的学习二(请求转发与 重定向)

    一: 1.介绍知识点 1). 本质区别: 请求的转发只发出了一次请求, 而重定向则发出了两次请求. 具体: ①. 请求的转发: 地址栏是初次发出请求的地址.  请求的重定向: 地址栏不再是初次发出的请 ...

  6. HTML/CSS学习笔记02【表单标签】

    w3cschool菜鸟教程.CHM(腾讯微云):https://share.weiyun.com/c1FaX6ZD HTML/CSS学习笔记01[概念介绍.基本标签.表单标签][day01] HTML ...

  7. django学习笔记02

    原创博客地址:django学习笔记02 第一章:模型层 1.8 查询操作 一.创建对象 1 2 3 4 5 >>> from blog.models import Blog > ...

  8. MySQL技术内幕-InnoDB存储引擎第2版-学习笔记-02

    MySQL技术内幕-InnoDB存储引擎第2版-学习笔记-02 6. 锁 ​ 人们认为行级锁总会增加开销.实际上,只有当实现本身会增加开销时,行级锁才会增加开销.InnoDB 存储引擎不需要锁升级,因 ...

  9. Tomcat学习笔记02【Tomcat部署项目】

    Java后端 学习路线 笔记汇总表[黑马程序员] Tomcat学习笔记01[Web相关概念.Tomcat基本操作][day01] Tomcat学习笔记02[Tomcat部署项目][day01] 目录 ...

最新文章

  1. 500个普通人名_2020年世界500强汽车行业排名:大众公司第一,丰田汽车公司第二...
  2. dotNet core Windows上 部署
  3. mysql5.6下主主复制的配置实现
  4. Lucene之删除索引(备忘)
  5. 前端每周清单半年盘点之 WebAssembly 篇
  6. memcached原理详述及配置
  7. Java基础08 继承
  8. cap流程图_3D流程图
  9. exif linux php扩展_LNMP环境为PHP添加exif扩展
  10. python unittest 框架添加测试用例及运行
  11. Linux下动态库(.so)和静态库(.a) 的区别
  12. linux 硬盘报警声
  13. 简述tcp协议的可靠性有哪些机制_腾讯面试HTTP与TCP/IP20连问,你能答出多少?
  14. python+flask搭建CNN在线识别手写中文网站
  15. 深度学习代码实战——基于RNN的时间序列拟合(回归)
  16. tensorflow之ExponentialMovingAverage
  17. 易语言皮肤模块200个_S7200 SMART 模拟量模块种类amp;选型须知
  18. 3-unit2 高级网络配置
  19. 华为NP课程笔记13-PIM
  20. 提升 Docker Desktop For macOS 磁盘使用率

热门文章

  1. android 8.0手机开服务端,Android 8.0 + Service开启方式兼容处理
  2. java jpopupmenu事件_Java+Swing+常用事件和监听器接口
  3. Java的内存分配策略有哪些_Java的内存分配策略
  4. 英语在线听力翻译器_仁爱版初一英语免费听力训练电子教程
  5. 【机器学习算法专题(蓄力计划)】十五、机器学习中玄乎的最大熵原理及模型
  6. 十四、JavaScript表单中的验证API
  7. 二、华为云ModelArts零代码实现美食分类识别
  8. AIS 2022 | ACL-IJCAI-SIGIR顶级会议论文预讲会,现开启论文征集
  9. 变分贝叶斯深度学习综述
  10. AAAI 2021 | 基于对比学习的聚类工作