JavaWeb>09>Request

这篇博客详细介绍了JavaWeb中Request对象的原理、继承体系,包括如何获取请求行、请求头、请求体和请求参数等数据,以及处理中文乱码问题、请求转发、共享数据和ServletContext的使用。通过一个登录案例的分析和实现,展示了BeanUtils在实际开发中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

仅供本人记录学习,欢迎前辈指导
1.Request_原理

1. request对象和response对象的原理
	1. request和response对象是由服务器创建的。我们来使用它们
	2. request对象是来获取请求消息,response对象是来设置响应消息

2.Request_继承体系

ServletRequest		--	接口
		|	继承
	HttpServletRequest	-- 接口
		|	实现
	org.apache.catalina.connector.RequestFacade 类(tomcat)

在这里插入图片描述
3.Request_获取请求行数据_方法介绍

3. request功能:
	1. 获取请求消息数据
		1. 获取请求行数据
			* GET /day14/demo1?name=zhangsan HTTP/1.1
			* 方法:
				1. 获取请求方式 :GET
					* String getMethod()  
				2. (*)获取虚拟目录:/day14
					* String getContextPath()
				3. 获取Servlet路径: /demo1
					* String getServletPath()
				4. 获取get方式请求参数:name=zhangsan
					* String getQueryString()
				5. (*)获取请求URI:/day14/demo1
					* String getRequestURI():		/day14/demo1
					* StringBuffer getRequestURL()  :http://localhost/day14/demo1

					* URL:统一资源定位符 : http://localhost/day14/demo1	中华人民共和国
					* URI:统一资源标识符 : /day14/demo1					共和国
				
				6. 获取协议及版本:HTTP/1.1
					* String getProtocol()

				7. 获取客户机的IP地址:
					* String getRemoteAddr()

4.Request_获取请求行数据_代码演示

package cn.joker.web.request;

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;

/**
 * 演示Request对象获取请求行数据
 *
 */
@WebServlet("/requestDemo1")
public class RequestDemo1 extends HttpServlet {
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

	}

	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		/*
				1. 获取请求方式 :GET
					* String getMethod()
				2. (*)获取虚拟目录:/day14
					* String getContextPath()
				3. 获取Servlet路径: /demo1
					* String getServletPath()
				4. 获取get方式请求参数:name=zhangsan
					* String getQueryString()
				5. (*)获取请求URI:/day14/demo1
					* String getRequestURI():		/day14/demo1
					* StringBuffer getRequestURL()  :http://localhost/day14/demo1

					* URL:统一资源定位符 : http://localhost/day14/demo1	中华人民共和国
					* URI:统一资源标识符 : /day14/demo1					共和国

				6. 获取协议及版本:HTTP/1.1
					* String getProtocol()

				7. 获取客户机的IP地址:
					* String getRemoteAddr()
		 */

		//1.获取请求方式:GET
		String method = request.getMethod();
		System.out.println(method);
		//2.(*)获取虚拟目录:/day14
		String contextPath = request.getContextPath();
		System.out.println(contextPath);
		//3.获取Servlet路径:/demo1
		String servletPath = request.getServletPath();
		System.out.println(servletPath);
		//4.获取get方式请求参数:name = zhangsan
		String queryString = request.getQueryString();
		System.out.println(queryString);
		//5.(*)获取请求URI:/day14/demo1
		String requestURI = request.getRequestURI();
		StringBuffer requestURL = request.getRequestURL();
		System.out.println(requestURI);
		System.out.println(requestURL);
		//6.获取协议及版本:HTTP/1.1
		String protocol = request.getProtocol();
		System.out.println(protocol);
		//7.获取客户机的IP地址
		String remoteAddr = request.getRemoteAddr();
		System.out.println(remoteAddr);
	}
}

5.Request_获取请求头数据

	2. 获取请求头数据
			* 方法:
				* (*)String getHeader(String name):通过请求头的名称获取请求头的值
				* Enumeration<String> getHeaderNames():获取所有的请求头名称
package cn.joker.web.request;

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("/requestDemo4")
public class RequestDemo4 extends HttpServlet {
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

	}

	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		//演示获取请求头数据:referer
		String referer = request.getHeader("referer");
		System.out.println(referer);

		//防盗链
		if(referer != null){
			if(referer.contains("/day14"))
			{
				//正常访问
				//System.out.println("播放电影。。。");
				response.setContentType("text/html;charset=utf-8");
				response.getWriter().write("播放电影");
			}else{
				//盗链
				System.out.println("看电影来这!。。。");
				response.setContentType("text/html;charset=utf-8");
				response.getWriter().write("看电影来这!。。。");
			}
		}
	}
	}
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>login</title>
</head>
<body>
    <form action="/demo3" method="post">
        <input name="username">
        <input type="submit" value="提交">
    </form>
<hr/>
    <a href="/day14/requestDemo4">dem4....</a>
</body>
</html>
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<a href="http://localhost:8080/day14/requestDemo4">高清电影</a>
</body>
</html>

6.Request_获取请求体数据

3. 获取请求体数据:
			* 请求体:只有POST请求方式,才有请求体,在请求体中封装了POST请求的请求参数
			* 步骤:
				1. 获取流对象
					*  BufferedReader getReader():获取字符输入流,只能操作字符数据
					*  ServletInputStream getInputStream():获取字节输入流,可以操作所有类型数据
						* 在文件上传知识点后讲解

				2. 再从流对象中拿数据
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>注册页面</title>
</head>
<body>
    <form action="/day14/requestDemo5" method="post">
        <input type="text" placeholder="请输入用户名" name="username"><br>
        <input type="text" placeholder="请输入密码" name="password"><br>
        <input type="submit" value="注册">
    </form>
</body>
</html>
package cn.joker.web.request;

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.BufferedReader;
import java.io.IOException;

@WebServlet("/requestDemo5")
public class RequestDemo5 extends HttpServlet {
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		//获取请求消息体---请求参数

		//1.获取字符流
		BufferedReader br = request.getReader();
		//2.读取数据
		String line = null;
		while ((line = br.readLine()) !=null) {
			System.out.println(line);
		}
	}

	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

	}
}

7.Request_获取请求参数通用方式介绍

	2. 其他功能:
		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集合

8.Request_获取请求参数通用方式演示

package cn.joker.web.request;

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.BufferedReader;
import java.io.IOException;
import java.util.Enumeration;
import java.util.Map;
import java.util.Set;

@WebServlet("/requestDemo6")
public class RequestDemo6 extends HttpServlet {
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		//post获取请求参数

		//根据参数名称获取参数值
		String username = request.getParameter("username");
		/*System.out.println("post");
		System.out.println(username);*/
		//根据参数名称获取参数值的数组
		String[] hobbies = request.getParameterValues("hobby");
		/*for (String hobby : hobbies) {
			System.out.println(hobby);
		}*/

		//获取所有请求的参数名称
		/*Enumeration<String> parameterNames = request.getParameterNames();
		while(parameterNames.hasMoreElements()){
			String name = parameterNames.nextElement();
			System.out.println(name);
			String value = request.getParameter(name);
			System.out.println(value);
			System.out.println("---------------");
		}*/

		//获取所有参数的map集合
		Map<String, String[]> parameterMap = request.getParameterMap();
		//遍历
		Set<String> keySet = parameterMap.keySet();
		for (String name : keySet) {
			//获取键获取值
			String[] valaues = parameterMap.get(name);
			System.out.println(name);
			for (String value : valaues) {
				System.out.println(value);
			}
			System.out.println("---------------");
		}

	}

	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		//get获取请求参数

		/*//根据参数名称获取参数值
		String username = request.getParameter("username");
		System.out.println("get");
		System.out.println(username);*/

		this.doPost(request,response);
	}
}
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>注册页面</title>
</head>
<body>
    <form action="/day14/requestDemo6" method="get">
        <input type="text" placeholder="请输入用户名" name="username"><br>
        <input type="text" placeholder="请输入密码" name="password"><br>

        <input type="checkbox" name="hobby" value="game">游戏
        <input type="checkbox" name="hobby" value="study">学习
        <hr>

        <input type="submit" value="注册">
    </form>
</body>
</html>

9.Request_获取请求参数中文乱码问题处理

		* 中文乱码问题:
				* get方式:tomcat 8 已经将get方式乱码问题解决了
				* post方式:会乱码
					* 解决:在获取参数前,设置request的编码request.setCharacterEncoding("utf-8");
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>注册页面</title>
</head>
<body>
    <form action="/day14/requestDemo7" method="post">
        <input type="text" placeholder="请输入用户名" name="username"><br>
        <input type="text" placeholder="请输入密码" name="password"><br>

        <input type="checkbox" name="hobby" value="game">游戏
        <input type="checkbox" name="hobby" value="study">学习
        <hr>
        <input type="submit" value="注册">
    </form>
</body>
</html>
package cn.joker.web.request;

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.util.Map;
import java.util.Set;

@WebServlet("/requestDemo7")
public class RequestDemo7 extends HttpServlet {
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		//1.设置流的编码
		request.setCharacterEncoding("utf-8");

		//获取请求参数username
		String username = request.getParameter("username");
		System.out.println(username);

	}

	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		this.doPost(request,response);
	}
}

10.Request_请求转发

		2. 请求转发:一种在服务器内部的资源跳转方式
			1. 步骤:
				1. 通过request对象获取请求转发器对象:RequestDispatcher getRequestDispatcher(String path)
				2. 使用RequestDispatcher对象来进行转发:forward(ServletRequest request, ServletResponse response) 

			2. 特点:
				1. 浏览器地址栏路径不发生变化
				2. 只能转发到当前服务器内部资源中。
				3. 转发是一次请求
package cn.joker.web.request;

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("/requestDemo8")
public class RequestDemo8 extends HttpServlet {
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		System.out.println("demo8888被访问了。。。");
		//转发到demo9资源
		/*RequestDispatcher requestDispatcher = request.getRequestDispatcher("/requestDemo9");
		requestDispatcher.forward(request,response);*/
		request.getRequestDispatcher("/http://www.baidu.com").forward(request,response);
	}

	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		this.doPost(request,response);
	}
}
package cn.joker.web.request;

import javax.servlet.RequestDispatcher;
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("/requestDemo9")
public class RequestDemo9 extends HttpServlet {
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		System.out.println("demo999被访问了");

	}

	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		this.doPost(request,response);
	}
}

11.Request_共享数据(域对象)

		3. 共享数据:
			* 域对象:一个有作用范围的对象,可以在范围内共享数据
			* request域:代表一次请求的范围,一般用于请求转发的多个资源中共享数据
			* 方法:
				1. void setAttribute(String name,Object obj):存储数据
				2. Object getAttitude(String name):通过键获取值
				3. void removeAttribute(String name):通过键移除键值对

在这里插入图片描述

package cn.joker.web.request;

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("/requestDemo8")
public class RequestDemo8 extends HttpServlet {
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		System.out.println("demo8888被访问了。。。");
		//转发到demo9资源
		/*RequestDispatcher requestDispatcher = request.getRequestDispatcher("/requestDemo9");
		requestDispatcher.forward(request,response);*/
		//存储数据到request域中
		request.setAttribute("msg","hello");
		request.getRequestDispatcher("/requestDemo9").forward(request,response);
	}
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		this.doPost(request,response);
	}
}

package cn.joker.web.request;

import javax.servlet.RequestDispatcher;
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("/requestDemo9")
public class RequestDemo9 extends HttpServlet {
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		//获取数据
		Object msg = request.getAttribute("msg");
		System.out.println(msg);
		System.out.println("demo999被访问了");

	}

	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		this.doPost(request,response);
	}
}

12.Request_获取ServletContext

package cn.joker.web.request;

import javax.servlet.ServletContext;
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("/requestDemo10")
public class RequestDemo10 extends HttpServlet {
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		ServletContext servletContext = request.getServletContext();
		System.out.println(servletContext);
	}

	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		this.doPost(request,response);
	}
}

13.登录案例_需求

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

14.登录案例_分析

在这里插入图片描述
15.登录案例_代码实现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
	5. 创建包cn.itcast.dao,创建类UserDao,提供login方法
package cn.joker.domain;

/**
 * 用户的实体类
 */
public class User {
	private int id;
	private String username;
	private String password;

	public int getId() {
		return id;
	}

	public void setId(int id) {
		this.id = id;
	}

	public String getUsername() {
		return username;
	}

	public void setUsername(String username) {
		this.username = username;
	}

	public String getPassword() {
		return password;
	}

	public void setPassword(String password) {
		this.password = password;
	}

	@Override
	public String toString() {
		return "User{" +
				"id=" + id +
				", username='" + username + '\'' +
				", password='" + password + '\'' +
				'}';
	}
}
package cn.joker.util;

import com.alibaba.druid.pool.DruidDataSourceFactory;

import javax.sql.DataSource;
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 (Exception e) {
			e.printStackTrace();
		}

	}
	/**
	 * 获取Connection对象
	 */
	public static  DataSource getDataSource(){
		return ds;
	}
	public static Connection getConnection() throws SQLException {
		return ds.getConnection();
	}
}
package cn.joker.dao;

import cn.joker.domain.User;
import cn.joker.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
	 * @Author: Joker
	 * @Date: 2019/8/18 8:18
	 */
	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 (Exception e) {
			e.printStackTrace();//记录日志
			return null;
		}
	}
}
package cn.joker.test;

import cn.joker.dao.UserDao;
import cn.joker.domain.User;
import org.junit.Test;

public class UserDaoTest {
	@Test
	public void testLogin(){
		User loginuser = new User();
		loginuser.setUsername("yeqieu");
		loginuser.setPassword("123");

		UserDao dao = new UserDao();
		User user = dao.login(loginuser);

		System.out.println(user);
	}
}

16.登录案例_代码实现2

	6. 编写cn.itcast.web.servlet.LoginServlet类
	7. 编写FailServlet和SuccessServlet类
	8. login.html中form表单的action路径的写法
		* 虚拟目录+Servlet的资源路径
package cn.joker.test;

import cn.joker.dao.UserDao;
import cn.joker.domain.User;
import org.junit.Test;

public class UserDaoTest {
	@Test
	public void testLogin(){
		User loginuser = new User();
		loginuser.setUsername("yeqieu");
		loginuser.setPassword("123");

		UserDao dao = new UserDao();
		User user = dao.login(loginuser);

		System.out.println(user);
	}
}

package cn.joker.web.servlet;

import cn.joker.dao.UserDao;
import cn.joker.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("/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);

		//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);

	}
}
package cn.joker.web.servlet;

import cn.joker.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");
		//给页面写一句话

		//设置编码
		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);
	}
}

package cn.joker.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);
	}
}

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <form action="/day14_test/loginServlet" method="post">
        用户名:<input type="text" name="username"> <br>
        密码:<input type="password" name="password"><br>

        <input type="submit" value="登录">

    </form>
</body>
</html>

17.登录案例_BeanUtils基本使用

9. 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对象中
package cn.joker.web.servlet;

import cn.joker.dao.UserDao;
import cn.joker.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);*/
		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);

	}
}

18.登录案例_BeanUtils介绍

		3. 方法:
			1. setProperty()
			2. getProperty()
			3. populate(Object obj , Map map):将map集合的键值对信息,封装到对应的JavaBean对象中
package cn.joker.domain;

/**
 * 用户的实体类
 */
public class User {
	private int id;
	private String username;
	private String password;
	private String gender;

	public void setHehe(String gender){
		this.gender = gender;
	}
	public String getHehe(){
		return gender;
	}

	public int getId() {
		return id;
	}

	public void setId(int id) {
		this.id = id;
	}

	public String getUsername() {
		return username;
	}

	public void setUsername(String username) {
		this.username = username;
	}

	public String getPassword() {
		return password;
	}

	public void setPassword(String password) {
		this.password = password;
	}

	@Override
	public String toString() {
		return "User{" +
				"id=" + id +
				", username='" + username + '\'' +
				", password='" + password + '\'' +
				", gender='" + gender + '\'' +
				'}';
	}
}
package cn.joker.test;

import cn.joker.domain.User;
import org.apache.commons.beanutils.BeanUtils;
import org.junit.Test;
public class BeanTest {
	@Test
	public void test(){
		User user = new User();
		try {
			BeanUtils.setProperty(user,"hehe","male");
			System.out.println(user);
			String gender = BeanUtils.getProperty(user,"hehe");
			System.out.println(gender);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值