Struts请求处理流程
请求先被struts过滤器拦截下来,然后在struts中做处理,如果处理中未发现请求的地址,再发回tomcat服务器 让tomcat处理
自定义action
给在struts.xml中 action类添加class属性,指定处理的类,默认会调用这个类的execute方法,这个类可以是一个普通的java类。
如果不配置class,默认的用actionSupport来处理。
还可以实现action接口来定义一个action实现类,不经常用。
如果想运行自定义方法而不是execute方法,那么直接可以在action定义该方法,这个方法,的返回值是String类型,修饰字符串类型public
如果返回字符串是’xxx’ ,那么struts会在该action中寻找,result中name是’xxx’,如果没有,会有错误。
在action 中配置method 属性 ,指定调用方法。
在struts2中每次请求都会创建一个action对象,所以不存在线程安全问题。
DMI 动态方法调用
用于开发或者企业内部软件使用,因为很容易就会让人发现是用struts,所以一般外部不用。
在struts.xml中 配置
<constant name="struts.enable.DynamicMethodInvocation" value="true" />
通配符
<action name="*-*" class="struts.demo.DemoAction"> <result name="{1}">/{2}.jsp</result> </action>
这里的*会按顺序替换{1},{2},例如,请求的action 为user-input
{1}是user {2}是input 减少result的配置
NameSpace
Namespace决定了访问路径,默认为””,可以接受所有路径的action
Struts请求action默认带后缀名action,可以不写。
Namespcce可以写为”/”, ”/xxx”,”/xxx/yy”,对应的action访问路径为/index.action.
Namespace一般用模块来进行命名
Package 标签的作用和java中的package作用一致,区分重复的情况,package的名字与namespace的名字一般是一致的,以模块的名称来命名
路径问题
Struts中,相对路径是从action算起,所以使用绝对路径。
JSP中’/’的地址表示的是服务器根地址,不是应用根地址
绝对路径的获取
String basePath = request.getScheme() + "://"+ request.getServerName() + ":" + request.getServerPort + "/" + request.getContextPath() ;