servlet介绍和用户登陆网站

130 阅读5分钟

servlet网络拓扑图

在这里插入图片描述

servlet的生命周期

Servlet部署的容器里(我们使用的you是tomcat,也可以是就boss,weblogic。。)它的生命周期由容器来管理:
Servlet的生命周期分为以下几个阶段:

 1. 装载servlct,由相应的容器来完成
 2. 创建一个servlet实例
 3. 调用servlet的init方法,该方法只会在第一次访问该servlet时被调用一次。
 4. 服务:调用servlet的service()方法,一般业务逻辑在这里处理,该方法在访问该servlet时,都会被调用。
 5. 销毁:调用servlet的destory()方法,销毁该servlet实例,该方法在以下情况被调用:
 a.tomcat重新启动
 b.reload该Webapp
 c.重新启动电脑

通过GenericServlet开发serclet

在这里插入图片描述

用户登陆网站

用户登陆网站框架图

在这里插入图片描述

关于servlet的@WebServlet注解的使用

分页

            //分页功能
            int pageSize = 3;//一页显示几条记录
            int pageNow = 1;//希望显示的第几页
            int rowCout = 0;//共有几条记录(查表)
            int pageCout = 0;//共有几页(计算)
            
/*        //计算式为
        if (rowCout % pageSize == 0) {
            pageCout = rowCout / pageSize;
        } else {
            pageCout = rowCout / pageSize + 1;
        }*/

          //分页功能
            int pageSize = 3;//一页显示几条记录
            int pageNow = 1;//希望显示的第几页
            int rowCout = 0;//共有几条记录(查表)
            int pageCout = 0;//共有几页(计算)
/*        //计算式为
        if (rowCout % pageSize == 0) {
            pageCout = rowCout / pageSize;
        } else {
            pageCout = rowCout / pageSize + 1;
        }*/

            //连接数据库(三步取)
            Class.forName("com.mysql.jdbc.Driver");
            //得到连接
//            Connection ct= DriverManager.getConnection("jdbc:microsoft:sqlserver://192.168.1.59:3306;databaseName=spdb,");
            ct = DriverManager.getConnection("jdbc:mysql://localhost:3306/servletsql", "root", "root");
            //创建一个Statement
            ps = ct.createStatement();
            //查询
            rs = ps.executeQuery("select count (*) from users");//sql语句

            if (rs.next()) {
                rowCout = rs.getInt(1);
            }
            //计算 pageCount
            if (rowCout % pageSize == 0) {
                pageCout = rowCout / pageSize;
            } else {
                pageCout = rowCout / pageSize + 1;
            }

代码

LoginServlet.java

package servlet;

import com.sun.xml.internal.ws.addressing.WsaActionUtil;

import javax.jws.WebService;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.*;
import java.io.IOException;
import java.net.URLEncoder;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;

/**
 * @author lck100
 */
@WebServlet(value = "/loginServlet", name = "LoginServlet")
public class LoginServlet extends HttpServlet {
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        //将验证信息写入到 seesion
        HttpSession session = request.getSession(true);
        //修改session的存在空间
        session.setMaxInactiveInterval(20);
        session.setAttribute("username", "password");//属性,值


        Connection ct = null;
        Statement sm = null;
        //ResultSet rs = null;
        try {
            // 获取输入用户名文本框的值
            String username = request.getParameter("username");
            String password = request.getParameter("password");

            //连接数据库
            Class.forName("com.mysql.jdbc.Driver");
            //得到连接
            ct = DriverManager.getConnection("jdbc:mysql://localhost:3306/servletsql", "root", "root");
            //创建一个Statement
            sm = ct.createStatement();
            //查询
            ResultSet rs = sm.executeQuery("select * from users where username='" + username + "'and password='" + password + "'");//sql语句

            if (rs.next()) {// 合法
                if (rs.getString(3).equals(password) && rs.getString(2).equals(username)) {
                    String usernamek = rs.getString("username");
                    String passwordk = rs.getString("password");
                    String agek = rs.getString("age");
                    String gradek = rs.getString("grade");

                    session.setAttribute("username", usernamek);
                    session.setAttribute("password", passwordk);
                    session.setAttribute("age", agek);
                    session.setAttribute("grade", gradek);

                }    // 新建名为name的Cookie
                Cookie nameCookie = new Cookie("name", URLEncoder.encode(username, "utf-8"));
                // 新建名为password的Cookie
                Cookie passwordCookie = new Cookie("password", password);

                // 设置Cookie的使用路径
                nameCookie.setPath(request.getContextPath() + "/");
                passwordCookie.setPath(request.getContextPath() + "/");

                // 获取是否保存Cookie
                String rememberme = request.getParameter("rememberme");
                System.out.println(rememberme);
                // 判断复选框是否被选中,如果选中则返回on,如果没有被选中就会返回null,所以需要注意
                if (rememberme != null && rememberme.equals("on")) {
                    // 设置保存Cookie的时间长度,单位为秒
                    nameCookie.setMaxAge(7 * 24 * 60 * 60);
                    passwordCookie.setMaxAge(7 * 24 * 60 * 60);
                } else if (rememberme == null) {
                    // 设置将不保存Cookie
                    nameCookie.setMaxAge(0);
                    passwordCookie.setMaxAge(0);
                }

                // 输出到客户端
                response.addCookie(nameCookie);
                response.addCookie(passwordCookie);

                // 登录成功后跳转到success.jsp

                request.getRequestDispatcher("success.jsp").forward(request, response);
            } else {
/*                //说明用户不存在
                response.sendRedirect("index.jsp");*/
                // 保存错误提示数据
                session.setAttribute("error", "用户名或者密码不正确");
                // 登录失败后将跳转到error.jsp
                request.getRequestDispatcher("error.jsp").forward(request, response);
            }
        } catch (
                Exception ex) {
            ex.printStackTrace();
        }
    }

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


index.jsp

<%--
  Created by IntelliJ IDEA.
  User: 段魁
  Date: 2020/5/12
  Time: 19:04
  To change this template use File | Settings | File Templates.
--%>
<%@ page import="java.net.URLDecoder" %>
<%--加载静态JSP页面需设置该页的编码格式为UTF-8--%>
<%@ page pageEncoding="utf-8" %>
<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>登录</title>
    <link rel="stylesheet" href="css/basic.css">
</head>
<body>
<div>
    <%
        // 用户名
        String user = "";
        // 登录密码
        String pass = "";
        // 复选框是否选中
        String checked = "";
        // 获取的是请求里的所有cookie组成的数组
        Cookie[] cookies = request.getCookies();
        // 如果cookies数组不为空对其进行遍历
        if (cookies != null && cookies.length > 0) {
            // 循环遍历Cookie
            for (int i = 0; i < cookies.length; i++) {
                // 获取Cookie对象
                Cookie cookie = cookies[i];
                // 将创建的cookie名与获取的cookie数组中已经存在的cookie名进行比较
                if ("name".equals(cookie.getName())) {
                    // "name"是在另一个jsp文件中创建的cookie名
                    // 获取名字叫做"name"的cookie的值
                    user = URLDecoder.decode(cookie.getValue(), "utf-8");
                    // 将“记住我”设置为勾选
                    checked = "checked";
                }
                // 将创建的cookie名与获取的cookie数组中已经存在的cookie名进行比较
                if ("password".equals(cookie.getName())) {
                    // "password"是在另一个jsp文件中创建的cookie名
                    // 获取名字叫做"password"的cookie的值
                    pass = cookie.getValue();
                }
            }
        }
    %>
    <h1>用户登录</h1>
    <form action="loginServlet" method="POST">
        <%--<%=user%>指的是将获取的cookie值放进输入框内--%>
        <img src="img/login.png"><input type="text" name="username" value="<%=user%>"/><br/><br/>
        <img src="img/password.png"><input type="password" name="password" value="<%=pass%>"/><br/><br/>
        <input type="checkbox" name="rememberme" checked="<%=checked%>"/>记住我
        &nbsp;&nbsp;&nbsp;&nbsp;
        <input type="submit" name="login" value="登录"/>
    </form>
</div>
</body>
</html>

error.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Error</title>
</head>
<body>
<h1 style="color: red">Error:<%=session.getAttribute("error")%>
</h1>
</body>
</html>

success.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%
    System.out.println("jsp" + session.getAttribute("username"));
    System.out.println(session.getAttribute("password"));
    System.out.println(session.getAttribute("age"));
    System.out.println(session.getAttribute("grade"));

%>
<html>
<head>
    <title>登录成功</title>
</head>
<body>
<h1>恭喜你,登录成功!</h1>
<table>
    <tr>
        <th><input type="checkbox" id="checkAll" disabled autocomplete="off"/></th>
        <th>用户名</th>
        <th>密码</th>
        <th>年龄</th>
        <th>级别</th>
    </tr>
    <tr>
        <td><input type="checkbox" id="checkAll1" disabled autocomplete="off"/></td>
        <td><%=session.getAttribute("username").toString()%>
        </td>
        <td><%=session.getAttribute("password").toString()%>
        </td>
        <td><%=session.getAttribute("age").toString()%>
        </td>
        <td><%=session.getAttribute("grade").toString()%>
        </td>
    </tr>
</table>
</body>
</html>

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述