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;
int pageSize = 3;
int pageNow = 1;
int rowCout = 0;
int pageCout = 0;
Class.forName("com.mysql.jdbc.Driver");
ct = DriverManager.getConnection("jdbc:mysql://localhost:3306/servletsql", "root", "root");
ps = ct.createStatement();
rs = ps.executeQuery("select count (*) from users");
if (rs.next()) {
rowCout = rs.getInt(1);
}
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;
@WebServlet(value = "/loginServlet", name = "LoginServlet")
public class LoginServlet extends HttpServlet {
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
HttpSession session = request.getSession(true);
session.setMaxInactiveInterval(20);
session.setAttribute("username", "password");
Connection ct = null;
Statement sm = 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");
sm = ct.createStatement();
ResultSet rs = sm.executeQuery("select * from users where username='" + username + "'and password='" + password + "'");
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);
}
Cookie nameCookie = new Cookie("name", URLEncoder.encode(username, "utf-8"));
Cookie passwordCookie = new Cookie("password", password);
nameCookie.setPath(request.getContextPath() + "/");
passwordCookie.setPath(request.getContextPath() + "/");
String rememberme = request.getParameter("rememberme");
System.out.println(rememberme);
if (rememberme != null && rememberme.equals("on")) {
nameCookie.setMaxAge(7 * 24 * 60 * 60);
passwordCookie.setMaxAge(7 * 24 * 60 * 60);
} else if (rememberme == null) {
nameCookie.setMaxAge(0);
passwordCookie.setMaxAge(0);
}
response.addCookie(nameCookie);
response.addCookie(passwordCookie);
request.getRequestDispatcher("success.jsp").forward(request, response);
} else {
session.setAttribute("error", "用户名或者密码不正确");
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%>"/>记住我
<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>