JavaWeb_使用Servlet + HttpSession實現簡單使用者登陸
阿新 • • 發佈:2019-01-05
學習Servlet之後,覺得HttpSession的作用還是比較大的,可以通過HttpSession機制往頁面傳值,以下是一個簡單的例子
1.新建登陸頁
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>登陸頁</title> </head> <body> <center> <div style="margin-top:100px"> <h2>請登陸</h2> <form action="login.do" method="post"> <input type="text" name="username" id="username"/><br> <input type="password" name="pwd" id="pwd"/><br> <input type="submit" value="登陸"/> </form> </div> </center> </body> </html>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>歡迎頁</title> </head> <body> <h1>登陸成功,當前使用者:${userName}</h1> <h2>登陸時間:${logindate }</h2> </body> </html>
3.登陸失敗資訊提示頁面,可以通過超連結跳轉至登陸頁
4.建立使用者模型<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Insert title here</title> </head> <body> <p>${msg }</p><br> <a href="../pages/login.jsp"><p>點此重新登陸</p></a> </body> </html>
package com.evian.model;
public class User {
private String uname;
private String password;
private String sex;
public String getUname() {
return uname;
}
public void setUname(String uname) {
this.uname = uname;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public User(String uname, String password, String sex) {
super();
this.uname = uname;
this.password = password;
this.sex = sex;
}
public User() {
super();
// TODO Auto-generated constructor stub
}
}
5.使用者Service,我只是做個小例子,所以沒有連結資料庫,只是通過Java陣列儲存幾個使用者
package com.evian.util;
import com.evian.model.User;
public class UserService {
User user1 = new User("張三", "123123", "男");
User user2 = new User("李白", "110110", "女");
User user3 = new User("王名", "123456", "男");
User[] users = { user1, user2, user3 }; //建立陣列用於儲存user
/**
* 根據使用者名稱匹配user物件並返回給servlet
* @param username
* @return
*/
public User userlogin(String username) {
User u = null;
for (User user : users) {
if (username.equals(user.getUname())) {
u = user;
}
}
return u;
}
}
6.登陸Action
package com.evian.controller;
import java.io.IOException;
import java.util.Date;
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 javax.servlet.http.HttpSession;
import com.evian.model.User;
import com.evian.util.UserService;
@SuppressWarnings("serial")
@WebServlet("/UserServlet")
public class UserServlet extends HttpServlet {
protected void service(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
request.setCharacterEncoding("utf-8");// 設定請求資訊字元編碼
response.setCharacterEncoding("utf-8");// 設定響應資訊字元編碼
String userName = request.getParameter("username");// 獲取登陸頁使用者名稱資訊
String password = request.getParameter("pwd");// 獲取登陸頁使用者密碼資訊
UserService us = new UserService();
User user = us.userlogin(userName);// 呼叫UserService方法,返回使用者名稱等於登陸頁使用者名稱的User物件
HttpSession session = request.getSession();// 建立Session物件
/**
* 判斷密碼是否正確
*/
if (user != null) {
if (user.getPassword().equals(password)) {
session.setAttribute("userName", userName);
session.setAttribute("logindate", new Date());
response.sendRedirect("/TestSession/pages/index.jsp");// 密碼正確跳轉至index頁面
} else {
session.setAttribute("msg", "密碼錯誤");
response.sendRedirect("/TestSession/pages/error.jsp");// 密碼錯誤停留在login頁面
}
} else {
session.setAttribute("msg", "使用者名稱不存在");
response.sendRedirect("/TestSession/pages/error.jsp");// 使用者名稱錯誤停留在login頁面
}
}
}
7.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">
<display-name>TestSession</display-name>
<welcome-file-list>
<welcome-file>/pages/login.jsp</welcome-file>
</welcome-file-list>
<servlet>
<servlet-name>userLogin</servlet-name>
<servlet-class>com.evian.controller.UserServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>userLogin</servlet-name>
<url-pattern>/login.do</url-pattern>
</servlet-mapping>
</web-app>
8.執行效果圖