這一講海源川匯繼續給大家講一下網站制作中的MVC構架:模型-視圖-控制器結構。
下面我們要了解的問題是動態加載類原基本原理?或者說為什么我們要這么做?
測試頁面testmvc.jsp示例:
/testmvc.jsp
<%@ page contentType="text/html;charset=gb2312" %>
<html>
<head>
<title>無標題文檔</title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
</head>
<body bgcolor="#FFFFFF" text="#000000">
Pleasa Login
<hr width="98%">
<!--form name="form1" method="post" action="<%=response.encodeURL("login")%>"-->
<form name="form1" method="post" action="<%=response.encodeURL("login-action.do")%>">
<table width="80%" border="0" cellspacing="0" cellpadding="0">
<tr>
<td> 用戶名:
<input type="text" name="userName">
</td>
</tr>
<tr>
<td> 密 碼:
<input type="password" name="PassWord" size="12">
</td>
</tr>
<tr>
<td height="37">
<input type="button" name="Submit" onclick="test()" value="登 陸">
</td>
</tr>
</table>
</form>
</body>
</html>
<script language="javascript">
function test()
{
alert("ok");
document.form1.submit();
}
</script>
測試頁面:welcome.jsp
示例: /welcome.jsp
you are welcome
說明:這里我偷了個懶,該頁面只寫這句話。
BEAN:USER類
示例: /WEB-INF/Classes/beans/User.java
package bean;
public class User implements java.io.Serializable
{
private final String userName,password,hint;
public User(String userName,String password,String hint)
{
this.userName=userName;
this.password=password;
this.hint=hint;
}
public String getUserName()
{
return userName;
}
public String getPassWord()
{
return password;
}
public String getHint()
{
return hint;
}
public boolean equals(String uname,String pwd)
{
return getUserName().equals(uname)&& getPassWord().equals(pwd);
}
}
該類表示了一個用戶,并提供了一個equals的方法,當用戶名和口令匹配的時候,返回true值。
BEAN:LoginDB類
示例: /WEB-INF/Classes/beans/User.java
package bean;
import java.util.Iterator;
import java.util.Vector;
import java.io.*;
public class LoginDB implements Serializable
{
private Vector users=new Vector();
public void addUser(String uname,String pwd,String hint)//添加用戶的方法
{
users.add(new User(uname,pwd,hint));
}
public User getUser(String uname,String pwd)//檢索用戶的方法
{
Iterator it=users.iterator();
User bean=null;
synchronized (users){
while(it.hasNext())
{
bean=(User)it.next();
if (bean.equals(uname,pwd))
return bean;
}
}
return null;
}
public String getHint(String uname)//對指定的用戶提供返回口令提示的方法
{
Iterator it=users.iterator();
User bean=null;
synchronized (users)
{
while(it.hasNext())
{
if (bean.getUserName().equals(uname))
return bean.getHint();
}
}
return null;
}
}
LoginServlet類:
示例: /WEB-INF/Classes/LoginServlet.java
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.jsp.*;
import bean.*;
public class LoginServlet extends HttpServlet
{
private LoginDB loginDB;
public void init(ServletConfig config) throws ServletException
{
loginDB=new LoginDB();
}
public void service(HttpServletRequest req, HttpServletResponse res)
throws java.io.IOException, ServletException
{
loginDB.addUser("long","long","long");
User user=loginDB.getUser(req.getParameter("userName"),req.getParameter("PassWord"));
System.out.println("The name of loginDB is"+loginDB.getClass().getName());
//String user=req.getParameter("userName");
//System.out.println("get user name:"+user);
/*getServletContext().getRequestDispatcher(res.encodeURL("/index.jsp")).forward(req,res);*/
/*要注意getServletContext()和req兩個對象的區別,經過實驗應用getServletContext()進行重定向*/
/*總是不行,而應用req則可以*/
if (user!=null)
{
req.getRequestDispatcher(res.encodeURL("/welcome.jsp")).forward(req,res);
}
else
{
req.getRequestDispatcher(res.encodeURL("/adduser.jsp")).forward(req,res);
}
}
}
當testmvc.jsp的表單提交時,請求被發送到登錄的Servlet,這段代碼我沒什么好說的,在使用mvc構架之前,我們喜歡用隱藏幀來處
理表單提交的內容,實際LoginServlet.java就是替代了隱藏幀而已。
我的測試環境是: win2000server tomcat 4.1 jdk1.4 沒有數據庫。
到此為止,海源川匯對網站制作中的MVC構架的內容講解結束,但是希望大家不要結束繼續深入的學習。