标签:java web struts servlet mvc
使用filter 作为控制器的mvc。
使用filter作为控制器的好处:使用一个过滤器来作为控制器,可以方便的在应用程序里面对所有资源进行控制访问。
Servlet VS Filter
1.servlet能做的filter都可以完成
2.fileter能做的servlet不一定,拦截资源却不是servlet所擅长的,filter又一个filerchain,这个api在servlet中没有
resutl 的type属性值在stuts-defutlt.xml中
chain dispatcher(默认) redirect redirectAction
搭建struts2 3步骤:
1.导入jar包:复制struts\apps\struts-blank\web-inf\lib下的所有jar包到当前web应用的lib目录下
2.在web.xml 文件中配置struts2:复制struts\apps\struts-blank\web-inf\web.xml文件中的过滤器的配置到当前web应用的web.xml文件中
3.在单亲web应用的classpath下添加struts2的配置文件夹struts.xml:struts\apps\struts-blank\web-inf\classes下的stuts.xml文件到当前web应用的src目录下。
如果没有提示信息,可以设置导入dtd文件。
action VS Action 类
1.action:代表Struts2的一个请求
2.Actionl类:能够处理Struts2请求的类
》属性的名字必须遵守与javaBean属性名相同的命名规则。
属性的类型可以是任意类型。从字符串到费字符串(基本数据类型)之间的数据转换可以自动发生
》必须又一个不带参数的构造器:通过反射创建实例
》至少又一个共Struts在执行这个action时期调用的方法
》同一个action类可以包含多个action方法
》sturts会为每一个http请求创建一个新的action实例,及action不是单例的,是线程安全的。
在action中访问web资源:
1)什么是web资源
HttpServletRequest,HttpSession,ServletContext等原生的Servlet API
2)为什么访问Controlier
B\S的应用的controller中必然需要访问web资源,想与对象中读写属性,读写cookie 获取realPath。。。。
3)如何访问?
和servlet api解耦的方式:只能访问有限的servlet api对象,切只能访问其有限的方法(读写请求参数,读写与对象的属性,是session失效)
使用ActionContext
实现XxxAware接口
ActionContext applicateionContext=ActionContext.getContext();
Map<String ,object> applicationMap=applicationContext.getApplication();
applicationMap.put(key,value);
获取时候用:
选用建议:若一个action类中有多个action方法,且多个方法都需要使用与对象的map或parameters,则建议使用aware接口的方式。seseion对应的map实际上是sessionmap类型的。墙砖后调用ivalidate()是session失效
和servlet api耦合的方式:可以访问更多servlet api对象,切可以调用其原生的方法。
使用servletactionContext 实现servletXxxxaware接口
关于Struts2请求的扩展名问题:
1)org.apache.struts2包下的default.properties中配置了struts2应用的一些常量
2)struts.action.extension定义了当前sturts2应用可以接受的请求的扩展名。
3)可以在struts.xml中已常量配置的反射修改default.property所配置的常量
<!-- 配置struts 可以受理的请求的扩展名 默认是action或者无扩展名 -->
<constant name="struts.action.extension" value="action,do,"></constant>
版权声明:本文为博主原创文章,未经博主允许不得转载。
标签:java web struts servlet mvc
原文地址:http://blog.csdn.net/itzhanghao/article/details/47808489