`
prodream
  • 浏览: 102151 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

JSP/Servlet:控制器(Servlet)

    博客分类:
  • J2EE
阅读更多
Model 2 架構將應用程式的Web 層區分為Controller、Model與View三個角色,使用JSP/Servlet技術,可以很適切的實現這個架構。 Model 2架构将应用程式的Web层区分为Controller、Model与View三个角色,使用JSP/Servlet技术,可以很适切的实现这个架构。

JSP/Servlet對於Model 2架構的實現對應分別為: JSP/Servlet对于Model 2架构的实现对应分别为:
  • Servlet 實現Controller 角色 Servlet实现Controller角色
  • JavaBean或其它自訂值物件實現Model 角色 JavaBean或其它自订值物件实现Model角色
  • 沒有程式邏輯的JSP 實現View 角色 没有程式逻辑的JSP实现View角色

首先使用Servlet來實現一個簡單的控制器,在這之前,您需要先瞭解Command 模式 首先使用Servlet来实现一个简单的控制器,在这之前,您需要先了解Command模式 使用Command 模式,可以使控制器的實現更具彈性,不過作為一個範例,這邊僅實作出概念,因而接下來會簡化一些實作內容。 使用Command模式,可以使控制器的实现更具弹性,不过作为一个范例,这边仅实作出概念,因而接下来会简化一些实作内容。

首先,實作Command 模式中實際執行請求的物件,先定義一個IAction介面: 首先,实作Command模式中实际执行请求的物件,先定义一个IAction介面:
  • IAction.java
 package onlyfun.caterpillar; package onlyfun.caterpillar; 

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

public interface IAction { public interface IAction {
public void execute(HttpServletRequest req, public void execute(HttpServletRequest req,
HttpServletResponse res); HttpServletResponse res);
}

真正執行客戶端請求的物件必須實作IAction 介面,具體要實作的Action留在下一個主題,先來看看如何實現Command 模式中的Invoker類: 真正执行客户端请求的物件必须实作IAction介面,具体要实作的Action留在下一个主题,先来看看如何实现Command模式中的Invoker类:
  • Invoker.java
 package onlyfun.caterpillar; package onlyfun.caterpillar; 

import java.io.IOException; import java.io.IOException;
import java.util.*; import java.util.*;
import javax.servlet.RequestDispatcher; import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException; import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponse;

public class Invoker { public class Invoker {
private Map actions; private Map actions;

private String defaultPage; private String defaultPage;

public Invoker() { public Invoker() {
actions = new HashMap(); actions = new HashMap();
}

public void addCommand(String actionName, public void addCommand(String actionName,
IAction action) { IAction action) {
actions.put(actionName, action); actions.put(actionName, action);
}

public void request(HttpServletRequest req, public void request(HttpServletRequest req,
HttpServletResponse res) HttpServletResponse res)
throws ServletException, IOException { throws ServletException, IOException {
IAction action = IAction action =
(IAction) actions.get(req.getServletPath()); (IAction) actions.get(req.getServletPath());

if(action != null) { if(action != null) {
action.execute(req, res); action.execute(req, res);
}
else { else {
RequestDispatcher dispatcher = RequestDispatcher dispatcher =
req.getRequestDispatcher(defaultPage);
dispatcher.forward(req, res); dispatcher.forward(req, res);
}
}

public String getDefaultPage() { public String getDefaultPage() {
return defaultPage; return defaultPage;
}

public void setDefaultPage(String defaultPage) { public void setDefaultPage(String defaultPage) {
this.defaultPage = defaultPage; this.defaultPage = defaultPage;
}
}

這是一個很簡單的控制轉發類,這個類將根據客戶端請求的Servlet路徑來瞭解實際該調用的Action物件,如果找不到,則轉發至預設的頁面。 这是一个很简单的控制转发类,这个类将根据客户端请求的Servlet路径来了解实际该调用的Action物件,如果找不到,则转发至预设的页面。

接下來在Controller 中使用Invoker 類,Controller 使用Servlet 來實現: 接下来在Controller中使用Invoker类,Controller使用Servlet来实现:
  • DispatcherServlet
 package onlyfun.caterpillar; package onlyfun.caterpillar; 

import java.io.*; import java.io.*;
import javax.servlet.*; import javax.servlet.*;
import javax.servlet.http.*; import javax.servlet.http.*;

public class DispatcherServlet extends HttpServlet { public class DispatcherServlet extends HttpServlet {
private Invoker invoker; private Invoker invoker;

public void init() throws ServletException { public void init() throws ServletException {
invoker = new Invoker(); invoker = new Invoker();
invoker.addCommand("/welcome.action",
new WelcomeAction()); new WelcomeAction());
invoker.addCommand("/login.action",
new LoginAction()); new LoginAction());
invoker.setDefaultPage("/welcome.action");
}

public void doPost(HttpServletRequest req, public void doPost(HttpServletRequest req,
HttpServletResponse res) HttpServletResponse res)
throws ServletException, IOException { throws ServletException, IOException {
invoker.request(req, res); invoker.request(req, res);
}
public void doGet(HttpServletRequest req, public void doGet(HttpServletRequest req,
HttpServletResponse res) HttpServletResponse res)
throws ServletException, IOException { throws ServletException, IOException {
doPost(req, res); doPost(req, res);
}
}

為了簡化程式以方便說明,直接將可用的請求路徑寫在init()中,目前只有兩個可用的請求路徑,實際上設計時,這個部份該可以在屬性檔案中設定,以這個Model 2架構的程式更有彈性而可以重用。 为了简化程式以方便说明,直接将可用的请求路径写在init()中,目前只有两个可用的请求路径,实际上设计时,这个部份该可以在属性档案中设定,以这个Model 2架构的程式更有弹性而可以重用。

這邊實現Model 2架構的方式將採用前端控制器(Front Controller)模式,客戶端所有的請求將透過上面這個DispatcherServlet,在web.xml中可以這麼設定來達到目的: 这边实现Model 2架构的方式将采用前端控制器(Front Controller)模式,客户端所有的请求将透过上面这个DispatcherServlet,在web.xml中可以这么设定来达到目的:
  • web.xml
 <?xml version="1.0" encoding="ISO-8859-1"?> <?xml version="1.0" encoding="ISO-8859-1"?> 

<web-app xmlns="http://java.sun.com/xml/ns/j2ee" <web-app xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
version="2.4">

<description>
Model 2 Example Model 2 Example
</description>
<display-name>Model 2 Examples</display-name> <display-name>Model 2 Examples</display-name>

<servlet>
<servlet-name>dispatcher</servlet-name>
<servlet-class>
onlyfun.caterpillar.DispatcherServlet
</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>dispatcher</servlet-name>
<url-pattern>*.action</url-pattern>
</servlet-mapping>

</web-app>

按照這個web.xml的設定,所有以*.action結尾的請求都將由DispatcherServlet來處理。 按照这个web.xml的设定,所有以*.action结尾的请求都将由DispatcherServlet来处理。
分享到:
评论

相关推荐

    JSP/Servlet

    Servlet/JSP 的物件對應 Servlet 執行緒安全 Servlet 生命週期 Listener 與 Event Filter 使用Filter,您可以先對request作一些前置處理,例如進行身份驗證、過濾不安全的請求、監視統計請求的來源與出處等等...

    JavaWeb实现网上商城:JSP+Servlet+Dao

    Servlet:用于验证数据、实例化JavaBean、调用Dao连接数据库、控制页面的跳转 Servlet过滤器(filter):能够在一个Request到达servlet之前预处理request,也可以在离开servlet时处理response Servlet监听器:给web中...

    struts2 标签库 帮助文档

    2. &lt;s:include value=""&gt;&lt;/s:include&gt;-----包含一个输出,servlet或jsp页面 3. &lt;s:inputtransferselect list=""&gt;&lt;/s:inputtransferselect&gt;-----获取form的一个输入 4. &lt;s:iterator&gt;&lt;/s:iterator&gt;-----用于遍历集合...

    jsp+servlet+javabean实现简易留言板(包含数据库文件)

    jsp+servlet+javabean实现简易留言板(包含...servlet:控制器,请求分配转发,联系视图层与模型层;javabean:模型层,与书库打交道 先恢复数据库,我用的是navicat for mysql; 数据库名:message 表名:message

    JSP使用Servlet作为控制器实现MVC模式实例详解

    本文实例讲述了JSP使用Servlet作为控制器实现MVC模式的方法。分享给大家供大家参考。具体如下: 一、目标: ① 初步理解MVC模式; ② 掌握Servlet的编写; ③ 使用MVC模式完成登录功能。 二、主要内容: ① 分析JSP+...

    jsp+servlet+javaBean实现MVC-jspmvc.zip

    该框架采用JSP作为视图层,Servlet作为控制器层,JavaBean作为模型层,实现了MVC架构的分离。 该框架的特点包括: - 可扩展性:框架结构清晰,代码简单易懂,方便扩展和维护。 - 灵活性:可根据需求自由选择使用...

    Servlet与 JSP 指南,PPT教学课件part2(共3个)

    JSP page指令 12、 在JSP页面中包含文件和applet 13、JavaBean组件在JSP文档中的应用 14、Servlet和JSP的集成:模型-视图-控制器构架 15、简化对Java代码的访问 JSP 2.0表达式语言 &lt;br&gt;

    Servlet与 JSP 指南,PPT教学课件part1(共3个)

    JSP page指令 12、 在JSP页面中包含文件和applet 13、JavaBean组件在JSP文档中的应用 14、Servlet和JSP的集成:模型-视图-控制器构架 15、简化对Java代码的访问 JSP 2.0表达式语言 &lt;br&gt;

    新闻发布系统(jsp+servlet)

    可当做一个简单的项目实例,包含数据库文件,有基本的增删改查,对于初学者来说简单易懂!

    健身俱乐部Web网站-JSP+Servlet+Hibernate+jQuery+Ajax

    控制转发层采用Servlet,数据访问层采用Hibernate(bean和dao是由Hibernate逆向工程自动生成)。 系统采用分层架构,由上到下分为视图层、控制转发层、业务层、服务层、数据库访问层。运用了一些基本设计模式,系统...

    java项目源码之基于jsp+servlet+javaBean实现MVC-jspmvc的实现.rar

    基于 JSP、Servlet 和 JavaBean 的 MVC(Model-View-Controller)架构是一种常见的 Java Web 应用程序设计模式,它将应用程序分为模型、视图和控制器三个核心部分,以实现代码的分层和解耦。以下是基于该架构实现的 ...

    jsp + servlet + javaben实现springmvc

    MVC是一种软件架构的思想, 将软件按照模型、视图、控制器来划分 M:Model,模型层,指工程中的JavaBean,作用是处理数据 V:View,视图层,指工程中的html或jsp等页面,作用是与用户进行交互,展示数据 C:...

    其他类别jsp+servlet+javaBean实现MVC-jspmvc.zip

    在这个项目里,Java Servlet充当控制器(Controller),负责处理用户的请求并调用相应的模型(Model)——也就是JavaBean,来执行业务逻辑。然后,Servlet会将处理结果转发给视图(View)——即JSP页面,由JSP负责...

    Jsp+JavaBean循序渐进教程+Servlet工作原理实例

    如果把起控制器作用的Servlet的作用理解为对客户端的请求进行预处理对理解Servlet将有很大的帮助。通过web.XML配置文件可以找到用户请求和特定的Servlet的对应关系,每个Servlet都有一个特定的Servlet对象与之对应,...

    一个学生信息管理系统,使用jsp+Servlet的MVC模式,mysql数据库,适合初学者

    第二个上传的资源,跟上一个纯jsp+Javabean比较,多了使用Servlet作为控制器,实现MVC模式的学生信息管理系统,还是小白,请勿见笑

    网上书店系统(jsp+servlet+sqlserver)

    系统平台介绍:适合作为毕业设计和课程设计,代码稍加改动即可运行,附带全套的答辩...在Struts框架中,模型由实现业务逻辑的Javabean组件构成,控制器由Servlet来实现,视图由一组Jsp文件构成]。是java毕业设计的首选

    javaEE servlet 学习笔记

    javaEE servlet 学习笔记 jsp本质上是servlet,但是为了更加符合mvc的框架,将页面显示和逻辑控制分离,jsp页面...C(controller):控制器。负责逻辑控制,也就是负责调度页面的转换。 以下即开始第一个servlet的构建:

    Servlet与JSP核心编程

    透过《Servlet与JSP核心编程(第2卷 第2版)》,读者可以掌握如何通过部署描述文件web.xml来控制Web应用的行为,如何通过声明式安全和编程式安全来增强Web应用的安全,如何使用servlet和JSP过滤器来封装Web应用常见的...

Global site tag (gtag.js) - Google Analytics