Struts2中的Convertion插件是比较有用,它可以简化很多操作,比如不需要一个一个Action在struts.xml中设置。当然,最有意义的是它与rest插件一起整合使用,可以完成web-site中的restful操作。具体可以参考Struts包中的例子:
rest plugin的使用后面再写,先试下convertion plugin。由于struts的配置太多,只例出一些比较实用和常用的先,其它的之后再整理一下。
eclipse建j2ee工程就不屁话了。
1)加入包:struts2-convention-plugin-2.3.16.1.jar
最好把另一个包也加上(发布时要把它删除,不然别人就可以很容易就得到所有的action list):struts2-config-browser-plugin-2.3.16.1.jar
browser这个plugin可以用于查看当前web-site所有的struts action和明细。使用方法:
在浏览器地址栏上输入:
比如:
2)修改web.xml,加入Struts2的filter,这与普通的使用没区别。
struts2 org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter struts2 /*
3) 在src目录下新建一个struts.xml
这里最重要的的就这几个设置。(留意xml的注释)
需要说明一下的是这两个keyname=struts.enable.DynamicMethodInvocation,这个设置为true,就可以动态的调用action中的public方法,如果设置false,就不可以调用了。
name=struts.convention.result.path,这个设置的值是action对应的jsp文件所存放的目录所在地址。如果没有设置这个值,其实stutrs2默认就是/WEB-INF/content这个目录。
4)新建一个package:com.my.actions,及在这个package中新建一个LoginAction.java
package com.my.actions;import org.apache.struts2.convention.annotation.Action;import com.opensymphony.xwork2.ActionSupport;@SuppressWarnings("serial")public class LoginAction extends ActionSupport { private String username; public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } @Override public String execute() throws Exception { return SUCCESS; } public String test() { System.out.println("test"); return "test"; } public String edit(){ return "edit"; }}
5)在/WEB-INF/content目录下新建三个jsp:login.jsp、login-test.jsp、login-edit.jsp
login.jsp和login-test.jsp内容随便,login-edit.jsp的内容为:
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>Insert title here edit page. user: ${ requestScope.username }
主要用于打印username。
好了,完成了。
在浏览器中键入:
-- 这个是会自动定位到login.jsp
-- 这个会定位到test()方法
-- 这个会定位到edit()方法,同时传入一个username参数并在页面中显示。
事实上,我们还可以在LoginAction.java中再加一个@Action标注:
@Action("login-show") public String show(){ return "show"; }
这样就会有一个新的Action所产生,可以在浏览器中输入:
Action的明细可以在browser plugin中查看。
jsp的命名规则是<Action>-<Method>.jsp,如:login-test.jsp
很不喜欢方法的调用使用感叹号!还是使用rest吧哈。