请求头:客户端浏览器告诉服务器一些信息
请求头名称: 请求头值
* 常见的请求头:
1. User-Agent:浏览器告诉服务器,我访问你使用的浏览器版本信息
* 可以在服务器端获取该头的信息,解决浏览器的兼容性问题
2. Referer:http://localhost/login.html
* 告诉服务器,我(当前请求)从哪里来?
* 作用:
1. 防盗链:
2. 统计工作:
POST /login.html HTTP/1.1
Host: localhost
User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:60.0) Gecko/20100101 Firefox/60.0
Accept: text/html,application/xhtml+xml,application/xml; q=0.9,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5, en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Referer: http://localhost/login.html
Connection: keep-alive
Upgrade-Insecure-Requests: 1
username=zhangsan
request对象继承体系结构:
ServletRequest -- 接口
| 继承
HttpServletRequest -- 接口
| 实现
org.apache.catalina.connector.RequestFacade 类(tomcat)
package cn.servletDemo.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;
@WebServlet("/RequestDemo02")
public class ServletRequest extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String methopd = req.getMethod();
String contextPath = req.getContextPath();
String servletPath = req.getServletPath();
String requestURI = req.getRequestURI();
StringBuffer RequsetURL = req.getRequestURL();
String requestProtocol = req.getProtocol();
String IP = req.getRemoteAddr();
Enumeration<String> headerNames = req.getHeaderNames();
System.out.printf("%s\n%s\n%s\n%s\n%s\n%s\n%s\n", methopd,contextPath,servletPath,requestURI, RequsetURL,requestProtocol,IP);
while(headerNames.hasMoreElements()){
String name = headerNames.nextElement();
String value = req.getHeader(name);
System.out.printf("%s\t:%s\n",name,value);
}
}
/***结果
GET
/req
/RequestDemo02
/req/RequestDemo02
http://localhost:8080/req/RequestDemo02
HTTP/1.1
0:0:0:0:0:0:0:1
host :localhost:8080
connection :keep-alive
upgrade-insecure-requests :1
user-agent :Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.88 Safari/537.36
sec-fetch-user :?1
accept :text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,; q=0.8,application/signed-exchange;v=b3;q=0.9
sec-fetch-site :none
sec-fetch-mode :navigate
accept-encoding :gzip, deflate, br
accept-language :zh-CN,zh;q=0.9
cookie :JSESSIONID=4973752F177A01DFD0BC110AB93AEA40; Idea-fe3516c6=e1f7407c-f751-4f0d-99cf-6bbfd9ff1826; goSessionid=wqXEMF4WFNSPwE3L9lcUSMXcLjCnLUgizfec2DipoDI%3D; SL_G_WPT_TO=zh-CN; SL_GWPT_Show_Hide_tmp=undefined; SL_wptGlobTipTmp=undefined; JSESSIONID=7DB8D0F83015408AC113950CB3E0A18B
***/
@Override
protected void doPost(HttpServletRequest req,HttpServletResponse resp) throws ServletException,IOException {
//获取请求消息体
//获取字符流
BufferedReader br = req.getReader();
//读数据
String line = null;
while((line = br.readLine()) != null){
System.out.println(line);
}
//结果username=315019748%40qq.com&password=%E9%98%BF%E6%96%AF%E8%BE%BE
}
}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>注册页面</title>
</head>
<body>
<form action="/req/RequestDemo02" method="post">
<input type="text" placeholder="请输入用户名" name="username"><br>
<input type="text" placeholder="请输入密码" name="password"><br>
<input type="submit" value="注册">
</form>
</body>
</html>
@WebServlet("/RequestDemo03")
public class ServletRequest01 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//get获取请求参数
//根据请求参数名称获取请求参数值
String username = req.getParameter("username");
System.out.println("get:"+username);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//post请求参数
req.setCharacterEncoding("utf-8");
//根据请求参数名称获取请求参数值
String username = req.getParameter("username");
System.out.println("post:"+username);
}
}
用户登录案例需求:
1.编写login.html登录页面
username & password 两个输入框
2.使用Druid数据库连接池技术,操作mysql,day14数据库中user表
3.使用JdbcTemplate技术封装JDBC
4.登录成功跳转到SuccessServlet展示:登录成功!用户名,欢迎您
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>登录</title>
</head>
<body>
<form action="/test/LoginServlet" method="post">
用户名:<input type="text" name="username"><br>
密码:<input type="text" name="password"><br>
<input type="submit" value="登录">
</form>
</body>
</html>
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
);
package cn.test.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;
}
}
package cn.test.util;
import com.alibaba.druid.pool.DruidDataSourceFactory;
import javax.sql.DataSource;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.Properties;
/*
JDBC工具类,使用的是Druid连接池
*/
public class JDBCUtils {
private static DataSource dataSource;
/*
静态代码块加载配置文件,初始化连接池
*/
static {
try {
//1.加载配置文件
Properties pro = new Properties();
//使用ClassLoader加载配置文件,获取字节输入流
InputStream inputStream = JDBCUtils.class.getClassLoader().getResourceAsStream("druid.properties");
pro.load(inputStream);
//2.初始化连接池对象
dataSource = DruidDataSourceFactory.createDataSource(pro);
} catch (Exception e) {
e.printStackTrace();
}
}
/*
获取连接池对象
*/
public static DataSource getDataSource(){
return dataSource;
}
/*
获取Connection对象
*/
public static Connection getConnection() throws SQLException {
return dataSource.getConnection();
}
}
package cn.test.dao;
import cn.testT.domain.User;
import cn.testT.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());
//登录逻辑的完成
public User login(User loginUser){
try {
//1.编写sql
String sql = "select * from user where username = ? and password = ?";
//2.调用querry方法
User user = template.queryForObject(sql,new BeanPropertyRowMapper<User>(User.class),
loginUser.getUsername(),loginUser.getPassword());
return user;
} catch (DataAccessException e) {
e.printStackTrace(); //一般在此处处理日志
return null;
}
}
}
package cn.testT.web.servlet;
import cn.testT.dao.UserDao;
import cn.testT.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 {
//设置编码
req.setCharacterEncoding("utf-8");
//获取请求参数
String username = req.getParameter("username");
String password = req.getParameter("password");
//封装user对象
User loginUser = new User();
loginUser.setUsername(username);
loginUser.setPassword(password);
//调用UserDao的login方法
UserDao dao = new UserDao();
User user = dao.login(loginUser);
//判断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.testT.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 {
}
}
------------------------------------------------------------------------------------------------------------------
package cn.testT.web.servlet;
import cn.testT.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("登录成功");
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
}
}
package cn.testT.web.servlet;
import cn.testT.dao.UserDao;
import cn.testT.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 {
//设置编码
req.setCharacterEncoding("utf-8");
// //获取请求参数
// String username = req.getParameter("username");
// String password = req.getParameter("password");
// //封装user对象
// User loginUser = new User();
// loginUser.setUsername(username);
// loginUser.setPassword(password);
//获取所有请求参数
Map<String, String[]> parameterMap = req.getParameterMap();
//创建user对象
User loginUser = new User;
//使用BeanUtils封装
try {
BeanUtils.populate(loginUser,parameterMap);
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
//调用UserDao的login方法
UserDao dao = new UserDao();
User user = dao.login(loginUser);
//判断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);
}
}
原文:https://www.cnblogs.com/huxiaobai/p/12274180.html