佳木斯湛栽影视文化发展公司

主頁(yè) > 知識(shí)庫(kù) > JSP使用Servlet作為控制器實(shí)現(xiàn)MVC模式實(shí)例詳解

JSP使用Servlet作為控制器實(shí)現(xiàn)MVC模式實(shí)例詳解

熱門(mén)標(biāo)簽:科大訊飛語(yǔ)音識(shí)別系統(tǒng) Mysql連接數(shù)設(shè)置 阿里云 團(tuán)購(gòu)網(wǎng)站 服務(wù)器配置 電子圍欄 銀行業(yè)務(wù) Linux服務(wù)器

本文實(shí)例講述了JSP使用Servlet作為控制器實(shí)現(xiàn)MVC模式的方法。分享給大家供大家參考。具體如下:

一、目標(biāo):

① 初步理解MVC模式;
② 掌握Servlet的編寫(xiě);
③ 使用MVC模式完成登錄功能。

二、主要內(nèi)容:

① 分析JSP+JavaBean模式存在的問(wèn)題,并介紹JSP+JavaBean+Servlet模式,以及和MVC模式的關(guān)系;
② 通過(guò)簡(jiǎn)單實(shí)例介紹Servlet的編寫(xiě)、配置和運(yùn)行;
③ 采用Servlet完成登錄功能的控制。

1、 JSP+JavaBean這種模式存在的問(wèn)題?

JSP的強(qiáng)大之處在與人交互,也就是完成輸入輸出的功能。但是在JSP+JavaBean這種模式中,JSP不僅僅完成輸入輸出的功能,還完成系統(tǒng)的控制功能(接收用戶請(qǐng)求,調(diào)用JavaBean,然后根據(jù)調(diào)用的結(jié)果,選擇界面對(duì)用戶進(jìn)行響應(yīng))。所以在JSP發(fā)展的第三個(gè)階段中,把控制功能從JSP中分離出來(lái),使用Servlet來(lái)實(shí)現(xiàn),形成JSP+JavaBean+Servlet這種模式,JSP僅僅完成輸入和輸出,JavaBean完成處理,而Servlet完成控制。

2、 JSP+JavaBean+Servlet

JSP負(fù)責(zé)輸入輸出,JavaBean負(fù)責(zé)實(shí)現(xiàn)業(yè)務(wù)邏輯(功能),Servlet完成控制。這種模式通常也被認(rèn)為是MVC模式的一種實(shí)現(xiàn)。MVC模式把系統(tǒng)的業(yè)務(wù)邏輯、控制和輸入輸出進(jìn)行分離,在開(kāi)發(fā)應(yīng)用的時(shí)候,可以單獨(dú)考慮某一部分,簡(jiǎn)化開(kāi)發(fā)。
V,表示視圖,與人交戶的部分,M,表示模型,完成功能,C,表示控制器。JSP通常充當(dāng)視圖,JavaBean是模型,Servlet作為控制器。

3、 什么是Servlet

Servlet也是一種Web組件,從完成的功能上來(lái)說(shuō),與JSP是相同的。Servlet是純Java文件,是特殊的Java類(lèi)。
Servlet與JavaBean有什么區(qū)別呢?都是Java類(lèi),但是Serlvet可以接收用戶的請(qǐng)求,客戶端可以直接訪問(wèn)。但是JavaBean不能被客戶端直接訪問(wèn),必須由JSP或者其他的Java文件(包括Servlet)來(lái)調(diào)用。

4、 實(shí)例:HelloServlet

下面是一個(gè)Servlet,完成的功能是輸出一句話"Servlet測(cè)試!"。

1)文件編寫(xiě)

package servlet;
// Servlet開(kāi)發(fā)所需要的包
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測(cè)試!");
  }
}

2)編譯

需要把C:/Program Files/Apache Software Foundation/Tomcat 6.0/lib/servlet-api.jar配置到classpath中,然后編譯。

3)配置

在配置文件web.xml中寫(xiě)。包括兩部分:聲明和訪問(wèn)方式設(shè)置。

聲明:

servlet>
  servlet-name>hello/servlet-name>
  servlet-class>servlet.HelloServlet/servlet-class>
/serlvet>

訪問(wèn)方式設(shè)置:

servlet-mapping>
  servlet-name>hello/servlet-name>
  url-pattern>/hello/url-pattern>
/servlet-mapping>

5、 測(cè)試

訪問(wèn):http://127.0.0.1:8080/ch6/hello

6、 如何采用這種模式實(shí)現(xiàn)登錄功能?

界面界面和響應(yīng)界面都不需要修改,JavaBean完成處理,也不需要改變,只是使用Servlet來(lái)替換原來(lái)的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");
   // 第二步:調(diào)用JavaBean
   User user = new User();
   user.setUsername(username);
   user.setUserpass(userpass);
   boolean b = user.check();
   // 第三步:選擇一個(gè)界面對(duì)用戶進(jìn)行響應(yīng)
   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"%>
請(qǐng)登錄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、 測(cè)試運(yùn)行

訪問(wèn)登錄界面,輸入信息,然后提交。
這時(shí)候會(huì)報(bào)錯(cuò),提示請(qǐng)求方式不支持。需要在Servlet中增加如下方法:

public void doPost(HttpServletRequest request,HttpServletResponse response)
throws IOException,ServletException
{
   doGet(request,response);
}

因?yàn)镴SP頁(yè)面中的請(qǐng)求方式為post,所以Servlet中需要提供doPost方法,方法的定義和doGet相同,這里方法的實(shí)現(xiàn)只需要調(diào)用doGet方法即可。

8、 Servlet的主要方法

init方法,用于初始化;
服務(wù)類(lèi)方法:doGet方法和doPost方法
destroy方法,釋放資源

9、 生命周期

服務(wù)器接收到請(qǐng)求之后,會(huì)把請(qǐng)求信息封裝成HttpServletRequest對(duì)象和HttpServletResponse對(duì)象。
第一次訪問(wèn)servlet的時(shí)候,加載類(lèi),創(chuàng)建對(duì)象,初始化(init方法),調(diào)用服務(wù)類(lèi)方法(如果是get請(qǐng)求,調(diào)用doGet方法,如果是post請(qǐng)求,調(diào)用doPost方法)。
后續(xù)訪問(wèn),直接調(diào)用服務(wù)器類(lèi)方法。
卸載Servlet的時(shí)候,或者關(guān)閉服務(wù)器的時(shí)候,調(diào)用destroy方法釋放資源。

希望本文所述對(duì)大家的JSP程序設(shè)計(jì)有所幫助。

您可能感興趣的文章:
  • JSP使用MVC模式完成刪除和修改功能實(shí)例詳解
  • springMVC如何將controller中數(shù)據(jù)傳遞到j(luò)sp頁(yè)面
  • springMVC如何將controller中Model數(shù)據(jù)傳遞到j(luò)sp頁(yè)面
  • SpringMVC 向jsp頁(yè)面?zhèn)鬟f數(shù)據(jù)庫(kù)讀取到的值方法
  • 淺談SpringMVC jsp前臺(tái)獲取參數(shù)的方式 EL表達(dá)式
  • JSP開(kāi)發(fā)中在spring mvc項(xiàng)目中實(shí)現(xiàn)登錄賬號(hào)單瀏覽器登錄
  • JSP中springmvc配置validator的注意事項(xiàng)
  • JavaWeb實(shí)現(xiàn)用戶登錄注冊(cè)功能實(shí)例代碼(基于Servlet+JSP+JavaBean模式)
  • jsp 實(shí)現(xiàn)的簡(jiǎn)易mvc模式示例

標(biāo)簽:江蘇 蚌埠 棗莊 萍鄉(xiāng) 大理 廣元 衢州 衡水

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《JSP使用Servlet作為控制器實(shí)現(xiàn)MVC模式實(shí)例詳解》,本文關(guān)鍵詞  ;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 收縮
    • 微信客服
    • 微信二維碼
    • 電話咨詢

    • 400-1100-266
    天门市| 鄢陵县| 邯郸市| 剑阁县| 恩施市| 即墨市| 星座| 观塘区| 石棉县| 明水县| 托里县| 富裕县| 曲水县| 平乡县| 麻城市| 荃湾区| 年辖:市辖区| 宝丰县| 连山| 陵川县| 穆棱市| 明水县| 江山市| 诸暨市| 镇赉县| 通州区| 木里| 汨罗市| 谷城县| 天门市| 乌拉特中旗| 文安县| 正宁县| 罗定市| 三门县| 景宁| 抚州市| 珠海市| 景洪市| 海林市| 泗水县|