mail,但我自己写的时候写成了
tail,然后快写完才发现,所以这里就假装tail是
mail吧。
这边是从前端往后端的方式开发。
首先我们创建一个index.jsp文件,然后在里面编写登录页面的代码:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
welcome
页面效果图:

写SQL把用户名和密码模拟出来:
drop table if exists user;create table user(id int primary key auto_increment,username varchar(255),password varchar(255)
);insert into user(username,password) values('admin','admin');
insert into user(username,password) values('zhangsan','258');
insert into user(username,password) values('xmq','369');
写SQL把用户的通讯录模拟出来:
drop table if exists tail;create table tail(id int primary key auto_increment,name varchar(255),password varchar(255),phone varchar(255),address varchar(255)
);insert into tail(name,password,phone,address) values("xmq","123","13979463154","beijing");
insert into tail(name,password,phone,address) values("zhangsan","654","13979658754","nanjing");
insert into tail(name,password,phone,address) values("lisi","156","13974873154","tianjing");
以下是得到的通讯录(当然可以通过外键让每个用户拥有不同的通讯录,但这里为了方便让每个用户都使用同一个通讯录):
接下来创建一个JDBC工具类,方便操作:
package javaweb.tail.util;import java.sql.*;
import java.util.ResourceBundle;public class DBUtil {private static ResourceBundle bundle = ResourceBundle.getBundle("jdbc");private static String driver = bundle.getString("driver");private static String url = bundle.getString("url");private static String name = bundle.getString("name");private static String password = bundle.getString("password");static {try {Class.forName(driver);} catch (ClassNotFoundException e) {throw new RuntimeException(e);}}/*** 返回连接数据库对象** @return* @throws SQLException*/public static Connection getConnection() throws SQLException {return DriverManager.getConnection(url, name, password);}/*** 关闭所用的资源** @param conn* @param sta* @param rs*/public static void close(Connection conn, Statement sta, ResultSet rs) {if (rs != null) {try {rs.close();} catch (SQLException e) {throw new RuntimeException(e);}}if (sta != null) {try {sta.close();} catch (SQLException e) {throw new RuntimeException(e);}}if (conn != null) {try {conn.close();} catch (SQLException e) {throw new RuntimeException(e);}}}
}
配置文件中的属性可以自行设置;
如果正确的话跳转到“我的通讯录”页面,如果失败的话就提示“重新登录,请返回”:
所以我们得创建一个Servlet,如果登录成功需要跳转到我的通讯录的话,就得存取数据,然后利用request进行转发显示到页面上:
package javaweb.tail;import jakarta.servlet.ServletException;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import javaweb.tail.util.DBUtil;import java.io.IOException;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;@WebServlet("/user/login")
public class UserServlet extends HttpServlet {/*** 使用模板方法模式实现登录和退出检验* @param request* @param response* @throws ServletException* @throws IOException*/@Overrideprotected void service(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {String servletPath = request.getServletPath();if("/user/login".equals(servletPath)){doLogin(request,response);}}private void doLogin(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException{String username = request.getParameter("username");String password = request.getParameter("password");Connection conn = null;PreparedStatement ps = null;ResultSet rs = null;//设置一个标志变量,判断是否登录成功boolean flag = false;try{conn = DBUtil.getConnection();String sql = "select * from user where username=? and password=?";ps = conn.prepareStatement(sql);ps.setString(1,username);ps.setString(2,password);rs = ps.executeQuery();if(rs.next()){flag = true;}}catch(SQLException e){e.getClass().getName();}finally{DBUtil.close(conn,ps,rs);}if(flag){// 登录成功跳转到“我的通讯录”页面response.sendRedirect(request.getContextPath()+"/mytail.jsp");}else{// 登录失败,请重新登录response.sendRedirect(request.getContextPath() + "/error.jsp");}}
}

这里的error.jsp代码:
<%@ page contentType='text/html;charset=UTF-8' language='java' %>
error
登录失败,请/index.jsp'>返回
登录成功效果展示:

登录失败效果展示:

这里重新定义一个欢迎页面,写一个servlet判断浮现在浏览器的首个页面,如果cookie存在且符合,那么直接跳转到我的通讯录,如果不符合且没有就跳转到登录页面为欢迎页面。
在web.xml先部署一波:

在何时创建cookie呢?
在首次登录成功且选择了保存的UserServlet里,因为创建成功才有的保存:

下面是判断首页面的代码:
package javaweb.tail;import jakarta.servlet.ServletException;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.*;
import javaweb.tail.util.DBUtil;import java.io.IOException;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;@WebServlet("/welcome")
public class WelcomeServlet extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {String username = null;String password = null;// 获取Cookie对象集Cookie[] cookies = request.getCookies();if(cookies!=null){for(Cookie cookie:cookies){if(cookie.getName().equals("username")){username = cookie.getValue();}else if(cookie.getName().equals("password")){password = cookie.getValue();}}}// 如果存在判断用户名和密码是否正确,错误则直接返回到登录页面if(username!=null&&password!=null){Connection conn = null;PreparedStatement ps =null;ResultSet rs = null;boolean flag = false;try{conn = DBUtil.getConnection();String sql = "select * from user where password=? and username=?";ps = conn.prepareStatement(sql);ps.setString(1,password);ps.setString(2,username);rs = ps.executeQuery();if(rs.next()){flag = true;}}catch (SQLException e){e.printStackTrace();}finally {DBUtil.close(conn,ps,rs);}if(flag){//这里登录成功也要建一下session会话对象//因为session对象浏览器关了就找不着了,而cookie是还在的HttpSession session = request.getSession();session.setAttribute("username",username);response.sendRedirect(request.getContextPath() + "/mytail.jsp");}else {response.sendRedirect(request.getContextPath() + "/index.jsp");}}else{response.sendRedirect(request.getContextPath() + "/index.jsp");}}
}
测验一波:
测验最后的结果是点击了保存后,关闭浏览器直接输入登录网址直接跳转到我的通讯录页面!
首先创建一个JavaBean用来表示一个通讯录里人,将数据保存在请求域中,通过转发来实现数据的转移,然后在list.jsp中显示出数据。

这里也是JDBC代码,区别就是建立了一个容器,然后放到请求域转发到要显示数据的.jsp中显示出来,以下是tail.jsp的代码,用来以列表形式显示:
<%@ page import='bean.Tail' %>
<%@ page import='java.util.List' %>
<%@ page contentType='text/html;charset=UTF-8' language='java' %>
tail
Mail Page
Username Password Phone Address Other Operation <%List tails = (List)request.getAttribute("tails");for(Tail tail:tails){String username = tail.getUsername();String password = tail.getPassword();String phone = tail.getPhone();String address = tail.getAddress();%><%=username%> <%=password%> <%=phone%> <%=address%> a b c <%}%>
添加通讯录
效果展示:

增删改功能这里就不详写代码了,大概就是Servlet就jsp之间的转换,多次使用JDBC,Servlet用来操作数据,jsp用来显示数据!他们显示数据都是显示表格,也就是都跳转到**/tail/list**就可以了
效果图:

八、实现退出功能

然后跳转到登录页面即可!
具体代码的话需要可以去我的gitee获取就行;
CRUD
上一篇:读后感评语怎么写小学
下一篇:编译器设计(十一)——标量优化