java實(shí)現(xiàn)登錄案例
本文實(shí)例為大家分享了java實(shí)現(xiàn)登錄案例的具體代碼,供大家參考,具體內(nèi)容如下
一、環(huán)境搭建
JDK1.8 + Tomcat1.8
二、目錄結(jié)構(gòu)

三、代碼示例
3.1、fail.html頁面
<!DOCTYPE html> <html> <head> <title>faill.html</title> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> <meta http-equiv="description" content="this is my page"> <meta http-equiv="content-type" content="text/html; charset=UTF-8"> <!--<link rel="stylesheet" type="text/css" href="./styles.css" rel="external nofollow" rel="external nofollow" >--> </head> <body> <font color='red' size='3'>親, 你的用戶名或密碼輸入有誤!請重新輸入!</font> <br /> <a href="/project03/login.html" >返回登錄頁面</a> </body> </html>
3.2、Login.htm頁面
<!DOCTYPE html> <html> <head> <title>Login.html</title> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> <meta http-equiv="description" content="this is my page"> <meta http-equiv="content-type" content="text/html; charset=UTF-8"> <!--<link rel="stylesheet" type="text/css" href="./styles.css" >--> </head> <body> <form action="/project03/LoginServlet" method="post"> 用戶名:<input type="text" name="UserName" /><br /> 密 碼:<input type="password" name="UserPwd" /><br /> <input type="submit" value="登錄" /> </form> </body> </html>
3.3、IndexServlet.java
package cn.itcase.servlet;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
/**
* 用戶主頁邏輯
* */
public class IndexServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// 設(shè)置編碼格式
response.setContentType("text/html;charset=utf-8");// setContentType設(shè)置瀏覽器的編碼格式
// 1.信息輸出至瀏覽器
PrintWriter writer = response.getWriter();
String html = "";
/**
* 接收request域?qū)ο蟮臄?shù)據(jù) String loginName =
* (String)request.getAttribute("loginName",userName);
*
*/
/**
* 在用戶主頁,判斷session對象不為空且存在指定的屬性則登錄成功 才能訪問資源。從session域?qū)ο笾腥〕鰰挃?shù)據(jù)
*
*
* */
// 2.得到session對象
HttpSession session = request.getSession(false);
// 2.1如果不存在session對象,登錄不成功,跳轉(zhuǎn)到登錄頁面
if (session == null) {
response.sendRedirect(request.getContextPath()
+ "/Login.html");
return;
}
// 2.2沒有在session對象域中找到相應(yīng) session唯一標(biāo)識ID 則登錄不成功,跳轉(zhuǎn)到登錄頁面
String loginName = (String) session.getAttribute("loginName");
if (loginName == null) {
response.sendRedirect(request.getContextPath() + "/Login.html");
return;
}
html = "<html><body>歡迎回來," + loginName + ",<a href='"
+ request.getContextPath()
+ "/LogoutServlet'>安全退出</a></body></html>";
writer.write(html);
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
}
3.4、LoginServlet.java
package cn.itcase.servlet;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
/**
* 登錄的邏輯
* 設(shè)置編碼格式
* 根據(jù)參數(shù)名獲取參數(shù)值
* 判斷邏輯(使用session域?qū)ο螅?
*
*
*/
public class LoginServlet extends HttpServlet {
protected void doGet(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
// 設(shè)置編碼格式
request.setCharacterEncoding("utf-8");// setCharacterEncoding設(shè)置服務(wù)器的編碼格式
// 1.根據(jù)參數(shù)名獲取參數(shù)值
String userName = request.getParameter("UserName");
String userPwd = request.getParameter("UserPwd");
// 2.登錄是否的邏輯判斷
if("eric".equals(userName) && "123456".equals(userPwd)){
/**分析使用技術(shù):
* context域?qū)ο螅翰缓线m,可能會覆蓋數(shù)據(jù)
* request.setAttribute("loginName",userName);
*
* request域?qū)ο螅翰缓线m,整個網(wǎng)站必須得使用轉(zhuǎn)發(fā)技術(shù)來跳轉(zhuǎn)
* request.getRequestDispatcher("/IndexServlet").forward(request,response);
*
* session域?qū)ο螅汉线m
* response.sendRedirect(request.getContextPath()+"/IndexServlet")
* */
//2.1 登錄成功
// 2.1.1創(chuàng)建session對象 用于保存數(shù)據(jù)
HttpSession session = request.getSession();
// 2.1.1把數(shù)據(jù)保存到session域中
session.setAttribute("loginName", userName); // session對象的唯一標(biāo)識"loginName" 唯一標(biāo)識名稱 userName
//session.setMaxInactiveInterval(1*60*60*24*30); // session對象的有效時長 可以配置全局的有效時長
//2.1.3跳轉(zhuǎn)到用戶主頁
response.sendRedirect(request.getContextPath() + "/IndexServlet"); //sendRedirect()重定向 getContextPath()請求路徑
}else{
//2.2登錄失敗 請求重定向
response.sendRedirect(request.getContextPath() + "/fail.html");
}
}
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setCharacterEncoding("utf-8");
doGet(request,response);
}
}
3.5、LogoutServlet.java
package cn.itcase.servlet;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
/**
* 退出邏輯
* */
public class LogoutServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
/**
* 安全退出
* 刪除session對象中指定的loginName屬性即可
*
*/
HttpSession session = request.getSession(false);
if(session != null){
session.removeAttribute("loginName");
}
//返回登錄頁面
response.sendRedirect(request.getContextPath() + "/Login.html");
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request,response);
}
}
3.6、總結(jié)
知道了如何實(shí)現(xiàn)前端頁面與后端的數(shù)據(jù)交互
疑惑:如果有多個用戶難道還一個一個的去判斷他存不存在么?
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
SpringMVC使用ResponseEntity實(shí)現(xiàn)文件上傳下載
這篇文章主要為大家介紹了SpringMVC使用ResponseEntity實(shí)現(xiàn)文件上傳下載,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-05-05
java動態(tài)代理(jdk與cglib)詳細(xì)解析
靜態(tài)代理:由程序員創(chuàng)建或特定工具自動生成源代碼,再對其編譯。在程序運(yùn)行前,代理類的.class文件就已經(jīng)存在了2013-09-09
基于Springboot+Mybatis對數(shù)據(jù)訪問層進(jìn)行單元測試的方式分享
本文將介紹一種快高效、可復(fù)用的解決測試方案——對數(shù)據(jù)訪問層做單元測試,文章通過代碼示例介紹的非常詳細(xì),具有一定的參考價值,需要的朋友可以參考下2023-07-07
java客戶端Jedis操作Redis Sentinel 連接池的實(shí)現(xiàn)方法
下面小編就為大家?guī)硪黄猨ava客戶端Jedis操作Redis Sentinel 連接池的實(shí)現(xiàn)方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-03-03
詳解Maven項目缺少M(fèi)aven Dependencies解決方法總結(jié)
這篇文章主要介紹了詳解Maven項目缺少M(fèi)aven Dependencies解決方法總結(jié),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-11-11

