Struts的namespace
示例工程Struts2_0200_Namespace Struts.xml
所以namespace为空意味着:只要找到一个index.action,没有找到精确的对应的namespace,全部都交给namespace为空的这个package去处理,所以这个package囊括了其他所有package处理不了的action。
Struts自定义具体视图的返回
示例工程Struts2_0300_Action
修改jsp模板字符编码:windows-preferences- JSP 修改编码为UTF-8即可
IndexAction1.java
public class IndexAction1 { }
public String execute() { }
return \;
- 6 -
IndexAction2.java
public class IndexAction2 implements Action { }
真正企业开发只用这第三种!另外两种忘记! IndexAction3.java
public class IndexAction3 extends ActionSupport { }
class=\>
public String execute() { }
return \; public String execute() { }
return \;
具体视图的返回可以由用户自己定义的Action来决定
具体的手段是根据返回的字符串找到对应的配置项,来决定视图的内容
具体Action的实现可以是一个普通的java类,里面有public String execute方法即可 或者实现Action接口
不过最常用的是从ActionSupport继承,好处在于可以直接使用Struts2封装好的方法
如果不配置class属性,默认执行xwork框架的ActionSupport这个action,这个action就有execute这个方法,return success。
- 7 -
Struts路径问题
示例工程:Struts2_0400_Path
struts2中的路径问题是根据action的路径而不是jsp路径来确定,所以尽量不要使用相对路径。
虽然可以用redirect方式解决,但redirect方式并非必要。 解决办法非常简单,统一使用绝对路径。
(在jsp中用request.getContextRoot方式来拿到webapp的路径) 或者使用myeclipse经常用的,指定basePath
先点击链接http://localhost:8080/Struts2_0400_Path/path/path.action 跳转到path.jsp 页面 在path.jsp页面上有链接
如果改成
<%
String path = request.getContextPath(); String basePath =
request.getScheme()+\+request.getServerName()+\+request.getServerPort()+path+\;%>
request.getContextPath()会拿到webapplication的名称:Struts2_0400_Path request.getScheme()拿到“http”字符串 request.getServerName()拿到“localhost” request.getServerPort()拿到“8080”
- 8 -
动态方法调用
Action执行的时候并不一定要执行execute方法
可以在配置文件中配置Action的时候用method=来指定执行哪个方法 也可以在url地址中动态指定(动态方法调用DMI)(推荐)
/user/userAdd\>添加用户 /user/user!add\>添加用户
前者会产生太多的action,所以不推荐使用
/user_add_success.jsp - 9 - 实验二:Action接收参数的方式 Action有三种接收参数的方式 1. 属性接收参数 2. 用DomainModel(实体模型)接收参数 3. 用ModelDriven接收参数( 不常用 ) 用Action的属性接收参数 Struts2_0700_ActionAttrParamInput Index.jsp
使用action属性接收参数添加用户