WEB网站的注册、登录、验证码
生活随笔
收集整理的這篇文章主要介紹了
WEB网站的注册、登录、验证码
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
項目結構圖
用戶登錄頁面login.jsp代碼
<%@ page language="java" contentType="text/html; UTF-8"pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Insert title here</title> <script type="text/javascript">function changeimg(){document.getElementById("img1").src="/web05/verifycodeservlet?time="+new Date().getTime();//在這個事件觸發(fā)的地址上加時間是因為,瀏覽器加載的圖片會有緩存,瀏覽器會默認加載緩存里的圖片,所以就算點擊之后//圖片也不會有變化,為了不出現這樣的情況,可以在地址后面加一個隨時會變的參數,這樣瀏覽器就會加載新的圖片,}</script> </head> <body> <%String msg="";if(request.getAttribute("msg")!=null){msg=(String)request.getAttribute("msg");}%> <h1>登錄頁面</h1> <h3><font color="red"><%=msg %></font></h3> <form action="/web05/loginservle" method="post"><table border="1" width="500"><tr><td>用戶名</td><td><input type="text" name="username" valuse="${cookie.remember.value}" } /></td></tr><tr><td>密碼</td><td><input type="password" name="password" valuse="${cookie1.password.value}" } /></td></tr><tr><td>驗證碼</td><td><input type="text" name="checkcode" size="6"/><img id="img1" src="/web05/verifycodeservlet"><a href="#" onclick="changeimg()">看不清,換一張</a><!-- 通過事件綁定,來改變驗證碼 --></td></tr><tr><td><input type="checkbox" name="remember"/></td><td>記住用戶名</td></tr><tr><td colspan="2"><input type="submit" value="登錄"/></td></tr></table> </form> </body> </html>登錄成功頁面代碼success.jsp
<%@ page import="com.itheima.Useritl.user" %> <%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Insert title here</title> </head> <body> <% if(request.getSession().getAttribute("existuser")==null){ %> <h1>您還沒有登錄!請先去<a href="/web05/login.jsp">登錄</a>!</h1> <% } else{ %> <h1>用戶登錄成功!</h1> <%user existuser = (user)request.getSession().getAttribute("existuser"); %><h3>您好<%=existuser.getUsername() %></h3> <a href="/web05/logoutservlet">退出登錄</a> <% } %> </body> </html>用戶工具類user.java
package com.itheima.Useritl;public class user {private Integer id;private String username;private String password;private String nickname;private int age;public Integer getId() {return id;}public void setId(Integer id) {this.id = id;}public String getUsername() {return username;}public void setUsername(String username) {this.username = username;}public String getPassword() {return password;}public void setPassword(String password) {this.password = password;}public String getNickname() {return nickname;}public void setNickname(String nickname) {this.nickname = nickname;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}@Overridepublic String toString() {return "user [id=" + id + ", username=" + username + ", password=" + password + ", nickname=" + nickname+ ", age=" + age + "]";} }用戶登錄工具類UserModel.java
package com.itheima.Useritl;import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException;import org.apache.commons.dbutils.QueryRunner; import org.apache.commons.dbutils.handlers.BeanHandler;import com.itheima.DBuitle.JDBCUitel1;public class UserModel {public user login(user use) throws SQLException{if(use!=null) {QueryRunner queryrunner = new QueryRunner(JDBCUitel1.getdatasource());//user rs = queryrunner.query("select * from user where id=?", new BeanHandler<user>(user.class), 2);user existuser = queryrunner.query("select * from user where username=? and password=?", new BeanHandler<user>(user.class), use.getUsername(),use.getPassword());return existuser;}else {return null;}}}用戶登錄servlet代碼loginservle.java
package com.itheima.domain;import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.http.Cookie; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession;import org.apache.commons.dbutils.QueryRunner; import org.apache.commons.dbutils.handlers.BeanHandler;import com.itheima.DBuitle.JDBCUitel1; import com.itheima.Useritl.UserModel; import com.itheima.Useritl.user;/*** Servlet implementation class loginservlet*/ public class loginservle extends HttpServlet {protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {try {request.setCharacterEncoding("UTF-8");String username = request.getParameter("username");String password = request.getParameter("password");String checkcode1 = request.getParameter("checkcode");String checkcode2 = (String) request.getSession().getAttribute("checkcode"); // System.out.println("checkcode1=="+checkcode1+"checkcode2=="+checkcode2);request.getSession().removeAttribute("checkcode");if(!checkcode1.equalsIgnoreCase(checkcode2)) {//一次性驗證碼的校驗,如果驗證碼錯誤,返回錯誤信息,并且回到登錄頁面request.setAttribute("msg", "驗證碼輸入錯誤!");request.getRequestDispatcher("./login.jsp").forward(request, response);return;}//System.out.println("username:"+username+"password:"+password);user use = new user();use.setUsername(username);use.setPassword(password);// System.out.println(use);UserModel usermo = new UserModel();// System.out.println("1");user existuser = usermo.login(use);// System.out.println("11");// System.out.println(existuser);if(existuser ==null) { // 登錄失敗 // 向request域中保存一個信息request.setAttribute("msg", "用戶名或密碼錯誤");//使用請求轉發(fā)進行頁面跳轉,這個時候request和response會一起轉發(fā)過去,就是把所有數據都轉發(fā)過去了,用于在登錄頁面進行錯誤回顯request.getRequestDispatcher("./login.jsp").forward(request, response);}else {//記住用戶名//判斷復選框是否已經勾選// String remember=request.getParameter("remember");String remember = request.getParameter("remember");// System.out.println("remmember=="+remember);if("on".equals(remember)) {Cookie cookie=new Cookie("remember",existuser.getUsername());Cookie cookie1=new Cookie("password",existuser.getPassword());cookie.setPath("/web05");//設置有效路徑cookie.setMaxAge(60*60);//設置有效時間response.addCookie(cookie);//回寫到瀏覽器response.addCookie(cookie1);// System.out.println("設置cookie");}//登錄成功//保存用戶信息:保存到會話當中HttpSession session = request.getSession();//保存數據session.setAttribute("existuser", existuser);//重定向到成功頁面response.sendRedirect("./success.jsp");}}catch(Exception e) {e.printStackTrace();throw new RuntimeException();}}protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {doGet(request, response);}}生成驗證碼的servlet代碼verifycodeservlet.java
package com.itheima.domain;import java.awt.Color; import java.awt.Font; import java.awt.Graphics; import java.awt.image.BufferedImage; import java.io.IOException; import java.util.Random;import javax.imageio.ImageIO; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse;/*** Servlet implementation class verifycodeservlet*/ public class verifycodeservlet extends HttpServlet {protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//禁止瀏覽器緩沖隨機圖片response.setDateHeader("Expires", -1);//防止啟動瀏覽器時取先前緩沖的數據response.setHeader("Cache-Control", "no-cache");response.setHeader("Pragma", "no-cache");//通知客戶機以圖片方式打開發(fā)送過去的數據response.setHeader("Content-Type", "image/jpeg");//在內存中創(chuàng)建一副圖片int width = 60;int height = 30;String data = "ABCDEFGHJKLMNPQRSTUVWXYZ23456789abcdefghijklmnpqrstuvwxyz"; //隨機字符字典,其中0,o,1,I 等難辨別的字符最好不要Random random = new Random();//隨機類//1 創(chuàng)建圖片數據緩存區(qū)域(核心類)BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);//創(chuàng)建一個彩色的圖片//2 獲得畫板(圖片,ps圖層),繪畫對象。Graphics g = image.getGraphics();//3 選擇顏色,畫矩形3,4步是畫一個有內外邊框的效果g.setColor(Color.BLACK);g.fillRect(0, 0, width, height);//4白色矩形g.setColor(Color.WHITE);g.fillRect(1, 1, width-2, height-2);/**1 提供緩存區(qū)域,為了存放4個隨機字符,以便存入session */StringBuilder builder = new StringBuilder();//5 隨機生成4個字符//設置字體顏色g.setFont(new Font("宋體", Font.BOLD&Font.ITALIC, 20));for(int i = 0 ; i < 4 ;i ++){//隨機顏色g.setColor(new Color(random.nextInt(255),random.nextInt(255), random.nextInt(255)));//隨機字符int index = random.nextInt(data.length());String str = data.substring(index, index + 1);/**2 緩存*/builder.append(str);//寫入g.drawString(str, (width / 6) * (i + 1) , 20); }//給圖中繪制噪音點,讓圖片不那么好辨別for(int j=0,n=random.nextInt(100);j<n;j++){g.setColor(Color.RED);g.fillRect(random.nextInt(width),random.nextInt(height),1,1);//隨機噪音點}/**3 獲得隨機數據,并保存session*/String checkcode = builder.toString();// System.out.println(checkcode);request.getSession().setAttribute("checkcode",checkcode);//.. 生成圖片發(fā)送到瀏覽器 --相當于下載ImageIO.write(image, "jpg", response.getOutputStream());}protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {doGet(request, response);}}用戶退出登錄的servlet代碼logoutservlet.java
package com.itheima.domain;import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse;/*** Servlet implementation class logoutservlet*/ public class logoutservlet extends HttpServlet {private static final long serialVersionUID = 1L;/*** @see HttpServlet#HttpServlet()*/public logoutservlet() {super();// TODO Auto-generated constructor stub}/*** @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)*/protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {request.getSession().invalidate();response.sendRedirect("./login.jsp");}/*** @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)*/protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {// TODO Auto-generated method stubdoGet(request, response);}}數據庫連接池代碼JDBCUitel1.java
package com.itheima.DBuitle;import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import java.util.Properties;import javax.sql.DataSource;import org.omg.CORBA.portable.InputStream;import com.alibaba.druid.pool.DruidDataSourceFactory;public class JDBCUitel1 {private static DataSource dataSource=null;//初始化連接池static {//創(chuàng)建連接池Properties properties = new Properties();try {properties.load(new FileInputStream("D:/apache-tomcat-8.5.39/webapps/web05/WEB-INF/classes/druid.properties"));//讀取配置文件,設置參數//Java項目的文件路徑和Javaweb項目的路徑是不同的,通過tomcat的重新配置,文件位置會改變。dataSource = DruidDataSourceFactory.createDataSource(properties);}catch(Exception e) {e.printStackTrace();}}public static Connection getconnection() {Connection conn = null;try {conn = dataSource.getConnection();//獲取連接池中的連接}catch(Exception e) {e.printStackTrace();}return conn;}public static DataSource getdatasource() {return dataSource;}public static void release(Statement stmt,Connection conn) {if(stmt!=null) {try {stmt.close();}catch(SQLException e) {e.printStackTrace();}stmt=null;}if(conn!=null) {try {conn.close();}catch(SQLException e) {e.printStackTrace();}conn=null;}}public static void release(ResultSet rs,Statement stmt,Connection conn) {if(stmt!=null) {try {stmt.close();}catch(SQLException e) {e.printStackTrace();}stmt=null;}if(conn!=null) {try {conn.close();}catch(SQLException e) {e.printStackTrace();}conn=null;}if(rs!=null) {try {rs.close();}catch(SQLException e) {e.printStackTrace();}rs=null;} } }配置文件web.xml
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5"><display-name>web05</display-name><welcome-file-list><welcome-file>index.html</welcome-file><welcome-file>index.htm</welcome-file><welcome-file>index.jsp</welcome-file><welcome-file>default.html</welcome-file><welcome-file>default.htm</welcome-file><welcome-file>default.jsp</welcome-file></welcome-file-list><servlet><description></description><display-name>loginservle</display-name><servlet-name>loginservle</servlet-name><servlet-class>com.itheima.domain.loginservle</servlet-class></servlet><servlet-mapping><servlet-name>loginservle</servlet-name><url-pattern>/loginservle</url-pattern></servlet-mapping><servlet><description></description><display-name>verifycodeservlet</display-name><servlet-name>verifycodeservlet</servlet-name><servlet-class>com.itheima.domain.verifycodeservlet</servlet-class></servlet><servlet-mapping><servlet-name>verifycodeservlet</servlet-name><url-pattern>/verifycodeservlet</url-pattern></servlet-mapping><servlet><description></description><display-name>logoutservlet</display-name><servlet-name>logoutservlet</servlet-name><servlet-class>com.itheima.domain.logoutservlet</servlet-class></servlet><servlet-mapping><servlet-name>logoutservlet</servlet-name><url-pattern>/logoutservlet</url-pattern></servlet-mapping> </web-app>配置文件druid.properties
url=jdbc:mysql://localhost/web_test3?serverTimezone=UTC driverClassName=com.mysql.cj.jdbc.Driver username=root password=123456 filters=stat initialSize=2 maxActive=300 maxWait=60000 timeBetweenEvictionRunsMillis=60000 minEvictableIdleTimeMillis=300000 validationQuery=SELECT 1 testWhileIdle=true testOnBorrow=false testOnReturn=false poolPreparedStatements=false maxPoolPreparedStatementPerConnectionSize=200總結
以上是生活随笔為你收集整理的WEB网站的注册、登录、验证码的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 通信原理与MATLAB(五):FM的调制
- 下一篇: 查看日期和日历