javaweb项目用户模块
新建maven项目
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>4.0.1</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>javax.servlet.jsp-api</artifactId>
<version>2.3.3</version>
</dependency>
<dependency>
<groupId>jstl</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
登录和注册jsp页面
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<h2>这是登录页面</h2>
<form action="${pageContext.request.contextPath}/login" method="post">
用户名:<input type="text" name="username" value="admin"><br />
密码:<input type="password" name="password" value="123456"><br />
<input type="submit" value="登录">
</form>
</body>
</html>
<%@ page contentType="text/html;charset=UTF-8" isELIgnored="false" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<div><a href="${pageContext.request.contextPath}/list">列表界面</a></div>
<form action="${pageContext.request.contextPath}/register" method="post">
用户名:<input type="text" name="username" value="admin"><br />
密码:<input type="password" name="password" value="123456"><br />
<input type="submit" value="注册">
</form>
</body>
</html>
web.xml配置
<web-app>
<display-name>Archetype Created Web Application</display-name>
//跳转欢迎页设置
<welcome-file-list>
<welcome-file>login.jsp</welcome-file>
</welcome-file-list>
</web-app>
model
public class User {
private String username;
private String password;
public User(String username, String password) {
this.username = username;
this.password = password;
}
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;
}
}
servlet
@WebServlet("/login")
public class LoginServlet extends HttpServlet {
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 1:获取用户名和密码
String username = request.getParameter("username");
String password = request.getParameter("password");
User user = new User(username,password);
// 2: 数据校验
// 3: 验证是否合法
if("admin".equalsIgnoreCase(user.getUsername()) && "123456".equals(user.getPassword())){
// 4: 保存用户状态
HttpSession session = request.getSession();
session.setAttribute("currentUser",user);
// 5: 跳转到首页
response.sendRedirect(request.getContextPath()+"/user/index.jsp");
return;
}
// 5: 跳转到首页
response.sendRedirect(request.getContextPath()+"/login.jsp");
}
}
@WebServlet(value = "/register",loadOnStartup = 1)
public class RegisterServlet extends HttpServlet {
public RegisterServlet(){
System.out.println("dddddddddddddddddddddddddddddddd");
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// 1.请求转发实现跳转到登录页面,并回显用户名
// String username = req.getParameter("username");
// String password = req.getParameter("password");
// User user = new User(username,password);
// req.setAttribute("user",user);
// req.getRequestDispatcher("/login.jsp").forward(req,resp);
// ServletContext application = req.getSession().getServletContext();
// application.setAttribute("online","1");
// Object online = application.getAttribute("online");
// 2: 重定向实现跳转到登录页面,并回显用户名,url
// String username = req.getParameter("username");
// String password = req.getParameter("password");
// resp.sendRedirect("login.jsp?username="+username);// 开始给浏览器相应,响应login.jsp 和状态码 302
// 3: 重定向实现跳转到登录页面,并回显用户名,cookie
String username = req.getParameter("username");
String password = req.getParameter("password");
//username = URLEncoder.encode(username,"utf-8");
Cookie cookie =new Cookie("username",username);
cookie.setMaxAge(60*60*24*365);
resp.addCookie(cookie);
resp.sendRedirect("login.jsp");
}
}
@WebServlet("/logout")
public class LogoutServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// 销毁session
req.getSession().invalidate();//销毁session
//req.getSession().removeAttribute("currentUser");
// 销毁cookie
Cookie[] cookies = req.getCookies();
if(cookies!=null && cookies.length>0){
for(int i=0;i<cookies.length;i++){
if(cookies[i].getName().equals("currentUser")){
cookies[i].setMaxAge(0);// 销毁cookie
resp.addCookie(cookies[i]);
}
}
}
// 跳转到登录页
resp.sendRedirect(req.getContextPath()+"/login.jsp");
}
}
filter
public class AdapterFilter implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
}
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
}
@Override
public void destroy() {
}
}
@WebFilter(value = "/*")
public class CharacterFilter extends AdapterFilter {
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest) servletRequest;
HttpServletResponse response = (HttpServletResponse) servletResponse;
request.setCharacterEncoding("utf-8");
response.setCharacterEncoding("utf-8");
System.out.println("before");
filterChain.doFilter(request,response);
System.out.println("after");
}
}
@WebFilter(value = "/user/*")
public class ZuthenticationFilter implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
}
@Override
public void destroy() {
}
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
// 父类对象转换为子类对象
HttpServletRequest request= (HttpServletRequest) servletRequest;
HttpServletResponse response = (HttpServletResponse) servletResponse;
System.out.println("aaaaaaaaaaaaaaaaaaaaaaaa");
// 获取用户登录状态
User user = (User) request.getSession().getAttribute("currentUser");
if(user==null){
response.sendRedirect(request.getContextPath()+"/login.jsp");
return;
}
filterChain.doFilter(request,response);
}
}
Filter的使用步骤
- 自定义一个类去实现一个接口Filter接口
- 重写方法,重写init、destroy、doFilter方法
- 配置Filter
cookie和sessoin的区别
相同点:
- 都能做状态管理
不同点:
- cookie在浏览器中存储数据,session在服务器保存数据
- cookie不安全,session安全
- session耗费服务器资源,cookie不占用服务器资源
- session能保存Object,cookie只能保存String
- session依赖于cookie使用,或者依赖于url重写