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来处理。
发表评论
-
Tag教程
2010-02-27 14:58 615EL 表达式语言 http://www.code-123. ... -
server.xml元素属性详解
2008-08-23 14:12 732属性名解析 server port ... -
虚拟主目录的建立方法
2008-08-23 14:18 807建立站点www.prodream.com的步骤: 1.建立需 ... -
JSP动作指令
2008-08-23 14:35 662一、Include指令<jsp:include>标 ... -
JSP动作标签
2008-08-23 15:29 823jsp指令负责告诉jsp引擎如何把页面翻译成servlet. ... -
JSP的useBean动作指令-JSP页面加载过程与scope取值
2008-08-23 15:34 1993Jsp的useBean动作标签的JSP页面加载过程 < ... -
JSP内部对象与方法详解
2008-08-23 16:10 744① out - javax.servlet.jsp.jsp ... -
基于端口的虚拟主机的建立(终于晓得为什么没有成功的原因了)
2008-08-23 16:31 774基于端口号的虚拟主机 server.xml中@一个<C ... -
servlet-动态页面
2008-08-27 10:15 793一、动态页面与动态html页面的区别<?xml:name ... -
tomcat-建立虚拟子目录
2008-08-27 14:16 7541.最简单的方法是,在主目录下建立一个文件夹,这个就是一个虚拟 ... -
Servlet运行过程
2008-08-28 09:03 1186一.servlet的特点 二、servlet程序查询数据库的 ... -
servlet配置运行
2008-08-28 15:25 1074一.servlet的注射与运行 二、serv ... -
servlet-filter的一个例子
2008-08-28 16:39 799Filter的意思是可以在Servlet实例进行实质性的处理之 ... -
http协议请求行,状态行,响应状态行
2008-09-09 21:19 54911.请求行 格式:请求方式 资源路径 HTTP版本号<C ... -
过滤器
2008-09-11 21:54 637什么是过滤器, 过滤器不是servlet, 它是一个可以 传送 ... -
URLPath匹配原则
2008-09-11 22:50 838URLPath匹配原则 路 ... -
web.xml原理与元素解析
2008-09-11 22:56 1613(tomcat实际上是一个servlet容器,而Apache是 ... -
乱码问题
2008-09-11 23:03 846预备知识: 1.字节和un ... -
过滤器的使用场合
2008-09-11 23:18 895过滤器可以在请求到达JSP或Servlet之前或响应返 ... -
servlet常用类
2008-09-22 12:58 756Servlet常用接口public interface S ...
相关推荐
3. **MVC模式**:理解模型-视图-控制器架构,以及JSP和Servlet在其中的角色。 4. **请求和响应处理**:学习HttpServletRequest和HttpServletResponse接口,处理HTTP请求和响应。 5. **JSP内置对象**:如session、...
5. MVC(Model-View-Controller)设计模式:理解并实现JSP作为视图、Servlet作为控制器的角色。 6. Ajax的XMLHttpRequest对象:了解其send()、open()方法和onreadystatechange事件。 7. JSON(JavaScript Object ...
1. **设计模式**:新闻发布系统可能采用了MVC(模型-视图-控制器)设计模式,Servlet作为控制器,处理用户请求,JSP作为视图,展示数据,而模型则可能包含JavaBeans或其他持久化层对象。 2. **数据库交互**:系统...
Servlet作为控制器,处理请求,更新模型,然后转发到JSP进行显示。这种分工协作使得代码结构更清晰,易于维护。 **4. 新闻发布系统的开发** 压缩包中的"使用JSP/Servlet技术开发新闻发布系统"项目,旨在帮助学习者...
在本项目中,Servlet将作为后端控制器,负责处理用户操作,如登录验证、商品搜索、添加到购物车等业务逻辑。通过定义servlet映射,我们可以将特定的URL请求转发给对应的Servlet方法进行处理。此外,Servlet还可以...
【JSP/Servlet/AJAX 邮政系统详解】 在信息技术领域,邮政系统的开发是一项复杂的任务,尤其当它涉及到用户交互、数据处理和实时更新时。本项目名为"jsp/servlet ajax邮政系统",其核心技术栈包括JavaServer Pages ...
在JSP/Servlet/Ajax组合中,Servlet通常扮演控制器的角色,接收用户请求,调用业务逻辑,然后将结果返回给JSP进行展示。在新闻系统的实现中,Servlet可能包含处理新闻添加、删除、修改以及搜索等功能的逻辑。 ...
- **后端**:系统采用Java后端开发,利用Servlet作为控制器处理HTTP请求,Hibernate作为持久层框架,负责数据库操作,实现了模型-视图-控制器(MVC)的设计模式。 - **前端**:前端主要由JSP页面构成,结合HTML、...
3. **MVC模式**:在新闻发布的系统中,很可能采用了Model-View-Controller(模型-视图-控制器)架构模式。Model处理数据,Servlet作为Controller处理请求并控制流程,JSP作为View显示结果。 4. **数据库管理**:...
2. **Servlet**:主要作为控制器,处理HTTP请求,进行业务逻辑处理。Servlet通过重写service()或doGet()、doPost()方法来响应客户端请求,完成数据处理后,通常会转发到对应的JSP页面进行显示。 三、BBS论坛关键...
MVC模式是一种软件设计模式,将应用程序分为三个主要部分:模型(Model)、视图(View)和控制器(Controller)。在BBS论坛项目中: - **模型(Model)**:负责管理数据和业务逻辑,如用户信息、帖子、评论等的存储...
在JSP/Servlet应用中,控制器Servlet接收请求,处理业务逻辑,然后将结果传递给JSP页面进行展示。这样可以分离业务逻辑和展示逻辑,使代码更加清晰和易于维护。 在这个项目中,学习者会实践以上知识,实现新闻主题...
这部分可能分为模型(Model)、视图(View)和控制器(Controller)三个部分,遵循MVC设计模式。 6. **静态资源**:如CSS样式表、JavaScript脚本、图片等,用于美化和增强用户体验。 学习这个项目,你将掌握如何...
总结,"使用JSP/Servlet/Ajax技术开发新闻发布系统"涉及到的技术栈广泛,包括前后端交互、数据库操作、MVC设计模式等多个方面,开发者需要掌握这些技能才能成功构建出高效、用户体验良好的新闻发布平台。
网上书城源码很可能采用了Model-View-Controller(模型-视图-控制器)的设计模式,这是一种常见的软件架构模式,有助于提高代码的可维护性和可扩展性。在JSP和Servlet结合的应用中,JSP通常作为View,Servlet作为...
而`servlet`则作为控制器,处理来自客户端的请求,执行业务逻辑,例如用户管理、商品管理、订单处理等,并将结果传递给`jsp`进行渲染。 在线文本编辑器在后台管理中通常用于编写和编辑商品描述、新闻文章等内容。这...
在旅游管理系统中,Servlet扮演了控制器的角色,负责接收和处理来自JSP的请求,执行业务逻辑,然后将结果返回给JSP,再由JSP渲染成用户可见的页面。Servlet生命周期包括加载、初始化、服务、销毁等阶段,可以根据...
在Java Web应用中,部署描述符是配置文件,定义了应用程序的行为,包括Servlet和JSP的映射、过滤器、监听器等设置。它是应用程序部署的关键组成部分。 **Java_ee_javadocs** 这个文件可能是Java EE的API文档,包含...
《基于JSP/SERVLET/JAVABEAN的网上书店系统详解》 在现代互联网技术中,JSP(JavaServer Pages)、Servlet和JavaBean是构建动态Web应用的重要组件,尤其在实现 MVC(Model-View-Controller)设计模式时,它们扮演着...