程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> JSP編程 >> 關於JSP >> JSP+Servlet制作Java Web登錄功能的全流程解析

JSP+Servlet制作Java Web登錄功能的全流程解析

編輯:關於JSP

0.新建web項目
首先,在MyEclipse裡新建java web項目,項目名為login。此時,項目中包含一個src文件夾和一個WebRoot文件夾,以及Java Web自帶的JRE庫文件夾和J2EE庫文件夾。其中,在WebRoot文件夾下,包含了WEB-INF文件夾和一個index.jsp頁面文件。
接下來,新建一個JSP頁面,命名為login.jsp。
項目文件的結構如下:

2016525171501569.jpg (203×184)

1.設計login.jsp頁面
打開login.jsp頁面後,修改第一行的代碼為pageEncoding="utf-8",防止頁面中文出現亂碼。接下來在body部分定義form表單,用於用戶輸入用戶名和密碼。頁面代碼如下:

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> 
<% 
String path = request.getContextPath(); 
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; 
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> 
<html> 
 <head>
 <base href="<%=basePath%>">
 <title>登陸頁面</title> 
 </head>

 <body>
 <form action="login" method="post">
 用戶名:<input name="username" type="text" /><br/>
 密碼:<input name="password" type="password" /><br/>
 <input type="submit" value="提交" />
 </form>
 </body>
</html> 

2.新建servlet文件
接下來,在MyEclipse中新建一個loginServlet.java,並定義在包文件夾a下(包名自己決定)。文件夾目錄如下:

2016525171642557.jpg (176×63)

雙擊,打開loginServlet.java文件,在doPost方法內,通過request.getParameter()方法獲取login頁面的username和password,並通過response.sendRedirect()方法跳轉到index.jsp頁面。頁面代碼如下:

package a; 
import java.io.IOException; 
import javax.servlet.ServletConfig; 
import javax.servlet.ServletException; 
import javax.servlet.ServletRequest; 
import javax.servlet.ServletResponse; 
import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpServletResponse;

public class loginServlet implements javax.servlet.Servlet{ 
 public void doPost(HttpServletRequest request,HttpServletResponse response)
 throws ServletException,IOException{
 String userName = request.getParameter("username");//取得用戶名
 String password = request.getParameter("password");//取得密碼
 response.sendRedirect("index.jsp");
 }

 public void destroy() { 
 }

 public ServletConfig getServletConfig() {
  return null;
 }

 public String getServletInfo() {
  return null;
 }

 public void init(ServletConfig arg0) throws ServletException {  
 }

 public void service(ServletRequest request, ServletResponse response)
   throws ServletException, IOException {
  HttpServletRequest rq = (HttpServletRequest)request;
  HttpServletResponse rs = (HttpServletResponse) response;
  doPost(rq,rs);

 }
}

3.配置servlet
打開WEB-INF文件夾下的web.xml文件,通過設置這個網站的首頁為login.jsp。接下來配置servlet。頁面代碼如下:

<?xml version="1.0" encoding="UTF-8"?> 
<web-app version="2.5" 
 xmlns="http://java.sun.com/xml/ns/javaee" 
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
 xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
 http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
 <servlet>
<servlet-name>LoginServlet</servlet-name> 
<servlet-class>a.loginServlet</servlet-class> 
</servlet> 
 <servlet-mapping>
<servlet-name>LoginServlet</servlet-name> 
<url-pattern>/login</url-pattern> 
</servlet-mapping> 
 <welcome-file-list>
 <welcome-file>login.jsp</welcome-file>
 </welcome-file-list>
</web-app> 

 
4.測試頁面
最後看看運行效果,選擇運行,選擇某個版本的tomcat啟動。頁面效果如下:

2016525171740590.jpg (238×126)

2016525171806832.jpg (251×71)

5.配置數據源
(1)創建數據庫
打開mysql數據庫,新建數據庫,此處命名為login數據庫,在數據庫中創建表login,並且設置username和password字段。數據庫的設計表如下:

2016525171824608.jpg (502×132)

上圖中的id作為主鍵,使得數據庫的表至少符合第二范式的要求,其中username和password字段是login表內獨有的字段,因此此表符合第三范式的要求。
接下來在login表中填入數據,此例的數據如下:

2016525172109682.jpg (477×48)

(2)連接數據庫
在MyEclipse中連接數據庫,此處采用加載JDBC驅動的方法連接數據庫。首先下載mysql的驅動,接下來需要導入mysql的jar包到我們的項目中來,在包資源管理器中右鍵JRE系統庫,選擇構造路徑-配置構建路徑選項卡,彈出的Java構建路徑選項卡中,通過添加外部JAR(X)按鈕加載mysql.jar文件。
  接下來,在項目中新建DBUtil.java文件,用於連接mysql數據庫。此處略去連接數據庫的原理,DBUtil.java文件的源代碼如下,請更改源代碼中的數據庫名稱和連入mysql的用戶名密碼等信息:

package a; 
import java.sql.*;

public class DBUtil { 
 boolean bInited = false;
 //加載驅動
 public void initJDBC() throws ClassNotFoundException {
 //加載MYSQL JDBC驅動程序
 Class.forName("com.mysql.jdbc.Driver");
 bInited = true;
 System.out.println("Success loading Mysql Driver!");
 }

 public Connection getConnection() throws ClassNotFoundException,
 SQLException{
 if(!bInited){
 initJDBC();
 }
 //連接URL為 jdbc:mysql//服務器地址/數據庫名
 //後面的2個參數分別是登陸用戶名和密碼
 Connection conn = DriverManager.getConnection(
 "jdbc:mysql://localhost:3306/數據庫名","用戶名","密碼");
 return conn;
 }


 public boolean loginSuccess(String userName,String password){
 boolean returnValue = false;
 String sql = "SELECT * FROM login";
 Connection conn = null;
 Statement stmt = null;
 ResultSet rs = null;

 try{
 conn = getConnection();
 stmt = conn.createStatement();
 rs = stmt.executeQuery(sql);
 while(rs.next()){
 String userNameInDB = rs.getString("username");
 String passwordInDB = rs.getString("password");
 if(userNameInDB.equals(userName) &&
 passwordInDB.equals(password)){
 returnValue = true;
 break;
 }
 }
 }catch (ClassNotFoundException e) {
 e.printStackTrace();
 }catch (SQLException e) {
 e.printStackTrace();
 }

 return returnValue;

 }
}

  上文中loginSuccess()方法內,用於在數據庫中查找用戶名和密碼與傳入參數username、password匹配的情況。一旦找到,則返回true結果。

(3)修改Servlet業務邏輯
修改loginServlet.java文件的業務邏輯,在其中加入連接數據庫的語句。其中,主要的頁面跳轉邏輯寫著了doPost()方法內,修改後的doPost()方法如下:

public void doPost(HttpServletRequest request,HttpServletResponse response) 
 throws ServletException,IOException{
 String userName = request.getParameter("username");//取得用戶名
 String password = request.getParameter("password");//取得密碼
 DBUtil db = new DBUtil();//構建數據庫對象
 boolean canLogin = db.loginSuccess(userName, password);
 if(canLogin){//根據登陸情況,跳轉頁面
 response.sendRedirect("index.jsp");
 }else{
 response.sendRedirect("login.jsp");
 }
 }

(4)測試頁面
調試後的頁面效果如下:

2016525171929132.jpg (235×120)

2016525172156822.jpg (249×64)

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved