struts2配置
一、action有几种开发方式?
(1)继承ActionSupport。如果用struts处理数据校验,必须继承此类。一般采用这种方式。
(2)实现Action接口。
(3)不继承任何类,不实现任何接口。
二、通配符(优化action配置)
<action name="user_*" class="#" method="{1}"> <result name="{1}">/{1}.jsp</result> </action>
当字符串为user_login,则调用login.jsp。当字符串为user_register,则调用register.jsp。
注意:加入命名空间后,访问路径需要加上命名空间。
三、struts中的路径匹配原则
<action name="user_*" namespace="/user" class="#" method="{1}"> <result name="{1}">/{1}.jsp</result> </action>
路径:http://localhost:8080/mystruts/user/a/b/user_login
Tomcat解析路径:
(1)localhost 访问哪一台机器
(2)8080 访问这台机器的哪个端口,也就是根据此端口找到Tomcat
(3)mystruts 项目名
(4)看是否有这个名称空间 /user/a/b 否
(5)看是否有这个名称空间 /user/a 否
(6)看是否有这个名称空间 /user 是,如果否的话,就去匹配默认的/,还没找到就会报错。
(7)然后去/user下找user_login。
所以,当路径不对的时候,(在名称空间后加路径,是可以找到资源的),可以正确访问。
四、struts常量
(1)修改访问的默认后缀名(默认的.action)
struts.xml文件中。此代码既可以没有后缀访问,也可以.action访问。
<constant name="struts.action.extension" value="action,,"></constant>
(2)只能action访问
<constant name="struts.action.extension" value="action"></constant>
(3)既可以.action访问,也能.do,也能省略。
<constant name="struts.action.extension" value="action,do,"></constant>
五、struts中数据处理几种方式
(1)
//方式1 HttpServletRequest request = ServletActionContext.getRequest();//ctrl+2+l HttpSession session = request.getSession(); ServletContext application = ServletActionContext.getServletContext(); //操作 request.setAttribute("request_data","request"); session.setAttribute("session_data", "session"); application.setAttribute("application_data","application");
(2)后面两个比较常用(2)(3)。
ActionContext context = ActionContext.getContext(); Map<String, Object> request = context.getContextMap(); Map<String, Object> session = context.getSession(); Map<String, Object> application = context.getApplication(); request.put("request_data","request"); session.put("session_data", "session"); application.put("application_data","application");
(3)实现requestAware/sessionAware/ApplicationAware。优化的项目的时候用。
public class DataAction extends ActionSupport implements RequestAware,SessionAware,ApplicationAware{ private Map<String, Object> request; private Map<String, Object> session; private Map<String, Object> application; @Override public String execute() throws Exception { //操作 request.put("request_data","request_data_Aware"); session.put("session_data", "session_data_Aware"); application.put("application_data","application_data_Aware"); //方式2 return SUCCESS; } @Override public void setApplication(Map<String, Object> application) { this.application = application; } @Override public void setSession(Map<String, Object> session) { this.session = session; } @Override public void setRequest(Map<String, Object> request) { this.request = request; } }
在jsp界面获取:
${request_data}
${session_data}
${application_data}
遇到的错误:
There is no Action mapped for namespace [/] and action name [Login] associated with context path [/eprint]
做如下检查:
1、确保struts.xml文件名大小写正确:struts.xml
2、确保struts.xml文件在src目录下(很重要!后面就着重说这个)