码迷,mamicode.com
首页 > 编程语言 > 详细

JavaWeb-简单的登录案例

时间:2021-06-16 17:59:27      阅读:0      评论:0      收藏:0      [点我收藏+]

标签:BMI   where   load   gets   password   cti   att   type   lex   

简单的登录案例

步骤:

1.编写实体类

public class User {
    private String username;
    private String password;

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

    public String getUsername() {
        return username;
    }

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

    public String getPassword() {
        return password;
    }
}

2.编写数据库的配置文件 db.properties

driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/mvctest?useSSL=true&useUnicode=true&characterEncoding=utf-8
username=root
password=root

3.编写公共类

  • BaseDao

    public class BaseDao {
        private static String driver;
        private static String url;
        private static String username;
        private static String password;
    
        //静态代码块
        static {
            try {
                Properties properties = new Properties();
                InputStream is = BaseDao.class.getClassLoader().getResourceAsStream("db.properties");
                properties.load(is);
                driver = properties.getProperty("driver");
                url = properties.getProperty("url");
                username = properties.getProperty("username");
                password = properties.getProperty("password");
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    
        //连接数据库的方法
        public static Connection getConnection() {
            Connection connection = null;
            try {
                Class.forName(driver);
                connection = DriverManager.getConnection(url, username, password);
            } catch (Exception e) {
                e.printStackTrace();
            }
            return connection;
        }
    
        //查询数据库的方法
        public static ResultSet execute(Connection connection, PreparedStatement pstt,ResultSet rs,String sql,Object[] params) throws SQLException {
            pstt = connection.prepareStatement(sql);
            for ( int i = 0; i < params.length; i++ ) {
                pstt.setObject(i+1,params[i]);
            }
            rs = pstt.executeQuery();
            return rs;
        }
    
        //关闭数据源
        public static boolean closeResource(Connection connection,PreparedStatement preparedStatement,ResultSet resultSet) {
            boolean flag = true;
    
            if ( resultSet != null ) {
                try {
                    resultSet.close();
                    resultSet = null;
                } catch (SQLException e) {
                    e.printStackTrace();
                    flag = false;
                }
            }
    
            if ( preparedStatement != null ) {
                try {
                    preparedStatement.close();
                    preparedStatement = null;
                } catch (SQLException e) {
                    e.printStackTrace();
                    flag = false;
                }
            }
    
            if ( connection != null ) {
                try {
                    connection.close();
                    connection = null;
                } catch (SQLException e) {
                    e.printStackTrace();
                    flag = false;
                }
            }
            return flag;
        }
    }
    
  • Constant

public class Constant {
    public static final String USER_SESSION = "userSession";
}

4.编写过滤器(用来设置字符编码格式)

public class ChrasetEncodingFilter implements Filter {
    public void init(FilterConfig filterConfig) throws ServletException {

    }

    public void doFilter(ServletRequest request, ServletResponse response, FilterChain filterChain) throws IOException, ServletException {
        request.setCharacterEncoding("utf-8");
        response.setContentType("text/html;charset=utf-8");
        response.setCharacterEncoding("utf-8");
        filterChain.doFilter(request,response);
    }

    public void destroy() {

    }
}

**配置过滤器的xml **

	<filter>
        <filter-name>ChrasetEncodingFilter</filter-name>
        <filter-class>com.cc.filter.ChrasetEncodingFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>ChrasetEncodingFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

5.编写dao层

public interface UserDao {
    public User loginUser(Connection connection,String username,String password) throws SQLException;
}

实现类

public class UserDaoImpl implements UserDao{
    public User loginUser(Connection connection, String username, String password) throws SQLException {
        PreparedStatement pstt = null;
        ResultSet rs = null;
        User user = null;

        if ( connection != null ) {
            String sql = " select * from people where username = ? and password = ?";
            Object[] params = {username,password};
            rs = BaseDao.execute(connection, pstt, rs, sql, params);
            if ( rs.next() ) {
                user = new User();
                user.setUsername(rs.getString("username"));
                user.setPassword(rs.getString("password"));
            }
            BaseDao.closeResource(null,pstt,rs);
        }
        return user;
    }
}

6.编写业务层service

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

实现类

public class UserServiceImpl implements UserService{
    //调用dao层
    private UserDao userDao;
    public UserServiceImpl() {
        userDao = new UserDaoImpl();
    }
    public User findUserNameandPassword(String username, String password) {
        Connection connection = null;
        User user = null;

        try {
            connection = BaseDao.getConnection();
            user = userDao.loginUser(connection, username, password);
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            BaseDao.closeResource(connection,null,null);
        }
        return user;
    }
}

7.编写Loginservlet

public class LoginServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        String username = req.getParameter("username");
        String password = req.getParameter("password");
        req.setAttribute("name", username);
        UserService userService = new UserServiceImpl();
        User user = userService.findUserNameandPassword(username, password);
        if (user != null) {
            req.getSession().setAttribute(Constant.USER_SESSION, user);
            resp.sendRedirect("/sys/success.jsp");
        } else {
            req.getRequestDispatcher("/error.jsp").forward(req, resp);
        }
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req, resp);
    }
}

配置xml

	<servlet>
        <servlet-name>LoginServlet</servlet-name>
        <servlet-class>com.cc.servlet.LoginServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>LoginServlet</servlet-name>
        <url-pattern>/login</url-pattern>
    </servlet-mapping>

8.编写前端登录页面 login.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>登录界面</title>
</head>
<body>

<div style="text-align: center">
    <h1>个人信息登录</h1>
    <form action="${pageContext.request.contextPath}/login" method="post">
        <div>
            <label>用户名:</label>
            <input type="text" name="username" placeholder="请输入用户名">
        </div>
        <div>
            <label>密码:</label>
            <input type="password" name="password" placeholder="请输入密码">
        </div>
        <div>
            <input type="submit" value="登录">
        </div>
    </form>

</div>

</body>
</html>

9.当输入的用户名和密码和数据库一样时,则跳转到/sys/success.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>

<h1>${sessionScope.userSession.username},欢迎您</h1>
<p><a href="/logout">注销</a> </p>

</body>
</html>

10.注销后则不能访问 /sys/success.jsp (设置过滤器)

public class SysFilter implements Filter {
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {

    }

    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        HttpServletRequest request = (HttpServletRequest) servletRequest;
        HttpServletResponse response = (HttpServletResponse) servletResponse;
        Object session = request.getSession().getAttribute(Constant.USER_SESSION);
        if ( session == null ) {
            response.sendRedirect("/login.jsp");
        }
        filterChain.doFilter(request,response);
    }

    @Override
    public void destroy() {

    }
}

配置xml

	<filter>
        <filter-name>SysFilter</filter-name>
        <filter-class>com.cc.filter.SysFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>SysFilter</filter-name>
        <url-pattern>/sys/*</url-pattern>
    </filter-mapping>

11.注销后跳转到logout中(LogoutServlet)

public class LogoutServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        Object session = req.getSession().getAttribute(Constant.USER_SESSION);
        if ( session != null ) {
            req.getSession().removeAttribute(Constant.USER_SESSION);
            resp.sendRedirect("/login.jsp");
        } else {
            resp.sendRedirect("/login.jsp");
        }
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req, resp);
    }
}

配置xml

	<servlet>
        <servlet-name>LogoutServlet</servlet-name>
        <servlet-class>com.cc.servlet.LogoutServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>LogoutServlet</servlet-name>
        <url-pattern>/logout</url-pattern>
    </servlet-mapping>

12.当输入的用户名和密码和数据库不一样时,则跳转到error.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>失败界面</title>
</head>
<body>

<h1>抱歉,${requestScope.name}没有权限访问</h1>
<p><a href="login.jsp">返回首页</a></p>

</body>
</html>

13.设置首页

	<welcome-file-list>
        <welcome-file>login.jsp</welcome-file>
    </welcome-file-list>

数据库数据如下:

技术图片

效果如下:

首页

技术图片

输入正确的用户名和密码时:

技术图片

技术图片

技术图片

注销后再访问 sys/success.jsp 访问失败

输入正确的用户名和错误的密码时

技术图片

输入错误的用户名和密码时:

技术图片

技术图片

技术图片

JavaWeb-简单的登录案例

标签:BMI   where   load   gets   password   cti   att   type   lex   

原文地址:https://www.cnblogs.com/duoruic/p/14887734.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!