JavaWeb登陸功能實(shí)現(xiàn)代碼
本文實(shí)例為大家分享了JavaWeb登陸功能的方法,供大家參考,具體內(nèi)容如下
首先我們要JavaWeb登陸的基本流程:JSP頁(yè)面發(fā)送請(qǐng)求——>Servlet——>Servlet通過(guò)調(diào)用方法從數(shù)據(jù)庫(kù)中得到數(shù)據(jù)并將結(jié)果返回頁(yè)面。
我們先建立三個(gè)jsp頁(yè)面,包括login.jsp(登陸頁(yè)面)、index.jsp(顯示登陸成功后的信息)、error.jsp(登錄失敗的頁(yè)面),其中后兩個(gè)頁(yè)面的內(nèi)容可以隨意寫(xiě),而login.jsp頁(yè)面的主要內(nèi)容如下:
<form action="LoginServlet" method="post"> 用戶(hù)名:<input type="text" name="userName"/> 密碼:<input type="password" name="password"/> <input type="submit" value="提交"/> </form>
在login.jsp文件的開(kāi)頭我們需要將pageEncoding="ISO-8859-1"改為pageEncoding="utf-8"(同時(shí)不要忘記設(shè)置開(kāi)發(fā)工具的編碼格式,不然jsp頁(yè)面會(huì)顯示亂碼)
根據(jù)用戶(hù)名和密碼兩個(gè)屬性我們建立相應(yīng)的實(shí)體類(lèi),并添加get和set方法,代碼如下:
public class User {
private String userName;
private String password;
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;
}
}
而jsp頁(yè)面中的action=“LoginServlet”是指將請(qǐng)求發(fā)送到Servlet處理。接下來(lái)我們轉(zhuǎn)到Servlet來(lái)進(jìn)行處理:
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.test.dao.UserDao;
//創(chuàng)建時(shí)為Servlet而不是Class,需要在web.xml中進(jìn)行配置,配置的代碼Myeclipse將自動(dòng)生成
public class LoginServlet extends HttpServlet {
//創(chuàng)建UserDao的對(duì)象,以便于查詢(xún)數(shù)據(jù)庫(kù)
UserDao userDao=new UserDao();
//以下doGet方法和doPost方法分別對(duì)應(yīng)form表單中的method="get"和method="post"
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//利用getParameter方法獲取到前臺(tái)文本框中輸入的值,其中括號(hào)內(nèi)的內(nèi)容為<input/>標(biāo)簽中的name屬性
String userName=request.getParameter("userName");
String password=request.getParameter("password");
//調(diào)用UserDao中的getSelect方法并獲取到返回值
boolean flag=userDao.getSelect(userName, password);
//若用戶(hù)名和密碼存在則轉(zhuǎn)發(fā)到index.jsp頁(yè)面,否則重定向到error.jsp頁(yè)面
if (flag) {
request.getRequestDispatcher("index.jsp").forward(request, response);
}
else
response.sendRedirect("error.jsp");
}
}
注釋 中已經(jīng)說(shuō)的很明白了,就不再重復(fù)了,可以看看第26行和29行,其中26行是轉(zhuǎn)發(fā),29行是重定向,感興趣的小伙伴可以查查兩者的區(qū)別。剩下的一部分就是我們之前提到過(guò)的關(guān)于數(shù)據(jù)庫(kù)的查詢(xún)操作了,我們?cè)?3行進(jìn)行了調(diào)用,下面我們完成調(diào)用的方法:
package com.test.dao;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
public class UserDao {
//連接數(shù)據(jù)庫(kù)的代碼
public Connection getCon() {
//數(shù)據(jù)庫(kù)連接名稱(chēng)
String username="root";
//數(shù)據(jù)庫(kù)連接密碼
String password="";
String driver="com.mysql.jdbc.Driver";
//其中test為數(shù)據(jù)庫(kù)名稱(chēng)
String url="jdbc:mysql://localhost:3306/test";
Connection conn=null;
try{
Class.forName(driver);
conn=(Connection) DriverManager.getConnection(url,username,password);
}catch(Exception e){
e.printStackTrace();
}
return conn;
}
//進(jìn)行查詢(xún)的方法,若含有滿(mǎn)足條件的數(shù)據(jù)則返回true
public boolean getSelect(String userName,String password) {
boolean flag=false;
String sql = "select * from user where userName='"+userName+"' and password='"+password+"'";
Connection conn = getCon();
PreparedStatement pst = null;
try {
pst = (PreparedStatement) conn.prepareStatement(sql);
ResultSet rs = pst.executeQuery();
if (rs.next()) {
flag=true;
}
} catch (Exception e) {
}
return flag;
}
}
在這個(gè)方法中我們首先連接數(shù)據(jù)庫(kù),然后在查詢(xún)的方法中傳入從jsp頁(yè)面獲取到的userName和password,判斷數(shù)據(jù)庫(kù)中是否存在此用戶(hù)名和密碼的用戶(hù),如果存在則返回true,否則返回false(不要忘記導(dǎo)入數(shù)據(jù)庫(kù)鏈接的包)。
至于數(shù)據(jù)庫(kù)中的字段則參照實(shí)體類(lèi)User建立即可,即包含userName和password兩個(gè)屬性,如果數(shù)據(jù)庫(kù)鏈接還有問(wèn)題的請(qǐng)參照之前的關(guān)于數(shù)據(jù)庫(kù)部分的隨筆。
最后看一下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_3_0.xsd" id="WebApp_ID" version="3.0"> <servlet> <servlet-name>LoginServlet</servlet-name> <servlet-class>com.test.servlet.LoginServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>LoginServlet</servlet-name> <url-pattern>/LoginServlet</url-pattern> </servlet-mapping> </web-app>
其中<servlet>中的<servlet-name>可以隨意寫(xiě),只需要保證上下兩部分相同即可。
然后是<servlet-class>是自己定義的Servlet的路徑(包含包名),最后是<url-pattern>,里面的內(nèi)容也可以隨意寫(xiě),但是jsp頁(yè)面中form表單的action屬性必須與此名稱(chēng)相同(action中不包含"/")
最后我們需要將web項(xiàng)目發(fā)布到tomcat中然后在瀏覽器輸入:http://localhost:8080/項(xiàng)目名稱(chēng)/login.jsp就可以進(jìn)行訪問(wèn)并登陸了。
這只是一個(gè)簡(jiǎn)單的應(yīng)用,目的是為了幫助各位小伙伴了解jsp+servlet開(kāi)發(fā)的基本流程,當(dāng)然我們?cè)趯?shí)際開(kāi)發(fā)的過(guò)程中會(huì)進(jìn)行更為精細(xì)的分割,包括接口,實(shí)現(xiàn)類(lèi)等。
相關(guān)文章
java 并發(fā)編程之共享變量的實(shí)現(xiàn)方法
這篇文章主要介紹了java 并發(fā)編程之共享變量的實(shí)現(xiàn)方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-09-09
Javamail使用過(guò)程中常見(jiàn)問(wèn)題解決方案
這篇文章主要介紹了Javamail使用過(guò)程中常見(jiàn)問(wèn)題解決方案,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-08-08
Java數(shù)據(jù)庫(kù)連接池之c3p0簡(jiǎn)介_(kāi)動(dòng)力節(jié)點(diǎn)Java學(xué)院整理
這篇文章主要為大家詳細(xì)介紹了Java數(shù)據(jù)庫(kù)連接池之c3p0簡(jiǎn)介的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-08-08
Springboot實(shí)現(xiàn)動(dòng)態(tài)定時(shí)任務(wù)管理的示例代碼
最近在做spring boot項(xiàng)目開(kāi)發(fā)中,由于使用@EnableScheduling注解和@Scheduled注解來(lái)實(shí)現(xiàn)的定時(shí)任務(wù),只能靜態(tài)的創(chuàng)建定時(shí)任務(wù),不能動(dòng)態(tài)修改、添加、刪除、啟/停任務(wù),下面通過(guò)本文給大家介紹Springboot實(shí)現(xiàn)動(dòng)態(tài)定時(shí)任務(wù)管理的方法,感興趣的朋友跟隨小編一起看看吧2023-07-07
Java客戶(hù)端利用Jedis操作redis緩存示例代碼
Jedis是Redis官方推薦的用于訪問(wèn)Java客戶(hù)端,下面這篇文章主要給大家介紹了關(guān)于Java客戶(hù)端利用Jedis操作redis緩存的相關(guān)資料,文中給出了詳細(xì)的示例代碼,需要的朋友可以參考借鑒,下面來(lái)一起看看吧。2017-07-07

