struts一直显示jsp文件未找到_第十章 MVC 和 Struts 基本原理

  1. MVC 和 Struts 基本原理

(一)MVC

1.MVC 模式 MVC(Model、View、Controller),是软件开发过程中比较流行的设计思想。

在了解 MVC之前,首先明确一点,MVC 是一种设计模式(设计思想),不是一种编程技术

2.

1、纯JSP的模型架构

cc0554e46134ac4c51380a01a26d3704.png

2、JSP+servlet模型架构

基于该问题,可以将这个JSP拆成三个模块来实现。

首先编写JSP,负责输入查询代码,提交到Servlet,Servlet进行安全验证,调用DAO来访问数据库,得到结果,跳转到JSP显示。

这种方法虽然前期设计比较复杂,但是有以下的特点:

A. 适合分工,每一个程序员只需要关心自己所需要关心的那个模块

B. 维护方便,例如需要修改其中的一个部分,对相应的模块进行修改就可以了

对比这两种方案,可以发现,第2种方案把程序分为不同的模块,显示业务逻辑过程控制都独立起来,使得软件在可伸缩性和可维护性方面有了很大的优势。

如要改变外观显示,只需要修改JSP就可以了;

修改验证方法,只需要修改Servlet就可以了;

数据库迁移只需要修改DAO就可以了,这种思想就是MVC思想

3.

MVC 思想:

(1)编写 JSP,负责输入查询代码,提交到 Servlet,

(2)Servlet 进行安全验证,调用 Dao 来访问数据库,

(3) 数据库 得到结果,跳转到 JSP 显示

4.M(Model):主要是完成数据维护,也就是数据的增删改查的操作。

封装应用程序的数据结构和事务逻辑,集中体现应用程序的状态,当数据状态改变的时候,能够在视图中体现出来,JavaBean非常适合这个角色

V(View):主要是完成向用户表达结果、表达数据,从用户那里取得用户希望执行的动作。是Model的外在表现,模型状态改变时有所体现,JSP非常适合这个角色

C(Controller):连接视图与模型之间的关系,当视图希望使用模型当中数据的时候,它会通过对模型进行一个调用,来完成数据的查询。

也就是说对用户的输入进行响应,将模型和视图联系到一起,负责将数据写到模型中,并调用视图。Java Servlet非常适合这个角色

  1. MVC它着重解决的问题是隔离用户界面层与数据处理层,

使得开发者在维护界面和数据处理之间的耦合度大大的降低,便于我们软件按照模块化进行开发,便于团队的合作开发,也便于我们能够提供一些成熟的成型的产品,

所以MVC设计模式在java中运用得非常多

29429b3425ae3a6cdef060aacb25c9e6.png
  1. 工作步骤为:

(1)用户在表单中输入,表单提交给 Servlet,Servlet 验证输入,然后实例化 JavaBean

(2)JavaBean 查询数据库,查询结果暂存在 JavaBean 中

(3)Servlet 跳转到 JSP,JSP 使用 JavaBean,得到它里面的查询结果,并显示出来

  1. Struts框架

1.Struts 框架简介

Struts 是为了规范 MVC 开发而发布的一个框架。

类似的框架还有 WebWork、SpringMVC 等。

要编写基于Struts框架的应用,需要导入一些支持的包,也就是Struts开发包。这些开发包可以到网上去下载。下载地址为:“http://struts.apache.org/”http://struts.apache.org/

其中MyEclipse给我们提供了对struts框架的支持

  1. Struts 框架原理

cda0e56380cd57aadb0ab47df74f7d47.png

d5a1f0876d62bee96d0e7309cc4fc5fa.png

cd3cbd7ebe0683d78e8b3a0f9f5f8a10.png

对于一个动作,其执行步骤为:

(1) 用户输入,JSP 表单 提交给 ActionServlet

(2)ActionServlet 将表单信息封装在 ActionForm 内, 转交Action

(3)ActionServlet 不直接处理业务逻辑, 让 Action 来调用JavaBean(DAO)

(4)Action 返回要跳转到的JSP 页面地址 给 ActionServlet

(5)ActionServlet 进行跳转,结果在 JSP 上显示

  1. Struts 框架的基本使用方法

(一)导入 Struts 框架

1.MyEclipse—Project Capabilities—Add Struts Capabilities

2.Struts config path: Struts 配置文件的路径,一般不改

3. Struts specification: Struts 框架的版本。

Struts 目前比较流行的版本是 Struts1.2 或者 Struts1.3,它们风格类似;Struts2.x 也越来越流行,但是和 1.x 相比,风格具有较大的改变

4. ActionServlet name: ActionServlet 在 web.xml 配置时的名称,一般不改

5.URL pattern:调用 ActionServlet 时的路径,一般选择"*.do"

6.Base package for new classes:新建的类所放的包的名称,可以不改

7.Default application resources: Struts 资源文件的路径,使用系统默认的就可以

(二)编写 JSP

(三)编写并配置 ActionForm

1.写完JSP接下来,ActionServlet将表单提交的信息封装在ActionForm内,转交给Action。

2.此时需要编写ActionForm来容纳表单里面的数据,在包prj10内新建一个类LoginForm.java

3.ActionForm 的编写,必须要满足一定的规范:

(1)必须继承 org.apache.struts.action.ActionForm

(2) ActionForm 内可能封装的表单元素有很多,要得到它们的值,必须编写和表单元素同名的属性

  1. 编写并配置 Action

1.Struts框架中,要将ActionForm转交给Action来处理,Action是负责业务逻辑的。

2.要成为一个 Action,必须要满足一定的规范:

(1) 必须继承 org.apache.struts.action.Action

  1. 必须重写 execute 方法来处理业务逻辑
  1. 重写execute方法,是因为Action接收数据后,由ActionServlet自动调用它的execute方法,该方法的运行,在底层通过发射机制进行。

execute 的格式为:

public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {

}

后两个参数 request 和 response,是比较常见的,这两个参数是 web 容器中的内置对象。

Mapping 参数的作用是访问配置文件,

form 是传过来的 ActionForm 对象,用于得到 ActionForm 中封装的数。

ActionForward 封装跳转的目标路径

(五)程序运行的流程

1.login.jsp 中的 表单 提交到 的地址为 "/Prj10/login.do" , 提交给 ActionServlet , ActionServlet 把提交的地址中的项目名称和扩展名".do"去掉,变为"/login",读取配置文件

  1. 在配置文件中,根据"/login",找到配置文件中的 action 对应的类,从而得到要提交到的 LoginAction;通过 action 的 name 属性值 loginForm,找到对应的 LoginForm 类
  2. 将表单数据封装为一个 LoginForm 对象,提交给 LoginAction
  3. ActionServlet 调用 Action 的 execute 方法,处理后返回一个 ActionForward 对象给

ActionServlet ,ActionServlet 跳转到相应的页面

  1. 一些思考

从前面可以看出,login.jsp提交给login.do,login.do是在配置文件中出现的,ActionForm是通过name属性和LoginAction联系起来的,所以说JSP和Action的耦合度很低,它们的开发者都只要知道配置文件就可以了,另外,该框架中,技术含量最高的是ActionServlet,它可以读取配置文件,但是它的内容被框架化,在底层已经实现了,不需要程序要去编写,这样就带来了很大的方便

(七)几个问题

1. 能否不将表单数据封装到 LoginForm?

答案是可以的。可以在配置文件中,将 action 配置的 name 属性去掉,

而在 LoginAction 中使用传统的 request 得到参数值。此时,LoginAction 中得到数据的代码为:

String sname = request.getParameter("account");

(1)在配置文件中,将 action 配置的 name 属性去掉

c6023cd0346ebea3c34dcc95a38cf12a.png
  1. Action 中,execute 的 ActionMapping 参数有何作用?

ActionMapping 参数的作用是访问配置文件。比如, Action 中跳转到的目标发生了改变,此时如果修改 LoginAction 的源代码,比较麻烦,因此,可以将跳转目标 配置文件中进行配置

配置文件Struts-config.xml

ce3069d8aa5a47a3dbd6611705a7349c.png

LoginAction。java

debc7eb9c8bd486c602cfc911eafc818.png
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值