天天看点

Struts笔记

struts笔记

mvc 模式

struts 应用,流程

form.

标签

1 strutsmvc 框架

(1)web 应用的分层:

交互层:用来接受请求,收集,表现数据.也就是视图层,通过处理层完成相应的响应.(v,c)

处理层:业务层,完成对数据的处理(m).

(2)mvc 设计模式:应用观察者模式的框架模式

model:模型层,这一层一般是进行数据库访问,并且封装对象,这一层中也存放在访问数据库

取出信息封装成对象的类也就是实体类的信息,可以使用jdbc 或hibernate 实现这一层的功

能.

control:控制层,用来控制请求的响应和调用写好的相应的访问数据库的方法,我们现在用

servlet 来实现这一层,以后会用开源的mvc 框架来实现这层.例如struts.

view:表现层,用来显示数据和收集必要数据,收集数据的一般是form 表单,可以通过

javascript 验证收集的数据是否正确.可以servlet,jsp

好处:解耦合,各司其职,可维护,最大限度可复用性.

(3)mvc 框架的实现模型:2 种

模型一:

jsp+javabean:以页面为核心,jsp 既充当控制,又充当视图,jsp 使用jsp:usebean,不能够实现

不同的页面,显示不同的数据,需要借助于中间类来调用javabean 的方法才能实现.

模型二:

jsp+servlet+javabean:以控制为核心,jsp 只负责收集和显示数据,sevlet 连接视图和模型,将

视图层数据发送给模型层,javabean 分为业务类和数据实体,业务类处理业务数据,数据实体

承载数据.基本上大多数的项目都是使用mvc 这种实现模式.

(4)struts 是使用mvc 的实现模式二来实现的,也就是以控制器为核心。

struts 提供了一些组件使用mvc 开发应用程序:

model:struts 没有提供model 类.这个商业逻辑必须由web 应用程序的开发者以javabean

或ejb 的形式提供

view:struts 提供了actionform 创建form bean,用于在controller 和view 间传输数据.此

外,struts 提供了自定义jsp 标签库,辅助开发者用jsp 创建交互式的以表单为基础的应用程

序.

controller:struts 提供了一个核心的控制器actionservlet,通过这个核心的控制器来调用其

他用户注册了的自定义的控制器action,自定义action 需要符合struts 的自定义action 规范,

还需要在struts-config.xml 的特定配置文件进行配置,接收jsp 输入字段形成actionform,然后

调用一个action 控制器.action 控制器中提供了model 的逻辑接口.

actionform 是可以自动将表单中的数据封装成对象,当然,一个自定义actionform 也是

要遵守struts 规范的,也就是要继承于actionform,并在以上的struts-config.xml 进行配置。

actionform 中有个validate()方法如果空: 正常

如果有错,返回actionerror 对象,跳到哪个页面<action> 中有个属性:input: 转到那个页面

actionerrors: add 方法加actionmessage.

2 基于struts 的web 应用

(1)步骤:环境8 个jar 包

(2)web 应用web.xml,写配置文件struts-config.xml 配置action

//struts-1.2.9-src.zip 文件中的web/examples/web-inf/web.xml 就是样板文件

(3)写自定义的action

web.xml

<servlet>

<servlet-name>action</servlet-name>

<servlet-class>org.apache.struts.action.actionservlet</servlet-class>

<init-param>

<param-name>config</param-name>

<param-value>/web-inf/struts-config.xml</param-value>

</init-param>

</servlet>

<servlet-mapping>

<url-pattern>*.do</url-pattern>

</servlet-mapping>

struts-config.xml:

在struts-config.xml 文件中的配置,解析配置文件中,配置文件的action 标签就会被映射成

actionmapping 对象。

<struts-config>

<form-beans>

<form-bean name="xxx" type="actionform 的类全名">

<form-bean name="loginform" type="basic.loginform">

</form-beans>

<action-mappings>

<action path="/basic/login" type="alan.struts.basic.loginaction"

name="xxx" scope="request|session(默认值)">

<forward name="success" path="/basic/success.jsp"/>

<forward name="fail" path="/basic/fail.jsp" redirect="false"(重定向,默认false)/>

</action>

<action path="action 的路径,在form 的action 中写的那个路径" type="action 的类全名">

<forward name="在自定义的action 中使用的findforward 方法的参数" path="跳转页

面的路径"/>

<forward name="xxx" path="xxx/xxx.jsp"/>

</action-mappings>

</struts-config>

自定义action:

action

|

dispatchaction

| |

mappingdispatchaction lookupdispatchaction

dispatchaction 不希望配置文件很长,要传参数

dispatchaction 类的自定义的action 类, 会共享同一的action 路径, 也只能共享一个

actionform,

如果加上校验,会产生form 表单的参数不一致的情况,会导致校验无法通过。

共享同一路径它不知道调哪个方法,所以要传参数.

register.jsp <hidden name="method" value="register" //方法名>

motify.jsp <hidden name="method" value="motify" //方法名>

<action parameter="method"> //隐藏域的名字相对应

dose not hava a handler parameter 异常

使用隐藏域为struts 传递参数要调用自定义action 中方法的方法名,是通过与strutsconfig.

xml 中action 标签中的parameter 和name 属性相对应来获取隐藏域的value。

别去覆盖父类中的execute 方法.

mappingdispatchaction 匹配多个action 路径,不到处传参数,解决共用actoinform 的校验问

<action path="/add" type="myaction" parameter="add">

<!--parameter 属性是指定调用方法的名字-->

<forward name="add" path="/add.jsp"/>

<action path="/del" type="myaction" parameter="del">

<forward name="del" path="/del.jsp"/>

在jsp 页面中也不用在使用隐藏域传递参数,直接在form 中的action 中就可以直接使用

xxx.do 匹配了。

<form action="add.do" method="post">

<input type="submit" value="submit"/>

</form>

<form action="del.do" method="post">

lookupdispatchaction: 解决多按钮提交问题

是通过使用资源文件,用submit 按钮的value 来作为资源文件中的key 所对应的值,

通过这个值来找到对用的key,在使用这个key 来获得指定map 中所对应的值,

这个值就是要调用的方法名。

jsp struts-config.xml

dispatchaction 请求参数<action parameter="请求中参数名">

mappingdispatchaction 请求路径<action parameter="action 中的方法名字">

这样写配置文件长

lookupdispatchaction 请求路径getkeymethodmap() <action parameter="页面上按钮的

名字">key=按钮的文本

继续阅读