基於JSP+JavaBean+Servlet的MVC開發模式實驗
阿新 • • 發佈:2020-12-13
問題描述
客戶在登陸頁面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程式碼
- servlet-mapping中的servlet-name要與servlet中的servlet-name一致
- url-pattern中的路徑對應的是Login.html中表單的action
- 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,都沒有解決問題。如果有小夥伴能給點建議,那就太感謝了!
本篇文章還有很多不足,還請各位多多指正!