1. 除工程名外,其余部分分为2部分。一是用来对应package,二是用来对应package内的action。
2. Namespace决定了action的访问路径,默认为””,可以接收所有路径的action
nameSapce可以写为/,或者/xxx,或者/xxx/yy.对应的action访问路径为/index.action,/xxx/index.action,或者/xxx/yyy/index.action
namespace最好也用模块来进行命名
3. action:struct2中每次请求都会创建一个action。
4. 进入到action中
1) 若后面有Class,首先创建这个action的类,然后默认调用这个action类中的execute方法,根据返回String类型的值执行result,显示视图。
2) 若没有默认是ActionSupport类中的execute,其中的方法只返回success。
具体视图的返回可以由用户自己定义的Action来决定
具体的手段是根据返回的字符串找到对应的配置项,来决定视图的内容
1. 具体Action的实现可以是一个普通的java类,里面有public String execute方法即可
2. 者实现Action接口
3. 不过最常用的是从ActionSupport继承,好处在于可以直接使用Struts2封装好的方法
Path路径问题:
struts2中的路径问题是根据action的路径而不是jsp路径来确定,所以尽量不要使用相对路径。即在” http://localhost:8080/Struct_day1/path/”添加index.jsp
1. 解决办法非常简单,统一使用绝对路径。(在jsp中用request.getContextRoot方式来拿到webapp的路径)
2. 或者使用myeclipse经常用的,指定basePath
<%
String path = request.getContextPath();
String basePath =request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
在head中设置:
1. Action执行的时候并不一定要执行execute方法可以在配置文件中配置Action的时候用method=来指定执行哪个方法
2. 也可以在url地址中动态指定(动态方法调用DMI)(推荐)
前者会产生太多的action,所以不推荐使用
3. 使用通配符*:可将配置降到最低
1) 在action中根据分割的通配符会获得{1}、{2}… …参数。
2) 在method=”???”中可以使用通配符所得到的参数{1}、{2}… …
3) 在result中显示的资源也可以通过通配符拼接得到。
1. 用属性来接收:Struct在创建Action的实例时,直接将参数赋给了这个action的实例。(action类中有定义了接收参数的成员变量)。
2. DemainModel:通过一个对象来接收。Struct会帮我们自定创建对象。
1) 创建一个user bean
2) 在action中定义一个成员变量user,写get和set方法。
3)
4) 在Action中可直接通过user获得值。
3. 通过ModelDriven
1) action实现ModelDriven
2) 创建一user对象,并调用构造器创建实例。
3) 重写getMode()方法。
使用addFieldError方法和s:filedErrot标签简单处理数据校验。
1. Action中通过addFieldError(“name”,value)的方法,加如错误信息。即放入值栈中
2. 在jsp中通过s:fieldError、s:property两种方式通过name获得错误信息
获取request、session、application、HttpServletRequest、HttpSession、
ServletContext的引用:
1. 方式一通过ActionContext获取:(前三种)
1) Request的获取:ActionContext.getContext().get(“request”);
2) Session的获取:ActionContext.getContext().getSession();
3) Application的获取:ActionContext.getContext().getApplication();
4) 分别获得Map类型的对象,通过put(name,value)方法添加数据。
5) Struts2,会自动将map遍历添加到相应的域对象中。在前台可直接通过域对象获取。
2. 控制反转方式/依赖注入:(前三种)这种最常用,最重要
1) Action实现RequestAware、SessionAware、ApplicationAware。
2) 实现相应的get方法,获得的是Map类型的相应属性。
Struts2调用action的时候发现这个Action实现了RequestAware、SessionAware、ApplicationAware这些接口中的一个或多个。那么,struts2就需要调用他们的抽象方法,将对象向注入进去。
3. 方式三通过ServletActionContext获取(后三种)
4. 方式四,依赖注入(后三种)
意义:使网站更加友好。