目录
开发步骤3:创建包cn.itcast.domain,创建类User
开发步骤4:创建包cn.itcast.util,编写工具类JDBCUtils
开发步骤5:创建包cn.itcast.dao,创建类UserDao,提供login方法
开发步骤6: 编写cn.itcast.web.servlet.LoginServlet类
开发步骤7:编写FailServlet和SuccessServlet类
开发步骤8:login.html中form表单的action路径的写法
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.编写sql
-
String 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 {
-
@Override
-
protected 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.判断user
-
if (user ==
null) {
-
//登录失败
-
req.getRequestDispatcher(
"/failServlet").forward(req, resp);
-
}
else {
-
//登录成功
-
//存储数据
-
req.setAttribute(
"user", user);
-
//转发
-
req.getRequestDispatcher(
"/successServlet").forward(req, resp);
-
}
-
}
-
-
@Override
-
protected 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对象中
转载:https://blog.csdn.net/weixin_44949135/article/details/113795552































