Struts2项目的构建与配置
1. 配置struts.xml
(1) 配置struts.xml可以参考下载的struts-2.3.14.1-all.zip解压后的apps文件夹下的
参考项目的struts.xml文件。 (2) 主要的配置如下:
了配置时服务器会自动加载修改后的配置,不需要中期服务器,方便开发。 (3) namespace=\与浏览器的访问地址有关,namespace的默认值为空。
(4)
问地址有关,当地址是“http://?/hello”时,浏览器就会返回result中的hello.jsp的页面。
2. 配置web.xml
(1) 配置web.xml也可以参考下载的struts-2.3.14.1-all.zip解压后的apps文件夹下的
参考项目的web.xml文件 (2) 主要配置如下:
org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
3. 配置Struts2的jar包
(1) 复制下载的struts-2.3.14.1-all.zip解压后的apps文件夹下的参考项目的
WEB-INF\\lib文件夹下的所有的jar包到我们自己项目的WEB-INF\\lib文件夹下即可。
Struts.xml的配置
1. package的属性与配置
(1) package的使用说明:类似于Java程序里的package,主要用于区分同名的action。在真
正的项目开发中package通常来区分不同的模块。例如:
(2) name属性:用于区分不同的package,此属性不能省略不写。
(3) extends属性:用于继承其他的package,继承了某个package就包含了某个package里
的所有配置,此属性可以省略不写,默认继承struts-default。
(4) namespace属性:表示浏览器访问的路径,此属性可以省略不写,默认为空,当此属性
为空时,该package里的action可以匹配浏览的任何请求的action。
(5) abstract属性:此属性的值为false表示此package非抽象的,若为true表示此package
为抽象的。
2. action的属性与配置 (1)action的使用说明:action是配置在package里的,一个package可以配置多个action,
每一个action都可以处理一种请求,通常一个action就是一个含有public String execute()方法的Java类,根据execute方法的不同的返回值来返回相应的页面给用户。例如:
(2)name属性:定义action的名称,也表示浏览器访问的路径。
(3)class属性:定义该action所对应的具体的Java类,其值是具体的Java类的路径。 (4)method属性:定义该action调用Java类的具体方法,调用的方法的返回类型必须是String
类型,如果用户没有定义该属性,则默认调用execute方法。 (5)method动态方法调用(BMI)
可以在浏览器地址栏里动态的指定调用action的那一个方法,如: http://localhost:8080/Struts2/hello/hello!add。 调用格式为:http://?/action名!方法名
(6)使用通配符动态调用action及其方法并动态的返回页面
例如:
第一个action所对应的Java类已确定是:com.lzw.HelloAction。但是对于不同的请求会调用该Java类里的不同的方法,并返回不同的页面,如:http://?/hello/hello_add,会调用add()方法,并返回hello_add.jsp页面;若想调用execute()方法,就会返回hello_execute.jsp页面,对应的请求就是:http://?/hello/hello_execute。
第二个action所对应的Java类并未确定,此action更为灵活,会根据不同的请求调用不同的action(即:Java类)以及其不同的方法,并返回不同的页面。如在浏览器的地址栏输入:http://?/hello/User_add,就会调用com.lzw.UserAction类里的add()方法,并返回User_add.jsp页面。
注意:在项目开发的时候一定要谨记“约定优于配置”原则,要约定好各个文件、方法以及类的起名规则!!! (7)请求向action传递参数
例如:action里含有两个属性name与age,并且含有相应的get与set方法,则请求:http://?/hello/hello_add?name=lizhiwei&age=12,会把“lizhiwei”与“12”通过set方法赋值给name与age。当action里还有一个属性u而且这个属性不是基本类型,而是User类型(用户自定义类型),该类型里也含有name与age属性和相应的set与get方法,若要通过请求的方式给u对象赋值,则请求如下:
http:// ?/hello/hello_add?name=lizhiwei&age=12&u.name=li&u.age=13,该请求会使得u的name属性值为li,age值为13。
注意:通过这种方法一定要定义好相应的set与get方法,否则无法传值!!! (8)action实现ModelDriven
户自定义类型),该类型里也含有name与age属性和相应的set与get方法,若要通过请求的方式给u对象赋值;由于action实现了ModelDriven
public User getModel() { return u; }
(9)参数传递的乱码简单解决方式:在struts.xml配置如下代码:
根据配置value的值来配置编码,但是请求方式应尽量使用post,避免使用get。
注意:此方式在某些Struts2版本中使用时并不能解决问题,是因为那些版本存在bug。本次实验使用的是struts-2.3.14.1版本,能够成功解决乱码问题! (10)action的简单数据验证
如果action需要对接收到的参数进行验证,而要把验证到的信息返回给页面显示,常用且简单的做法是让此action继承ActionSupport,并在方法里增加相应验证代码,例如:
public String add() { if(name==null || \.equals(name)) { this.addFieldError(\, \参数不能为空!\); } return \; }
其中的this.addFieldError(\, \参数不能为空!\)就是向Value Stack Contents里添加
错误信息(也可以向一个参数名添加多个错误信息),添加的信息可以在页面里取出来。在页面里取出错误信息的代码如下:
当错误信息不为空时,错误信息就会显示出来,但是要想使用这些标签必须还要在页面里添加以下代码: <%@taglib uri=\ prefix=\%>
(11)在action里访问Web元素(request、response、session、application等)
a) 例如:用户登录后action把用户名放到session里,在action里的主要代码如下:
private Map
在前台JSP页面里取的name值得代码如下:
<%String name=(String)session.getAttribute(\);%> <%=name %>
也可也使用Struts2的标签取得name值,具体代码如下:
注意:上面action里得到的session对象并不是真正服务器里的session对象,且该session对象是Map类型的,它只是Struts2模拟的session,只是Struts2能够把开发对此session的操作映射到真正的session上去。所以操作此session是等效的。 b) 第二种在action里取得Web元素的方法,此时的action要实现SessionAware接口,
并重写里的setSession方法,具体实现如下:(此种方式最常用)
public void setSession(Map
{session=arg0;}
private HttpServletRequest request=ServletActionContext.getRequest(); private HttpSession session=request.getSession();
private ServletContext application=session.getServletContext(); c) 第三种在action里取得Web元素的方法,此方法并不常用,代码如下:
d) 第四种在action里取得Web元素的方法,此方法是action实现ServletRequestAware
接口,重写如下方法:(此方法也不常用)
public void setServletRequest(HttpServletRequest arg0) { HttpServletRequest request=arg0; HttpSession session=request.getSession(); ServletContext application=session.getServletContext(); } (12)默认action的配置
例如下面的配置:
使用了default-action-ref定义了默认的action,定义默认action后,当用户访问此
namespace下的不存在的action时,这些请求都会交给默认的action处理。 3. result的属性与配置 (1) 使用说明:result是配置在action里的,用来定义action的处理后返回给用户的页面。
例如:
(2) name属性:action处理请求会返回一个字符串与此属性的值匹配,若匹配成功服务器
就会返回该result所映射的页面。此属性的常用值有 :\、none、error、input、login\;默认值是success。 (3) type属性:此属性的值与页面的跳转方式有关,此属性值有:chain、dispatcher、freemarker、
httpheader、redirect、redirect-action、stream、velocity、xslt、plaintext,其中最常用的有:dispatcher、redirect、chain、redirect-action。其具体的含义如下:
dispatcher:是默认值,表示服务器跳转,只能跳转到页面,不能是action。 redirect:客户端跳转到页面,不能是action。 chain:表示服务器跳转到一个action。 redirect-action:客户端跳转到action。 (4) 配置全局的result,例如:
配置了global-results在一个package内的所有的action里就都含有了这些result的配
置,相当于这个package里所有的action共用这些result。 (5) 利用result动态的返回结果集,配置如下:
使用“$”与“{}”来动态的得到跳转的页面路径,其中的参数“r”就是action里的
相关推荐: