[Java][Servlet] 帳號密碼登入 login 製作
使用 Servlet 製作帳號密碼的登入驗證機制,可以在 web.xml 快速新增、刪除使用者~
程式碼上都有寫註解,可以參考看看
一、程式結果
主要程式碼
getInitParameterNames():取得 web.xml <init-param><param-name>,並返回 Enumeration<E> 型態
getInitParameter() :取得 web.xml <init-param><param-value>
request.getRequestDispatcher("/WEB-INF/notice.html").forward(request, response):
forward 為內部轉址用的方法,可以轉到 WEB-INF 資料夾底下的 HTML 檔
一、程式結果
二、程式碼
一、程式結果
登入前,輸入 web.xml 上設定的初始化參數
登入後,可以查看 notice.html 檔案,且 notice.html 因為是存放於 WEN-INF 資料夾底下,該資料夾有保護機制,如果知道檔案位置、名稱等也無法隨變進入查看
二、程式碼
Project 類型: Dynamic Web Project
Project 名稱: servlet
Package 名稱: idv.ycc.servlet
Class 類型: Servlet
Class 名稱: InitParamServlet.java
Html 路徑: servlet/WebContent/WEB-INF
Html 名稱: notice.html
如果有直接 copy 程式碼,請盡量用以上的名稱,避免出現小錯誤!
InitParamServlet.java
package idv.ycc.servlet;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Enumeration;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet("/InitParamServlet")
public class InitParamServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
public InitParamServlet() {
super();
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setCharacterEncoding("UTF-8"); //設定response編碼方式
request.setCharacterEncoding("UTF-8"); //設定request編碼方式
response.setContentType("text/html"); //設定此servlet的內文類型為HTML
PrintWriter out = response.getWriter(); //取得response的PrintWriter字元流(傳送字元對象)
out.println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">");
out.println("<HTML>");
out.println("<HEAD><TITLE>登錄查看 Notice 文件</TITLE></HEAD>");
out.println("<style>body, td, div {font-size: 12px }</style>");
out.println("<BODY>");
out.println("<form action='" + request.getRequestURI() + "' method='post'>");
out.println("<div>");
out.println("<span>帳號:</span>");
out.println("<input type='text' name='username' style='width:200px; '><br/>");
out.println("</div>");
out.println("<div>");
out.println("<span>密碼:</span>");
out.println("<input type='password' name='password' style='width:200px; '><br/><br/>");
out.println("</div>");
out.println("<input type='submit' value=' 登錄 '>");
out.println("</form>");
out.println("</BODY>");
out.println("</HTML>");
out.flush(); //釋放緩衝區,避免資料沒有完全輸出,或滿出發生錯誤
out.close();
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String username = request.getParameter("username"); //name=username的input做提交的動作
String password = request.getParameter("password"); //name=password的input做提交的動作
Enumeration<String> params = getInitParameterNames(); //取得所有初始化參數名稱
//params仍有參數時→執行此程式 (走訪所有初始化參數)
while(params.hasMoreElements()) {
String usernameParam = params.nextElement(); //取得參數名(帳號)
String passwordParam = getInitParameter(usernameParam); //取得參數值(密碼)
if(usernameParam.equalsIgnoreCase(username) && passwordParam.equals(password)) {
//因WEB-INF下的文件無法直接被讀取到,必須透過以下程式來呼叫(內部轉址用)
//getRequestDispatcher("/WEB-INF/xxx.html").forward(request, response)
request.getRequestDispatcher("/WEB-INF/notice.html").forward(request, response);
return;
}
}
doGet(request, response); //帳密不正確時,則直接顯示登入頁面
}
}
web.xml
有其他不懂可先查看此文章的web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.1"
xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd">
<servlet>
<servlet-name>InitParamServlet</servlet-name>
<servlet-class>idv.ycc.servlet.InitParamServlet</servlet-class>
<!-- 初始化參數 -->
<init-param>
<param-name>ycc</param-name>
<param-value>0000</param-value>
</init-param>
<init-param>
<param-name>admin</param-name>
<param-value>admin</param-value>
</init-param>
<init-param>
<param-name>guest</param-name>
<param-value>guest</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>InitParamServlet</servlet-name>
<url-pattern>/initparamservlet.io</url-pattern>
</servlet-mapping>
</web-app>
notice.html
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Notice</title>
</head>
<body>
<h1>這是 Notice 文件</h1>
</body>
</html>
可以創建好登入畫面
回覆刪除但是不管帳號密碼錯誤都不能進入NOTICE畫面