本文實例講述了JSP使用Servlet作為控制器實現MVC模式的方法。分享給大家供大家參考。具體如下:
一、目標:
① 初步理解MVC模式;
② 掌握Servlet的編寫;
③ 使用MVC模式完成登錄功能。
二、主要內容:
① 分析JSP+JavaBean模式存在的問題,並介紹JSP+JavaBean+Servlet模式,以及和MVC模式的關系;
② 通過簡單實例介紹Servlet的編寫、配置和運行;
③ 采用Servlet完成登錄功能的控制。
1、 JSP+JavaBean這種模式存在的問題?
JSP的強大之處在與人交互,也就是完成輸入輸出的功能。但是在JSP+JavaBean這種模式中,JSP不僅僅完成輸入輸出的功能,還完成系統的控制功能(接收用戶請求,調用JavaBean,然後根據調用的結果,選擇界面對用戶進行響應)。所以在JSP發展的第三個階段中,把控制功能從JSP中分離出來,使用Servlet來實現,形成JSP+JavaBean+Servlet這種模式,JSP僅僅完成輸入和輸出,JavaBean完成處理,而Servlet完成控制。
2、 JSP+JavaBean+Servlet
JSP負責輸入輸出,JavaBean負責實現業務邏輯(功能),Servlet完成控制。這種模式通常也被認為是MVC模式的一種實現。MVC模式把系統的業務邏輯、控制和輸入輸出進行分離,在開發應用的時候,可以單獨考慮某一部分,簡化開發。
V,表示視圖,與人交戶的部分,M,表示模型,完成功能,C,表示控制器。JSP通常充當視圖,JavaBean是模型,Servlet作為控制器。
3、 什麼是Servlet
Servlet也是一種Web組件,從完成的功能上來說,與JSP是相同的。Servlet是純Java文件,是特殊的Java類。
Servlet與JavaBean有什麼區別呢?都是Java類,但是Serlvet可以接收用戶的請求,客戶端可以直接訪問。但是JavaBean不能被客戶端直接訪問,必須由JSP或者其他的Java文件(包括Servlet)來調用。
4、 實例:HelloServlet
下面是一個Servlet,完成的功能是輸出一句話"Servlet測試!"。
1)文件編寫
package servlet; // Servlet開發所需要的包 import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public class HelloServlet extends HttpServlet { public void doGet(HttpServletRequest request,HttpServletResponse response) throw IOException,ServletException { response.setContentType("text/html;charset=gb2312"); PrintWriter out = response.getWriter(); out.print("Servlet測試!"); } }
2)編譯
需要把C:/Program Files/Apache Software Foundation/Tomcat 6.0/lib/servlet-api.jar配置到classpath中,然後編譯。
3)配置
在配置文件web.xml中寫。包括兩部分:聲明和訪問方式設置。
聲明:
<servlet> <servlet-name>hello</servlet-name> <servlet-class>servlet.HelloServlet</servlet-class> </serlvet>
訪問方式設置:
<servlet-mapping> <servlet-name>hello</servlet-name> <url-pattern>/hello</url-pattern> </servlet-mapping>
5、 測試
訪問:http://127.0.0.1:8080/ch6/hello
6、 如何采用這種模式實現登錄功能?
界面界面和響應界面都不需要修改,JavaBean完成處理,也不需要改變,只是使用Servlet來替換原來的login-process.jsp,完成控制功能。
1)參考代碼如下:
package servlet; import java.io.*; import javax.servlet.*; import javax.servlet.http.*; import javabean.*; public class LoginProcess extends HttpServlet { public void doGet(HttpServletRequest request,HttpServletResponse response) throws IOException,ServletException { // 第一步:獲取用戶的輸入信息 String username = request.getParameter("username"); String userpass = request.getParameter("userpass"); // 第二步:調用JavaBean User user = new User(); user.setUsername(username); user.setUserpass(userpass); boolean b = user.check(); // 第三步:選擇一個界面對用戶進行響應 String forward; if(b) forward = "success.jsp"; else forward = "failure.jsp"; RequestDispatcher rd = request.getRequestDispatcher(forward); rd.forward(request,response); } }
上面的代碼基本上展示了Servlet作為控制器的基本功能。
2)配置
<servlet> <servlet-name>process</servlet-name> <servlet-class>servlet.LoginProcess</servlet-class> </servlet> <servlet-mapping> <servlet-name>process</servlet-name> <url-pattern>/process</url-pattern> </servlet-mapping>
3)修改登錄界面的action屬性
<%@ page contentType="text/html;charset=gb2312"%> 請登錄<br> <form name="form1" method="post" action="process"> 用戶ID:<input type="text" name="username"><br> 口令:<input type="password" name="userpass"><br> <input type="submit" value="登錄"><input type="reset" value="重置"> </form> <%@ include file="contact.jsp"%>
7、 測試運行
訪問登錄界面,輸入信息,然後提交。
這時候會報錯,提示請求方式不支持。需要在Servlet中增加如下方法:
public void doPost(HttpServletRequest request,HttpServletResponse response) throws IOException,ServletException { doGet(request,response); }
因為JSP頁面中的請求方式為post,所以Servlet中需要提供doPost方法,方法的定義和doGet相同,這裡方法的實現只需要調用doGet方法即可。
8、 Servlet的主要方法
init方法,用於初始化;
服務類方法:doGet方法和doPost方法
destroy方法,釋放資源
9、 生命周期
服務器接收到請求之後,會把請求信息封裝成HttpServletRequest對象和HttpServletResponse對象。
第一次訪問servlet的時候,加載類,創建對象,初始化(init方法),調用服務類方法(如果是get請求,調用doGet方法,如果是post請求,調用doPost方法)。
後續訪問,直接調用服務器類方法。
卸載Servlet的時候,或者關閉服務器的時候,調用destroy方法釋放資源。
希望本文所述對大家的JSP程序設計有所幫助。