Struts请求处理流程java
请求先被struts过滤器拦截下来,而后在struts中作处理,若是处理中未发现请求的地址,再发回tomcat服务器 让tomcat处理tomcat
自定义action安全
给在struts.xml中 action类添加class属性,指定处理的类,默认会调用这个类的execute方法,这个类能够是一个普通的java类。服务器
若是不配置class,默认的用actionSupport来处理。jsp
还能够实现action接口来定义一个action实现类,不常常用。spa
若是想运行自定义方法而不是execute方法,那么直接能够在action定义该方法,这个方法,的返回值是String类型,修饰字符串类型public 线程
若是返回字符串是’xxx’ ,那么struts会在该action中寻找,result中name是’xxx’,若是没有,会有错误。code
在action 中配置method 属性 ,指定调用方法。xml
在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() ;