需要使用的 技術 工具:
- idea 2022 開發工具
- MySql 5.6 資料庫工具
- Apache Tomcat 8.5.85 web應用部署工具
主要功能有:
- 用戶登錄
- 用戶注冊
- 展示串列資訊
涉及到的知識:
- Servlet
- JDBC
- 過濾器
先打開資料庫 創建一個資料庫 然后 創建對應的表結構
CREATE TABLE `user` ( `id` int(11) NOT NULL auto_increment, `name` varchar(255) NOT NULL, `pwd` varchar(255) NOT NULL, `sex` varchar(255) NOT NULL, `address` varchar(255) NOT NULL, `info` varchar(255) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8; INSERT INTO `user` VALUES ('1', '123', '123', '女', '北京', '123'); INSERT INTO `user` VALUES ('2', '111, '111', '男', '北京', '123123');
然后打開 idea 創建以下 幾個目錄:
com.filter //過濾器 解決中文字符集亂碼
com.util //資料庫連接工具類
com.entity //物體類
com.dao //資料操作類
com.servlet //servlet類

在filter下新建一個EncodingFilter用來解決中文字符集亂碼,需要實作Filter介面,并且重寫doFilter函式
package com.filter; import java.io.IOException; import javax.servlet.Filter; import javax.servlet.FilterChain; import javax.servlet.FilterConfig; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; public class EncodingFilter implements Filter{ public EncodingFilter(){ System.out.println("過濾器構造"); } public void destroy() { System.out.println("過濾器銷毀"); } public void doFilter(ServletRequest request, ServletResponse response,FilterChain chain) throws IOException, ServletException { request.setCharacterEncoding("utf-8"); //將編碼改為utf-8 response.setContentType("text/html;charset=utf-8"); chain.doFilter(request, response); } public void init(FilterConfig arg0) throws ServletException { System.out.println("過濾器初始化"); } }
然后到web.xml下進行對EncodingFilter相應的 xml配置
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd" version="4.0"> <!-- 設定編碼格式 --> <filter> <filter-name>EncodingFilter</filter-name> <filter-class>com.filter.EncodingFilter</filter-class><!--全路徑 從根包開始一直到類名--> </filter> <filter-mapping> <filter-name>EncodingFilter</filter-name> <url-pattern>/*</url-pattern> <!--* 為過濾所有--> </filter-mapping> <!-- 設定首頁為登錄頁 首頁從默認的 index.jsp 換成 login.jsp --> <welcome-file-list> <welcome-file>login.jsp</welcome-file> </welcome-file-list> </web-app>
在util下新建一個DBconn類用來處理對資料庫的連接操作(用戶名和密碼需要對照自己的資料庫進行更改)
package com.util; import java.sql.*; public class DBConnection { //定義連接資料庫的屬性 private static String JDBC_DRIVER = "com.mysql.jdbc.Driver"; private static String url = "jdbc:mysql://localhost:3306/demo"; // 用戶 密碼 private static String username = "root"; private static String pwd = "123456"; private static Connection conn = null; static ResultSet rs = null; static PreparedStatement ps =null; public static void init(){ try { Class.forName(JDBC_DRIVER); conn = DriverManager.getConnection(url,username,pwd); } catch (Exception e) { System.out.println("init [SQL驅動程式初始化失敗!]"); e.printStackTrace(); } } public static int addUpdDel(String sql){ int i = 0; try { PreparedStatement ps = conn.prepareStatement(sql); i = ps.executeUpdate(); } catch (SQLException e) { System.out.println("資料庫增刪改例外"); e.printStackTrace(); } return i; } public static ResultSet selectSql(String sql){ try { ps = conn.prepareStatement(sql); rs = ps.executeQuery(sql); } catch (SQLException e) { System.out.println("資料庫查詢例外"); e.printStackTrace(); } return rs; } public static void closeConn(){ try { conn.close(); } catch (SQLException e) { System.out.println("資料庫關閉例外"); e.printStackTrace(); } } }
在entity下新建一個User物體類 對應資料庫中的每個欄位
package com.entity; public class User { private int id; private String name; private String pwd; private String sex; private String address; private String info; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getPwd() { return pwd; } public void setPwd(String pwd) { this.pwd = pwd; } 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; } public String getInfo() { return info; } public void setInfo(String info) { this.info = info; } }
在dao下新建一個UserDao介面 以及對應的方法實作類 規范開發 需要使用 介面及實作類
UserDao.java
package com.dao; import com.entity.User; import java.util.List; public interface UserDao { public boolean login(String name,String pwd);//登錄 public boolean register(User user);//注冊 public List<User> getUserAll();//回傳用戶資訊集合 public boolean delete(int id) ;//根據id洗掉用戶 public boolean update(int id,String name, String pwd,String sex, String home,String info) ;//更新用戶資訊 }
在寫一個 UserDaoImpl.java 實作UserDao介面,及未實作的方法
package com.dao; import com.entity.User; import com.util.DBConnection; import java.sql.ResultSet; import java.sql.SQLException; import java.util.ArrayList; import java.util.List; public class UserDaoImpl implements UserDao { DBConnection DBconn = new DBConnection(); // 注冊用戶 @Override public boolean register(User user) { boolean flag = false; DBconn.init(); int i =DBconn.addUpdDel("insert into user(name,pwd,sex,address,info) " + "values('"+user.getName()+"','"+user.getPwd()+"','"+user.getSex()+"','"+user.getAddress()+"','"+user.getInfo()+"')"); if(i>0){ flag = true; } DBconn.closeConn(); return flag; } // 查詢 登錄用戶是否存在 @Override public boolean login(String name, String pwd) { boolean flag = false; try { DBconn.init(); ResultSet rs = DBconn.selectSql("select * from user where name='"+name+"' and pwd='"+pwd+"'"); while(rs.next()){ if(rs.getString("name").equals(name) && rs.getString("pwd").equals(pwd)){ flag = true; } } DBconn.closeConn(); } catch (SQLException e) { e.printStackTrace(); } return flag; } // 獲取用戶 @Override public List<User> getUserAll() { List<User> list = new ArrayList<User>(); try { DBconn.init(); ResultSet rs = DBconn.selectSql("select * from user"); while(rs.next()){ User user = new User(); user.setId(rs.getInt("id")); user.setName(rs.getString("name")); user.setPwd(rs.getString("pwd")); user.setSex(rs.getString("sex")); user.setAddress(rs.getString("address")); user.setInfo(rs.getString("info")); list.add(user); } DBconn.closeConn(); return list; } catch (SQLException e) { e.printStackTrace(); } return null; } // 更新用戶資料 @Override public boolean update(int id, String name, String pwd, String sex, String home, String info) { boolean flag = false; DBconn.init(); String sql ="update user set name ='"+name +"' , pwd ='"+pwd +"' , sex ='"+sex +"' , home ='"+home +"' , info ='"+info+"' where id = "+id; int i =DBconn.addUpdDel(sql); if(i>0){ flag = true; } DBconn.closeConn(); return flag; } // 洗掉用戶 @Override public boolean delete(int id) { boolean flag = false; DBconn.init(); String sql = "delete from user where id="+id; int i =DBconn.addUpdDel(sql); if(i>0){ flag = true; } DBconn.closeConn(); return flag; } }
在servlet下創建DengluServlet用來實作對用戶登錄的操作 ,實作Servlet具體內容,然后需要去WEB_INF下的web.xml去配置servlet
package com.servlet; import com.dao.UserDao; import com.dao.UserDaoImpl; import javax.servlet.*; import javax.servlet.http.*; import javax.servlet.annotation.*; import java.io.IOException; @WebServlet(name = "signinServlet", value = "https://www.cnblogs.com/signinServlet") public class Signin extends HttpServlet { // serverlet 需要繼承 HttpServerlet 并重寫doGet和doPost方法 @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doPost(request, response); //將資訊使用doPost方法執行 對應jsp頁面中的form表單中的method } @Override protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String name = request.getParameter("name"); //得到jsp頁面傳過來的引數 String pwd = request.getParameter("pwd"); UserDao ud = new UserDaoImpl(); if(ud.login(name, pwd)){ request.setAttribute("xiaoxi", "歡迎用戶"+name); //向request域中放置資訊 request.getRequestDispatcher("/success.jsp").forward(request, response);//轉發到成功頁面 }else{ response.sendRedirect("index.jsp"); //重定向到首頁 } } }
兩點要注意的地方:
一:getParameter與getAttribute兩者的區別
request.setAttribute("xiaoxi", "歡迎用戶"+name);//向request域中放置資訊 ( 鍵值對的形式) 名字為xiaoxi 內容為"歡迎用戶"+name
request.getAttribute("xiaoxi");//得到request域中放置名字為xiaoxi的資訊
request.getParameter("name");//得到request域的引數資訊(得到jsp頁面傳過來的引數)
getAttribute表示從request范圍取得設定的屬性,必須要先setAttribute設定屬性,才能通過getAttribute來取得,設定與取得的為Object物件型別 ,
getParameter表示接收引數,引數為頁面提交的引數,包括:表單提交的引數、URL重寫(就是xxx?id=1中的id)傳的引數等,因此這個并沒有設定引數的方法(沒有setParameter),而且接收引數回傳的不是Object,而是String型別
二:轉發與重定向的區別
(1).重定向的執行程序:Web服務器向瀏覽器發送一個http回應--》瀏覽器接受此回應后再發送一個新的http請求到服務器--》服務器根據此請求尋找資源并發送給瀏覽器,它可以重定向到任意URL,不能共享request范圍內的資料,
(2).重定向是在客戶端發揮作用,通過新的地址實作頁面轉向,
(3).重定向是通過瀏覽器重新請求地址,在地址欄中可以顯示轉向后的地址,
(4).轉發程序:Web服務器呼叫內部方法在容器內部完成請求和轉發動作--》將目標資源發送給瀏覽器,它只能在同一個Web應用中使用,可以共享request范圍內的資料,
(5).轉發是在服務器端發揮作用,通過forward()方法將提交資訊在多個頁面間進行傳遞,
(6).轉發是在服務器內部控制權的轉移,客戶端瀏覽器的地址欄不會顯示出轉向后的地址,
在servlet下創建一個ZhuceServlet用來實作用戶注冊的操作
package com.servlet; import com.dao.UserDao; import com.dao.UserDaoImpl; import com.entity.User; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; @WebServlet(name = "LogonServlet", value = "https://www.cnblogs.com/LogonServlet") public class Logon extends HttpServlet{ @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { super.doGet(req, resp); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { String name = req.getParameter("name"); //獲取jsp頁面傳過來的引數 String pwd = req.getParameter("pwd"); String sex = req.getParameter("sex"); String address = req.getParameter("address"); String info = req.getParameter("info"); User user = new User(); //實體化一個物件,組裝屬性 user.setName(name); user.setPwd(pwd); user.setSex(sex); user.setAddress(address); user.setInfo(info); UserDao ud = new UserDaoImpl(); if( ud.register(user) ){ req.setAttribute("username", name); //向req域中放置引數 req.setAttribute("xiaoxi", "注冊成功"); req.getRequestDispatcher("/login.jsp").forward(req, resp); //轉發到登錄頁面 }else{ resp.sendRedirect("login.jsp");//重定向到首頁 } } }
在servlet下創建SearchallServlet用來回傳資料庫中所有用戶資訊 Searchall.java
package com.servlet; import com.dao.UserDao; import com.dao.UserDaoImpl; import com.entity.User; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.util.List; @WebServlet(name = "SearchallServlet", value = "https://www.cnblogs.com/SearchallServlet") public class Searchall extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { super.doGet(req, resp); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { UserDao ud = new UserDaoImpl(); List<User> userAll = ud.getUserAll(); req.setAttribute("userAll", userAll); req.getRequestDispatcher("/showall.jsp").forward(req, resp); } }
在servlet下創建DeleteServlet用來洗掉用戶操作 DeleteServlet.java
package com.servlet; import com.dao.UserDao; import com.dao.UserDaoImpl; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; @WebServlet(name = "DeleteServlet", value = "https://www.cnblogs.com/DeleteServlet") public class Delete extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { super.doGet(req, resp); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { String id = req.getParameter("id"); int userId = Integer.parseInt(id); UserDao ud = new UserDaoImpl(); if(ud.delete(userId)){ req.setAttribute("xiaoxi", "洗掉成功"); req.getRequestDispatcher("/Searchall").forward(req, resp); }else{ resp.sendRedirect("index.jsp"); } } }
在servlet下創建UpdateServlet操作用來更新用戶資訊 UpdateServlet.java
package com.servlet; import com.dao.UserDao; import com.dao.UserDaoImpl; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; @WebServlet(name = "UpdateServlet", value = "https://www.cnblogs.com/UpdateServlet") public class Update extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { super.doGet(req, resp); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { String id = req.getParameter("id"); int userId = Integer.parseInt(id); String name = req.getParameter("name"); String pwd = req.getParameter("pwd"); String sex = req.getParameter("sex"); String home = req.getParameter("home"); String info = req.getParameter("info"); System.out.println("------------------------------------"+userId); UserDao ud = new UserDaoImpl(); if(ud.update(userId, name, pwd, sex, home, info)){ req.setAttribute("xiaoxi", "更新成功"); req.getRequestDispatcher("/Searchall").forward(req, resp); }else{ resp.sendRedirect("index.jsp"); } } }
配置servlet
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd" version="4.0"> <!-- 設定編碼格式 --> <filter> <filter-name>EncodingFilter</filter-name> <filter-class>com.filter.EncodingFilter</filter-class><!--全路徑 從根包開始一直到類名--> </filter> <filter-mapping> <filter-name>EncodingFilter</filter-name> <url-pattern>/*</url-pattern> <!--* 為過濾所有--> </filter-mapping> <servlet><!--servlet類路徑配置--> <servlet-name>LogonServlet</servlet-name> <servlet-class>com.servlet.Logon</servlet-class> </servlet> <servlet> <servlet-name>SigninServlet</servlet-name> <servlet-class>com.servlet.Signin</servlet-class> </servlet> <servlet> <servlet-name>SearchallServlet</servlet-name> <servlet-class>com.servlet.Searchall</servlet-class> </servlet> <servlet> <servlet-name>DeleteServlet</servlet-name> <servlet-class>com.servlet.Delete</servlet-class> </servlet> <servlet> <servlet-name>UpdateServlet</servlet-name> <servlet-class>com.servlet.Update</servlet-class> </servlet> <!--配置Servlet 類--> <servlet-mapping> <servlet-name>LogonServlet</servlet-name> <url-pattern>/LogonServlet</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>SigninServlet</servlet-name> <url-pattern>/SigninServlet</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>SearchallServlet</servlet-name> <url-pattern>/SearchallServlet</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>DeleteServlet</servlet-name> <url-pattern>/DeleteServlet</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>UpdateServlet</servlet-name> <url-pattern>/UpdateServlet</url-pattern> </servlet-mapping> <!-- 設定首頁為登錄頁 --> <welcome-file-list> <welcome-file>login.jsp</welcome-file> </welcome-file-list> </web-app>
新建jsp頁面 login
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>登錄頁</title>
</head>
<body>
<form action="SigninServlet" method="post">
用戶名:<input type="text" name="name"value=""><br><br>
密碼: <input type="password" name="pwd"value=""><br><br>
<input type="submit"value="https://www.cnblogs.com/xiaoxiblog/archive/2023/03/05/登錄"name="denglu"><input type="reset"value="https://www.cnblogs.com/xiaoxiblog/archive/2023/03/05/重置"><br>
</form>
<form action="zhuce.jsp">
<input type="submit"value="https://www.cnblogs.com/xiaoxiblog/archive/2023/03/05/新用戶注冊">
</form>
</body>
</html>
zhuce.jsp 用戶注冊頁面
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; %> <html> <head> <title>My JSP 'BB.jsp' starting page</title> </head> <body > <form action="LogonServlet"method="post" style="padding-top:-700px;"> 輸入用戶名:<input name="name" type="text"><br><br> 輸入密碼:<input name="pwd" type="password"><br><br> 選擇性別:<input type="radio"name="sex"value="男"checked>男 <input type="radio"name="sex"value="女">女<br><br> 選擇家鄉: <select name="address"> <option value="上海">上海</option> <option value="北京" selected>北京</option> <option value="紐約">紐約</option> </select><br> 填寫個人資訊:<br> <textarea name="info" row="5"cols="30"></textarea><br> <input type="reset"value="重置"><input type="submit"value="注冊"> </form> </body> </html>
失敗頁面 index.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title></title> </head> <body> <p>失敗</p> </body> </html>
success.jsp 成功頁面
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>My JSP 'success.jsp' starting page</title> </head> <body> ${xiaoxi} <br> <a href="showall.jsp">查看所有用戶</a> </body> </html>
完成以上作業就可以 運行 Tomcat服務,然后運行啦
本博文參考大佬 http://blog.csdn.net/qq_23994787/article/details/73612870
本文來自博客園,作者:蕭熙,轉載請注明原文鏈接:https://www.cnblogs.com/xiaoxiblog/p/17180633.html
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/545830.html
標籤:其他
下一篇:三天吃透Java基礎八股文
