public class UserAction2 extends ActionSupport {
// Action中业务处理方法
public String login() {
System.out.println("UserAction.login()");
// return "success";
return SUCCESS;
}
}
public class UserAction3 implements Action {
// Action中业务处理方法
public String login() {
System.out.println("UserAction.login()");
return "success";
}
@Override
public String execute() throws Exception {
return null;
}
}
public class UserAction {
private String userName;
public void setUserName(String userName) {
this.userName = userName;
}
// Action中业务处理方法
public String login() {
System.out.println("UserAction.login()" + userName);
return "login";
}
public String register() {
System.out.println("register()" + userName);
return "register";
}
}
在struts配置信息中,可以用*与{1}来优化配置
struts.xml:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN" "http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
<package name="config" namespace="/" extends="struts-default" abstract="false">
<!-- <action name="login" class="cn.itcast.a_config.UserAction" method="login"> <result name="success">/index.jsp</result> </action> <action name="register" class="cn.itcast.a_config.UserAction" method="register"> <result name="success">/index.jsp</result> </action> -->
<!-- 使用通配符优化上面的步骤 -->
<!-- http://localhost:8080/struts02/user_login -->
<action name="user_*" class="cn.itcast.a_config.UserAction" method="{1}">
<result name="{1}">/{1}.jsp</result>
</action>
</package>
</struts>
<struts>
<package name="config" namespace="/user" extends="struts-default" abstract="false">
<action name="user_*" class="cn.itcast.a_config.UserAction" method="{1}">
<result name="{1}">/{1}.jsp</result>
</action>
</package>
</struts>
访问路径: http://localhost:8080/struts02/user/user_login 正确
访问路径: http://localhost:8080/struts02/user/a/b/user_login 正确
访问路径: http://localhost:8080/struts02/a/b/user/user_login 错误
分析:
http://localhost:8080/struts02/user/a/b/user_login
Tomcat
Localhost 找到访问哪一台机器
8080 找到Tomcat服务器
struts02 找到项目名称
/user/a/b 先看有没有这个名称空间,没找到,继续向下;找到就返回
/user/a 先看有没有这个名称空间,没找到,继续向下;找到就返回
/user 先看有没有这个名称空间,没找到,继续向下;找到就返回
/ 默认名称空间,还没找到,报错!找到就返回
struts中默认访问后缀:
struts1中默认访问后缀是*.do
struts2中默认访问后缀是*.action
如何修改默认访问后缀?
1. struts2的.action访问后缀在哪里定义?
struts2-core-2.3.4.1.jar/org.apache.struts2/default.properties文件中有
struts.action.extension = action,,
2.在struts.xml中通过配置常量修改
<struts>
<!-- 一、全局配置 -->
<!-- 1. 修改Struts默认的访问后缀 -->
<constant name="struts.action.extension" value="action,do,"></constant>
</struts>
上述配置指定访问后缀为action/do或没有访问路径都可以
1. 指定默认编码集,作用于HttpServletRequest的setCharacterEncoding方法 和freemarker 、velocity的输出
<constant name="struts.i18n.encoding" value="UTF-8"/>
2. 自定义后缀修改常量
<constant name="struts.action.extension" value="do"/>
3. 设置浏览器是否缓存静态内容,默认值为true(生产环境下使用),开发阶段最好关闭
<constant name="struts.serve.static.browserCache" value="false"/>
4. 当struts的配置文件修改后,系统是否自动重新加载该文件,默认值为false(生产环境下使用),开发阶段最好打开
<constant name="struts.configuration.xml.reload" value="true"/>
5. 开发模式下使用,这样可以打印出更详细的错误信息
<constant name="struts.devMode" value="true" />
6. 默认的视图主题
<constant name="struts.ui.theme" value="simple" />
7. 与spring集成时,指定由spring负责action对象的创建
<constant name="struts.objectFactory" value="spring" />
8. 该属性设置Struts 2是否支持动态方法调用,该属性的默认值是true。如果需要关闭动态方法调用,则可设置该属性为 false
<constant name="struts.enable.DynamicMethodInvocation" value="false"/>
9. 上传文件的大小限制
<constant name="struts.multipart.maxSize" value=“10701096"/>
动态方法
动态方法调用语法:
actionName+! 即为动态与法调用
<!-- 动态方法调用: http://locahost:8080/struts02/user!login -->
<action name="user" class="cn.itcast.b_config2.UserAction">
<result name="success">/index.jsp</result>
</action>
<!-- 配置全局跳转视图 -->
<global-results>
<result name="success">/index.jsp</result>
</global-results>
<action name="test" class="cn.itcast.b_config2.TestAction" method="execute">
<!-- 返回结果标记success对应的页面再当前action中没有配置, 所以会去找全局配置有是否有success标记对应的页面 -->
</action>
<!-- 配置各项默认值 -->
<!-- name 只配置了访问路径名称 class 默认执行的action在struts-default有配置 <default-class-ref class="com.opensymphony.xwork2.ActionSupport" /> method 默认为execute 默认的方法execute返回值为success,对应的页面去全局视图找。 -->
<action name="test"></action>
<!-- 什么情况不配置class? 即处理的aciton -->
<!-- 答案: 当只是需要跳转到WEB-INF下资源的时候。 -->
<action name="test2">
<result name="success">/WEB-INF/index.jsp</result>
</action>