JavaWeb小项目练习(基于三层架构实现登录,对表增,删,改,查的操作)

 一 创建项目并修改项目结构

File->New->Project新建一个名为javaweb01的工程

1

JavaWeb小项目练习(基于三层架构实现登录,对表增,删,改,查的操作)_第1张图片

2

JavaWeb小项目练习(基于三层架构实现登录,对表增,删,改,查的操作)_第2张图片

javaweb01->New->Module新建一个名为MyManage的模块

1

2

JavaWeb小项目练习(基于三层架构实现登录,对表增,删,改,查的操作)_第3张图片

将MyManage模块设置为支持web项目

1

JavaWeb小项目练习(基于三层架构实现登录,对表增,删,改,查的操作)_第4张图片

2

JavaWeb小项目练习(基于三层架构实现登录,对表增,删,改,查的操作)_第5张图片

将web项目重命名并移动到main路径下

JavaWeb小项目练习(基于三层架构实现登录,对表增,删,改,查的操作)_第6张图片

配置pom文件(文件依赖,打包方式,以及支持加载的文件)



    4.0.0
    
        com.by
        javaweb
        1.0-SNAPSHOT
    

    MyManage

    war

    
        8
        8
        UTF-8
    
    

        
            javax.servlet
            servlet-api
            2.5
        


        
            org.mybatis
            mybatis
            3.4.5
        

        
            mysql
            mysql-connector-java
            5.1.47
        

        
            log4j
            log4j
            1.2.17
        

        
            javax.servlet.jsp
            jsp-api
            2.0
        

        
            jstl
            jstl
            1.2
        
    
    
        
        
            
                src/main/java
                
                    **/*.xml
                
            
            
            
                src/main/resources
            
        
    

二 使用三层架构和配置文件以及Tomcat服务器

创建三层架构的包(表现层)servlet,(业务逻辑层)service serviceimpl,(数据访问层)mapper

JavaWeb小项目练习(基于三层架构实现登录,对表增,删,改,查的操作)_第7张图片

加载配置文件(数据库配置文件,日志文件,MyBatis配置文件)

数据库配置文件db.properties

jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3305/servlet?characterEncoding=UTF-8
jdbc.username=root
jdbc.password=

日志文件log4j.properties

# Global logging configuration
log4j.rootLogger=DEBUG, stdout
# Console output...
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n

MyBatis配置文件mybatis-config.xml




    
    
        
    
    
    
        
            
            
                
                
                
                
            
        
    
    
    

        
    

项目结构

JavaWeb小项目练习(基于三层架构实现登录,对表增,删,改,查的操作)_第8张图片

Tomcat服务器

1

2

JavaWeb小项目练习(基于三层架构实现登录,对表增,删,改,查的操作)_第9张图片

3

JavaWeb小项目练习(基于三层架构实现登录,对表增,删,改,查的操作)_第10张图片

4

JavaWeb小项目练习(基于三层架构实现登录,对表增,删,改,查的操作)_第11张图片

5

JavaWeb小项目练习(基于三层架构实现登录,对表增,删,改,查的操作)_第12张图片

6

JavaWeb小项目练习(基于三层架构实现登录,对表增,删,改,查的操作)_第13张图片

7

JavaWeb小项目练习(基于三层架构实现登录,对表增,删,改,查的操作)_第14张图片

8

JavaWeb小项目练习(基于三层架构实现登录,对表增,删,改,查的操作)_第15张图片

9

三 监听和过滤

监听器

SqlSession回话实例从始至终都使用,所以在将SqlSession装在ServletContext里边

新建com->by->listener->MyServletContxtListenerlei

public class MyServletContxtListener implements ServletContextListener {

    @Override
    public void contextInitialized(ServletContextEvent servletContextEvent) {
        try {
            //加载配置文件
            String resource = "mybatis-config.xml";
            InputStream inputStream = Resources.getResourceAsStream(resource);

            //创建SessionFactory
            SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

            //使用数据的会话实例
            SqlSession sqlSession = sessionFactory.openSession();
            //把sqlSession对象撞到servletContext中
            ServletContext servletContext = servletContextEvent.getServletContext();
            servletContext.setAttribute("sqlSession", sqlSession);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    @Override
    public void contextDestroyed(ServletContextEvent servletContextEvent) {

    }
}

web.xml


    
        com.by.listener.MyServletContxtListener
    

过滤器

因为文件请求和响应需要防止字符编码格式不一样而导致乱码,所以我们采用过滤器技术过滤每一个servlet文件

新建com->by->filter->CharacterEncodingFilter

public class CharacterEncodingFilter implements Filter {

    @Override
    public void init(FilterConfig filterConfig) throws ServletException {

    }
    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        //请求中文乱码
        servletRequest.setCharacterEncoding("utf-8");
        //响应中文乱码
        servletResponse.setContentType("text/html;charset=utf-8");
        //放行filter
        filterChain.doFilter(servletRequest, servletResponse);
    }

    @Override
    public void destroy() {

    }
}

pojo包下新建User类

package com.by.pojo;

public class User {
    private Integer id;
    private String username;
    private String password;
    private String sex;
    private String address;
    private Integer age;

    public User(Integer id, String username, String password, String sex, Integer age, String address) {
        this.id = id;
        this.username = username;
        this.password = password;
        this.sex = sex;
        this.address = address;
        this.age = age;
    }

    public User(String username, String password, String sex, Integer age, String address) {
        this.username = username;
        this.password = password;
        this.sex = sex;
        this.address = address;
        this.age = age;
    }

    public User() {
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    public Integer getId() {
        return id;
    }

    public void setId(Integer 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;
    }

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }

    public String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }
}

web.xml


    
        characterEncodingFilter
        com.by.filter.CharacterEncodingFilter
    
    
        characterEncodingFilter
        
        /*
    

三 登录验证并查询数据表内容

login.jsp

<%--
  Created by IntelliJ IDEA.
  User: 21309
  Date: 2023-12-27
  Time: 16:05
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>

  
    $Title$
  
  
  

用户管理系统

账号:
密码:

web.xml


    
        login.jsp
    

在servlet包下新建LoginServlet

//表现层
public class LoginServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doPost(req, resp);
    }
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //根据input标签的name属性获取前端提交的参数
        String username = req.getParameter("username");
        String password = req.getParameter("password");
        //调用service
        UserService userService = new UserServiceImpl(this);
        //将获得的username,password传递给User
        User user=userService.login(username,password);
        //登录判断
        if (user!=null){
        //如果登录成功,则跳转到select_user.jsp
        resp.sendRedirect("selectUserServlet");
        }else {
        //如果登录失败,则跳转到login.jsp
        req.getRequestDispatcher("login.jsp").forward(req,resp);
        }
    }
}

web.xml


    
        login
        com.by.servlet.LoginServlet
    
    
        login
        /login
    

以下内容可在servlet类中Alt+Enter快捷键出来(先把Servlet类写完整)

在service包下的UserService接口

public interface UserService {
    User login(String username, String password);
}

UserServiceImpl类

public class UserServiceImpl implements UserService {
    private SqlSession sqlSession;
    private UserMapper userMapper;
    //加载UserMapper类
    public UserServiceImpl(HttpServlet httpServlet) {
        ServletContext servletContext = httpServlet.getServletContext();
        sqlSession = (SqlSession) servletContext.getAttribute("sqlSession");
        userMapper = sqlSession.getMapper(UserMapper.class);
    }
@Override
    public User login(String username, String password) {
        //调用dao
        return userMapper.login(username,password);
    }
}

mapper包下的UserMapper接口

public interface UserMapper {
     User login(@Param("username") String username, @Param("password") String password);
}

mapper包下的UserMapper.xml接口




    
    

登陆页面要要跳到select_user.jsp页面

在servlet包下新建SelectUserServlet

public class SelectUserServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doPost(req, resp);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //调用UserService查询List
        UserService userService = new UserServiceImpl(this);
        List userList = userService.selectUser();

        //把List送到select_user.jsp
        req.setAttribute("userList", userList);
        req.getRequestDispatcher("select_user.jsp").forward(req, resp);
    }
}

web.xml


    
        selectUserServlet
        com.by.servlet.SelectUserServlet
    
    
        selectUserServlet
        /selectUserServlet
    

以下内容可在servlet类中Alt+Enter快捷键出来(先把Servlet类写完整)

在service包下的UserService接口

public interface UserService {

    User login(String username, String password);

    List selectUser();
}

UserServiceImpl类

public class UserServiceImpl implements UserService {
    private SqlSession sqlSession;
    private UserMapper userMapper;
    //加载UserMapper类
    public UserServiceImpl(HttpServlet httpServlet) {
        ServletContext servletContext = httpServlet.getServletContext();
        sqlSession = (SqlSession) servletContext.getAttribute("sqlSession");
        userMapper = sqlSession.getMapper(UserMapper.class);
    }

    @Override
    public User login(String username, String password) {
        //调用dao
        return userMapper.login(username,password);
    }

    @Override
    public List selectUser() {
        return userMapper.selectUser();
    }
}

mapper包下的UserMapper接口

public interface UserMapper {
    User login(@Param("username") String username, @Param("password") String password);

    List selectUser();
}

mapper包下的UserMapper.xml接口




    
    

测试结果

1

JavaWeb小项目练习(基于三层架构实现登录,对表增,删,改,查的操作)_第16张图片

2

JavaWeb小项目练习(基于三层架构实现登录,对表增,删,改,查的操作)_第17张图片

四 新增数据

在select_user.jsp添加新增链接

新建add_user.jsp

<%--
  Created by IntelliJ IDEA.
  User: Hero
  Date: 2023/12/29
  Time: 11:01
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>


    Title


新增

账号:
密码:
性别:
年龄:
地址:

在servlet包下新建addUser

public class addUser extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doPost(req, resp);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //1、接收参数
        String username = req.getParameter("username");
        String password = req.getParameter("password");
        String sex = req.getParameter("sex");
        Integer age = Integer.valueOf(req.getParameter("age"));
        String address = req.getParameter("address");
        User user = new User(username, password, sex, age, address);

        //2、调用service,把user保存到数据库
        UserService userService = new UserServiceImpl(this);
        userService.addUser(user);

        //3、重定向到SelectUserServlet
        resp.sendRedirect("selectUserServlet");
    }
}

web.xml


    
        addUser
        com.by.servlet.addUser
    
    
        addUser
        /addUser
    

以下内容可在servlet类中Alt+Enter快捷键出来(先把Servlet类写完整)

在service包下的UserService接口

public interface UserService {

    User login(String username, String password);

    List selectUser();

    void addUser(User user);
}

UserServiceImpl类

public class UserServiceImpl implements UserService {
    private SqlSession sqlSession;
    private UserMapper userMapper;
    //加载UserMapper类
    public UserServiceImpl(HttpServlet httpServlet) {
        ServletContext servletContext = httpServlet.getServletContext();
        sqlSession = (SqlSession) servletContext.getAttribute("sqlSession");
        userMapper = sqlSession.getMapper(UserMapper.class);
    }

    @Override
    public User login(String username, String password) {
        //调用dao
        return userMapper.login(username,password);
    }

    @Override
    public List selectUser() {
        return userMapper.selectUser();
    }

    @Override
    public void addUser(User user) {
        userMapper.addUser(user);
        sqlSession.commit();
    }
}

mapper包下的UserMapper接口

public interface UserMapper {
    User login(@Param("username") String username, @Param("password") String password);

    List selectUser();

    void addUser(User user);
}

mapper包下的UserMapper.xml接口




    
    

    
        INSERT INTO user
        
            
                username,
            
            
                password,
            
            
                sex,
            
            
                age,
            
            
                address,
            
        
        VALUES
        
            
                #{username},
            
            
                #{password},
            
            
                #{sex},
            
            
                #{age},
            
            
                #{address},
            
        
    

测试结果

1

JavaWeb小项目练习(基于三层架构实现登录,对表增,删,改,查的操作)_第18张图片

2

JavaWeb小项目练习(基于三层架构实现登录,对表增,删,改,查的操作)_第19张图片

五 删除数据

在select_user.jsp添加删除链接

在servlet包下新建DeleteUserServlet

public class UpdateUserServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doPost(req, resp);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //1、接收参数
        Integer id = Integer.valueOf(req.getParameter("id"));
        String username = req.getParameter("username");
        String password = req.getParameter("password");
        String sex = req.getParameter("sex");
        Integer age = Integer.valueOf(req.getParameter("age"));
        String address = req.getParameter("address");
        User user = new User(id, username, password, sex, age, address);

        //2、调用service,修改user
        UserService userService = new UserServiceImpl(this);
        userService.updateUserById(user);

        //3、重定向到SelectUserServlet
        resp.sendRedirect("selectUserServlet");
    }
}

web.xml

 
    
        deleteUser
        com.by.servlet.DeleteUserServlet
    
    
        deleteUser
        /deleteUser
    

以下内容可在servlet类中Alt+Enter快捷键出来(先把Servlet类写完整)

在service包下的UserService接口

public interface UserService {

    User login(String username, String password);

    List selectUser();

    void addUser(User user);

    void deleteUser(Integer id);
}

UserServiceImpl类

public class UserServiceImpl implements UserService {
    private SqlSession sqlSession;
    private UserMapper userMapper;
    //加载UserMapper类
    public UserServiceImpl(HttpServlet httpServlet) {
        ServletContext servletContext = httpServlet.getServletContext();
        sqlSession = (SqlSession) servletContext.getAttribute("sqlSession");
        userMapper = sqlSession.getMapper(UserMapper.class);
    }

    @Override
    public User login(String username, String password) {
        //调用dao
        return userMapper.login(username,password);
    }

    @Override
    public List selectUser() {
        return userMapper.selectUser();
    }

    @Override
    public void addUser(User user) {
        userMapper.addUser(user);
        sqlSession.commit();
    }

    @Override
    public void deleteUser(Integer id) {
        userMapper.deleteUser(id);
        sqlSession.commit();
    }
}

mapper包下的UserMapper接口

public interface UserMapper {
    User login(@Param("username") String username, @Param("password") String password);

    List selectUser();

    void addUser(User user);

    void deleteUser(Integer id);
}

mapper包下的UserMapper.xml接口




    
    

    
        INSERT INTO user
        
            
                username,
            
            
                password,
            
            
                sex,
            
            
                age,
            
            
                address,
            
        
        VALUES
        
            
                #{username},
            
            
                #{password},
            
            
                #{sex},
            
            
                #{age},
            
            
                #{address},
            
        
    

    
        DELETE FROM user WHERE id=#{id}
    

测试结果

JavaWeb小项目练习(基于三层架构实现登录,对表增,删,改,查的操作)_第20张图片

六 更新数据

在select_user.jsp增加修改链接

修改数据首先要获取被修改的数据

获取被修改的数据

在servlet包下新建GetUserServlet

public class GetUserServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doPost(req, resp);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //1、接收参数
        Integer id = Integer.valueOf(req.getParameter("id"));
        //2、调用service,根据id查询user
        UserService userService = new UserServiceImpl(this);
        User user = userService.getUserById(id);

        //3、user送到update_user.jsp
        req.setAttribute("user", user);
        req.getRequestDispatcher("update_user.jsp").forward(req, resp);
    }
}

web.xml

 
    
        getUserServlet
        com.by.servlet.GetUserServlet
    
    
        getUserServlet
        /getUserById
    

以下内容可在servlet类中Alt+Enter快捷键出来(先把Servlet类写完整)

在service包下的UserService接口

public interface UserService {

    User login(String username, String password);

    List selectUser();

    void addUser(User user);

    void deleteUser(Integer id);

    User getUserById(Integer id);
}

UserServiceImpl类

public class UserServiceImpl implements UserService {
    private SqlSession sqlSession;
    private UserMapper userMapper;
    //加载UserMapper类
    public UserServiceImpl(HttpServlet httpServlet) {
        ServletContext servletContext = httpServlet.getServletContext();
        sqlSession = (SqlSession) servletContext.getAttribute("sqlSession");
        userMapper = sqlSession.getMapper(UserMapper.class);
    }

    @Override
    public User login(String username, String password) {
        //调用dao
        return userMapper.login(username,password);
    }

    @Override
    public List selectUser() {
        return userMapper.selectUser();
    }

    @Override
    public void addUser(User user) {
        userMapper.addUser(user);
        sqlSession.commit();
    }

    @Override
    public void deleteUser(Integer id) {
        userMapper.deleteUser(id);
        sqlSession.commit();
    }

    @Override
    public User getUserById(Integer id) {
        return userMapper.getUserById(id);
    }
}

mapper包下的UserMapper接口

public interface UserMapper {
    User login(@Param("username") String username, @Param("password") String password);

    List selectUser();

    void addUser(User user);

    void deleteUser(Integer id);

    User getUserById(Integer id);
}

mapper包下的UserMapper.xml接口




    
    

    
        INSERT INTO user
        
            
                username,
            
            
                password,
            
            
                sex,
            
            
                age,
            
            
                address,
            
        
        VALUES
        
            
                #{username},
            
            
                #{password},
            
            
                #{sex},
            
            
                #{age},
            
            
                #{address},
            
        
    

    
        DELETE FROM user WHERE id=#{id}
    

    

测试结果

JavaWeb小项目练习(基于三层架构实现登录,对表增,删,改,查的操作)_第21张图片

修改数据

在servlet包下新建UpdateUserServlet

public class UpdateUserServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doPost(req, resp);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //1、接收参数
        Integer id = Integer.valueOf(req.getParameter("id"));
        String username = req.getParameter("username");
        String password = req.getParameter("password");
        String sex = req.getParameter("sex");
        Integer age = Integer.valueOf(req.getParameter("age"));
        String address = req.getParameter("address");
        User user = new User(id, username, password, sex, age, address);

        //2、调用service,修改user
        UserService userService = new UserServiceImpl(this);
        userService.updateUserById(user);

        //3、重定向到SelectUserServlet
        resp.sendRedirect("selectUserServlet");
    }
}

web.xml


    
        updateUserById
        com.by.servlet.UpdateUserServlet
    
    
        updateUserById
        /updateUserById
    

以下内容可在servlet类中Alt+Enter快捷键出来(先把Servlet类写完整)

在service包下的UserService接口

public interface UserService {

    User login(String username, String password);

    List selectUser();

    void addUser(User user);

    void deleteUser(Integer id);

    User getUserById(Integer id);

    void updateUserById(User user);
}

UserServiceImpl类

public class UserServiceImpl implements UserService {
    private SqlSession sqlSession;
    private UserMapper userMapper;
    //加载UserMapper类
    public UserServiceImpl(HttpServlet httpServlet) {
        ServletContext servletContext = httpServlet.getServletContext();
        sqlSession = (SqlSession) servletContext.getAttribute("sqlSession");
        userMapper = sqlSession.getMapper(UserMapper.class);
    }

    @Override
    public User login(String username, String password) {
        //调用dao
        return userMapper.login(username,password);
    }

    @Override
    public List selectUser() {
        return userMapper.selectUser();
    }

    @Override
    public void addUser(User user) {
        userMapper.addUser(user);
        sqlSession.commit();
    }

    @Override
    public void deleteUser(Integer id) {
        userMapper.deleteUser(id);
        sqlSession.commit();
    }

    @Override
    public User getUserById(Integer id) {
        return userMapper.getUserById(id);
    }

    @Override
    public void updateUserById(User user) {
        userMapper.updateUserById(user);
        sqlSession.commit();
    }
}

mapper包下的UserMapper接口

public interface UserMapper {
    User login(@Param("username") String username, @Param("password") String password);

    List selectUser();

    void addUser(User user);

    void deleteUser(Integer id);

    User getUserById(Integer id);

    void updateUserById(User user);
}

mapper包下的UserMapper.xml接口




    
    

    
        INSERT INTO user
        
            
                username,
            
            
                password,
            
            
                sex,
            
            
                age,
            
            
                address,
            
        
        VALUES
        
            
                #{username},
            
            
                #{password},
            
            
                #{sex},
            
            
                #{age},
            
            
                #{address},
            
        
    

    
        DELETE FROM user WHERE id=#{id}
    

    

    
        UPDATE user
        
            
                username=#{username},
            
            
                password=#{password},
            
            
                sex=#{sex},
            
            
                age=#{age},
            
            
                address=#{address},
            
        
        WHERE id=#{id}
    

测试结果

1

JavaWeb小项目练习(基于三层架构实现登录,对表增,删,改,查的操作)_第22张图片

2

JavaWeb小项目练习(基于三层架构实现登录,对表增,删,改,查的操作)_第23张图片

七 最终项目结构

1

JavaWeb小项目练习(基于三层架构实现登录,对表增,删,改,查的操作)_第24张图片

2

JavaWeb小项目练习(基于三层架构实现登录,对表增,删,改,查的操作)_第25张图片

你可能感兴趣的:(java,前端,开发语言)