1. 程式人生 > 其它 >基於JSP+JavaBean+Servlet的MVC開發模式實驗

基於JSP+JavaBean+Servlet的MVC開發模式實驗

技術標籤:筆記servletjspjava

問題描述

客戶在登陸頁面Login.html輸入使用者名稱和密碼,提交表單,由Servlet(LoginValidate.java)呼叫JavaBean(LoginDBO.java)驗證使用者名稱和密碼,最後呼叫檢視returnMessage.jsp顯示,如果成功顯示成功資訊,不成功顯示失敗資訊。
在這裡插入圖片描述

程式碼

結構
如果把returnMessage.jsp放在其他路徑下,那LoginValidate.java中的url路徑記得要換。
在這裡插入圖片描述
Login.html程式碼

<!DOCTYPE html>
<html>
<head
>
<meta charset="UTF-8"> <title>登入</title> </head> <body> <form action="login" method="post"> 使用者名稱:<input type="text" name="name" /><br/><br/> 密 碼:<input type="password" name="
password"
/>
<br/><br/> <button type="submit">登入</button> </form> </body> </html>

returnMessage.jsp程式碼

<%@ page language="java" import="java.util.*"
	contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html> <head> <meta charset="UTF-8"> <title>驗證</title> </head> <body> <%String message=new String(request.getParameter("message")); %> <%= message %> </body> </html>

LoginValidate.java程式碼
這個類要繼承HttpServlet類,然後重寫父類的doGet和doPost方法。
doGet和doPost方法可以相互呼叫,可以將程式碼寫在doGet中,然後在doPost方法中呼叫doGet,也可以將程式碼寫在doPost中,然後在doGet中呼叫doPost。這樣不管提交的是get還是post都可以處理。

package myServlet;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class LoginValidate extends HttpServlet {
	
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;

	@Override
	public void doGet(HttpServletRequest request,HttpServletResponse response) throws ServletException,IOException
	{
//		request.setCharacterEncoding("UTF-8");
//		response.setContentType("text/html;charset=UTF-8");
		//獲取引數
		String name=request.getParameter("name");
		String password=request.getParameter("password");
		String message=LoginDBO.verify(name, password);
		String url="returnMessage.jsp?message="+message;
//		url=new String(url.getBytes("GBK"),"UTF-8"); 
		response.sendRedirect(url);
	}
	
	@Override
	public void doPost(HttpServletRequest request,HttpServletResponse response) throws ServletException,IOException
	{
		doGet(request,response);
	}
}

LoginDBO.java程式碼
此處偷懶沒有寫資料庫,需要資料庫的朋友可以自行寫相關程式碼。
此處的方法為靜態方法,不想用靜態方法的小夥伴,要記得在LoginValidate.java中建立物件,然後呼叫該方法。

package myServlet;

public class LoginDBO {
	public static String verify(String name,String password)
	{
		if(name.equals("Tom")&&password.equals("123"))
		{
			return "success";
		}
		else
		{
			return "fail";
		}
	}
}

web.xml程式碼

  1. servlet-mapping中的servlet-name要與servlet中的servlet-name一致
  2. url-pattern中的路徑對應的是Login.html中表單的action
  3. servlet-class中是包名+類名
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xmlns="http://xmlns.jcp.org/xml/ns/javaee" 
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee 
http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" version="3.1">
  <display-name>MVC</display-name>
  <welcome-file-list>
    <welcome-file>Login.html</welcome-file>
  </welcome-file-list>
  	<servlet>
  		<servlet-name>Login</servlet-name>
  		<servlet-class>myServlet.LoginValidate</servlet-class>
  	</servlet>
  	<servlet-mapping>
  		<servlet-name>Login</servlet-name>
  		<url-pattern>/login</url-pattern>
  	</servlet-mapping>
</web-app>

結果演示

在這裡插入圖片描述
在這裡插入圖片描述

在這裡插入圖片描述

遇到的問題(還沒解決)

在實驗過程中遇到了中文亂碼問題。在LoginDBO.java中如果返回的是中文,那麼在returnMessage.jsp中顯示出來的就是問號,url上message對應的引數也是問號。

在這裡插入圖片描述

試過在LoginValidate.java和returnMessage.jsp中分別加上

url=new String(url.getBytes("GBK"),"UTF-8"); 
<%String message=new String(request.getParameter("message")..getBytes("GBK"),"UTF-8"); %>

也有將GBK換成ISO-8859-1,都沒有解決問題。如果有小夥伴能給點建議,那就太感謝了!

本篇文章還有很多不足,還請各位多多指正!