对Java Servlet用户管理案例进行的优化

7 篇文章 0 订阅
2 篇文章 0 订阅

之前的用户管理案例的版本
servlet案例–用户管理

相比于之前的版本,这次的优化主要体现在请求路径,验证登录,controller层方面。
1、请求路径:之前发送请求基本上都是以相对路径的方式传递的请求,这次以绝对路径的方式来发送,可以更方便的从代码中看到请求的变化
2、验证登录:之前的验证登录只能在点击进入用户管理界面前进行验证,当遇到特殊情况,比如登陆状态已过时的时候,我们在点击用户的增删改查功能时,是不能进行操作的,需跳转到登陆界面,重新登陆。这次优化我们通过过滤器的方式来实现这一业务。
3、controller层:之前的版本是一个功能对应一个controller类,这次我们把所有功能都放在一个类里,这样更符合controller层–service层–dao层的规范

  • 项目结构:
    在这里插入图片描述

  • index.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
  <head>
    <title>$Title$</title>
  </head>
  <body>
  <h1><a href="${path}/user/getUsers">用户管理</a></h1>
  </body>
</html>

  • login.jsp
<%@ page import="java.net.URLDecoder" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
    <%
        Cookie[] cookies=request.getCookies();
        for(Cookie cookie:cookies){
            if("name".equals(cookie.getName())){
                request.setAttribute("name", URLDecoder.decode(cookie.getValue(),"utf-8"));
            }
        }
    %>
</head>
<body>
${message}
<form action="${path}/login" method="get">
    用户名:<input type="text" name="name" value="${name}"><br>&nbsp;&nbsp;&nbsp;&nbsp;码:<input type="password" name="password"><br>
    记住用户名<input type="checkbox" name="memory" value="1"><br>
    <input type="submit" value="提交">
</form>
</body>
</html>

  • addUser.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<form action="${path}/user/addUser" method="get">
    姓名:<input type="text" name="name"><br>
    密码:<input type="text" name="password"><br>
    <input type="submit" value="提交">
</form>
</body>
</html>

  • updateUser.jsp
<%@ page import="bean.User" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<form action="${path}/user/updateUser" method="get">
    要修改用户的id:<input type="text" name="id" readonly value="${user.id}"><br>
    新姓名  :<input type="text" name="name" value="${user.name}"><br>
    新密码  :<input type="text" name="password" value="${user.password}"><br>
    <input type="submit" value="提交">
</form>
</body>
</html>

  • users.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head>
    <title>$Title$</title>
</head>
<body>
<h2><a href="${path}/views/addUser.jsp">新建用户</a></h2>
<br>
<table border="1">
    <tr>
        <td>id</td>
        <td>name</td>
        <td>password</td>
        <td>操作</td>
    </tr>
    <c:forEach items="${users}" var="user">
        <tr>
            <td>${user.id}</td>
            <td>${user.name}</td>
            <td>${user.password}</td>
            <td><a href="${path}/user/getUser?id=${user.id}">修改</a>|<a href="${path}/user/deleteUser?id=${user.id}">删除</a></td>
        </tr>
    </c:forEach>
</table>
</body>
</html>
  • web.xml
    <servlet>
        <servlet-name>login</servlet-name>
        <servlet-class>controller.LoginController</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>login</servlet-name>
        <url-pattern>/login</url-pattern>
    </servlet-mapping>

    <filter>
        <filter-name>EncodingFilter</filter-name>
        <filter-class>filter.LoginFilter</filter-class>
        <!--设置初始化参数-->
        <init-param>
            <param-name>encoding</param-name>
            <param-value>utf-8</param-value>
        </init-param>
    </filter>
    <!--拦截所有请求-->
    <filter-mapping>
        <filter-name>EncodingFilter</filter-name>
        <url-pattern>/user/*</url-pattern>
    </filter-mapping>
  • bean层
package bean;

public class User {
    private int id;
    private String name;
    private String password;
    public User(){

    }
    public User(int id,String name,String password){
        this.id=id;
        this.name=name;
        this.password=password;
    }

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

    public int getId() {
        return id;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }

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

    public String getPassword() {
        return password;
    }

    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", password='" + password + '\'' +
                '}';
    }
}

  • controller层
    UserController:
package controller;

import bean.User;
import service.UserService;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.*;
import java.io.IOException;
import java.net.URLEncoder;
import java.util.List;

@WebServlet(value = {"/user/*"})
public class UserController extends HttpServlet {

    private UserService userService=new UserService();
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        String url=request.getRequestURI();
        String index=url.substring(url.lastIndexOf("/")+1,url.length());
        String path=request.getContextPath();
        if("addUser".equals(index)){
            String name=request.getParameter("name");
            String password=request.getParameter("password");
            User user=new User();
            user.setName(name);
            user.setPassword(password);
            userService.addNewUser(user);
            response.sendRedirect(path+"/user/getUsers");
        }
        if("deleteUser".equals(index)){
            String id=request.getParameter("id");
            userService.deleteUserById(Integer.parseInt(id));
            response.sendRedirect(path+"/user/getUsers");
        }
        if("getUsers".equals(index)){
            List<User> list=userService.getAllUsers();
            if(list!=null){
                request.setAttribute("users",list);
                request.getRequestDispatcher("/views/users.jsp").forward(request,response);
            }else {
                System.out.println("查询用户失败");
            }
        }
        if("getUser".equals(index)){
            String id=request.getParameter("id");
            User user=userService.getUserById(Integer.parseInt(id));
            request.setAttribute("user",user);
            request.getRequestDispatcher("/views/updateUser.jsp").forward(request,response);
        }
        if("updateUser".equals(index)){
            String id=request.getParameter("id");
            String name=request.getParameter("name");
            String password=request.getParameter("password");
            User user=new User(Integer.parseInt(id),name,password);
            userService.updateUserById(user);
            response.sendRedirect(path+"/user/getUsers");
        }
    }
}

LoginController:

package controller;

import bean.User;
import service.UserService;

import javax.servlet.ServletException;
import javax.servlet.http.*;
import java.io.IOException;
import java.net.URLEncoder;

public class LoginController extends HttpServlet {
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        String name=request.getParameter("name");
        String password=request.getParameter("password");
        int memory=Integer.parseInt(request.getParameter("memory"));
        HttpSession session=request.getSession();
        UserService userService=new UserService();
        User user=userService.findUserByNameAndPassword(name,password);
        if(memory==1){
            Cookie cookie=new Cookie("name", URLEncoder.encode(name,"utf-8"));
            cookie.setMaxAge(60*60);
            response.addCookie(cookie);//很容易忘!!!
        }
        if(user==null){
            request.setAttribute("message","用户名或密码错误");
            request.getRequestDispatcher("/login.jsp").forward(request,response);
        }else {
            session.setAttribute("user",user);
            request.getRequestDispatcher("/index.jsp").forward(request,response);
        }
    }
}

  • filter层
    LoginFilter:
package filter;

import bean.User;

import javax.servlet.*;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;

public class LoginFilter implements Filter {
    private String encoding;
    public void destroy() {
    }

    public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, IOException {
        HttpServletRequest request= (HttpServletRequest) req;
        HttpServletResponse response= (HttpServletResponse) resp;
        request.setCharacterEncoding(encoding);
        response.setCharacterEncoding(encoding);
        HttpSession session=request.getSession();
        User user= (User) session.getAttribute("user");
        if(user==null){
            request.setAttribute("message","请登录");
            request.getRequestDispatcher("/login.jsp").forward(request,response);
        }else {
            chain.doFilter(request, response);
        }

    }

    public void init(FilterConfig config) throws ServletException {
        encoding=config.getInitParameter("encoding");
        ServletContext context=config.getServletContext();
        context.setAttribute("path",context.getContextPath());
        System.out.println(encoding);
    }

}

  • service层
    UserService:
package service;

import bean.User;
import dao.UserDao;

import java.util.List;

public class UserService {
    private UserDao userDao=new UserDao();
    public List<User> getAllUsers() {
        return userDao.getAllUsers();
    }

    public void addNewUser(User user) {
        userDao.addNewUser(user);
    }

    public void deleteUserById(int id) {
        userDao.deleteUserById(id);
    }

    public User getUserById(int id) {
        return userDao.getUserById(id);
    }

    public void updateUserById(User user) {
        userDao.updateUserById(user);
    }

    public User findUserByNameAndPassword(String name, String password) {
        return userDao.findUserByNameAndPassword(name,password);
    }
}

  • dao层
    UserDao:
package dao;

import bean.User;
import util.DBUtil;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

public class UserDao {
    public List<User> getAllUsers() {
        Connection connection=DBUtil.getConnection();
        List<User> list=new ArrayList();
        String sql="select * from user";
        try {
            PreparedStatement ps=connection.prepareStatement(sql);
            ResultSet rs=ps.executeQuery();
            while(rs.next()){
                String id=rs.getString("id");
                String name=rs.getString("name");
                String password=rs.getString("password");
                User user=new User(Integer.parseInt(id),name,password);
                list.add(user);
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }finally {
            DBUtil.close(connection);
        }
        return list;
    }

    public void addNewUser(User user) {
        Connection connection=DBUtil.getConnection();
        String sql="insert into user(name,password) values(?,?)";
        PreparedStatement ps=null;
        try {
            ps=connection.prepareStatement(sql);
            ps.setString(1,user.getName());
            ps.setString(2,user.getPassword());
            ps.execute();
        } catch (SQLException e) {
            e.printStackTrace();
        }finally {
            DBUtil.close(connection);
        }
    }

    public void deleteUserById(int id) {
        Connection connection=DBUtil.getConnection();
        String sql="delete from user where id=?";
        PreparedStatement ps=null;
        try {
            ps=connection.prepareStatement(sql);
            ps.setInt(1,id);
            ps.execute();
        } catch (SQLException e) {
            e.printStackTrace();
        }finally {
            DBUtil.close(connection);
        }
    }

    public User getUserById(int id) {
        Connection connection=DBUtil.getConnection();
        User user=new User();
        String sql="select * from user where id=?";
        PreparedStatement ps=null;
        try {
            ps=connection.prepareStatement(sql);
            ps.setInt(1,id);
            ResultSet rs=ps.executeQuery();
            while(rs.next()){
                user.setId(id);
                user.setName(rs.getString("name"));
                user.setPassword(rs.getString("password"));
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }finally {
            DBUtil.close(connection);
        }
        return user;
    }

    public void updateUserById(User user) {
        Connection connection=DBUtil.getConnection();
        String sql="update user set name=?,password=? where id=?";
        PreparedStatement ps=null;
        try {
            ps=connection.prepareStatement(sql);
            ps.setString(1,user.getName());
            ps.setString(2,user.getPassword());
            ps.setInt(3,user.getId());
            ps.execute();
        } catch (SQLException e) {
            e.printStackTrace();
        }finally {
            DBUtil.close(connection);
        }
    }

    public User findUserByNameAndPassword(String name, String password) {
        Connection connection=DBUtil.getConnection();
        User user=new User();
        String sql="select * from user where name=? and password=?";
        PreparedStatement ps=null;
        try {
            ps=connection.prepareStatement(sql);
            ps.setString(1,name);
            ps.setString(2,password);
            ResultSet rs=ps.executeQuery();
            while(rs.next()){
                user.setName(rs.getString("name"));
                user.setPassword(rs.getString("password"));
                return user;
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }finally {
            DBUtil.close(connection);
        }
        return null;
    }
}

  • util层
    DBUtil:
package util;



import org.apache.commons.dbcp.BasicDataSource;

import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.Properties;

public class DBUtil {
    private static BasicDataSource bds;
    static{
        bds=new BasicDataSource();
        Properties p=new Properties();
        InputStream is=DBUtil.class.getClassLoader().getResourceAsStream("db.properties");
        try {
            p.load(is);
        } catch (IOException e) {
            e.printStackTrace();
        }
        bds.setDriverClassName(p.getProperty("db.driver"));
        bds.setUrl(p.getProperty("db.url"));
        bds.setUsername(p.getProperty("db.username"));
        bds.setPassword(p.getProperty("db.password"));
        bds.setInitialSize(Integer.parseInt(p.getProperty("db.initNum")));
        bds.setMaxActive(Integer.parseInt(p.getProperty("db.maxNum")));
    }
    public static Connection getConnection(){
        Connection c=null;
        try {
            c=bds.getConnection();
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return c;
    }
    public static void close(Connection c){
        if(c!=null){
            try {
                c.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }
}

  • db.properties

db.driver=com.mysql.jdbc.Driver
db.url=jdbc:mysql://localhost:3306/
db.username=数据库用户名
db.password=数据库密码
db.initNum=3
db.maxNum=5

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值