Struts2是基于MVC设计模式的流行和成熟的Web应用程序框架。java
最新版本是Struts 2.5.5web
Struts2.x 部分jar文件说明apache
文件名称 | 描述 |
---|---|
struts2-core | struts2框架核心库包 |
xwork | 构建 Struts2 的 XWork 2 的库 (2.0及以上版本)。 |
ognl | 对象图导航语言(OGNL), 该表达式语言的使用遍布框架的方方面面。 |
javassist | OGNL使用的Java字节码操做库。 |
freemarker | struts标签模板库文件。 |
commons-logging | 通用日志, Struts 2 框架使用它来实现 JDK 1.4+ 和 log4J 之间的无缝透明支持。 |
commons-fileupload | 为 Servlet 和 Web 应用添加稳定、高性能的文件上传功能。 |
commons-io | 一个辅助开发 IO 功能的工具库。 |
commons-lang3 | 用于简化经常使用功能代码的使用用法。该库提供主要针对java.lang包中的类的经常使用工具方法,从而使代码保持简洁干爽。 |
一、根据需求导入相关jar包设计模式
二、在web.xml文件中配置strus2过滤器app
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0"> <display-name>TestStruts</display-name> <!-- 配置struts2核心Filter(其余拦截器应该配置在struts2拦截器上方,不然失效) --> <filter> <filter-name>struts2</filter-name> <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class> </filter> <!-- 全部的Action类请求都会被struts2过滤器拦截 --> <filter-mapping> <filter-name>struts2</filter-name> <url-pattern>*.action</url-pattern> </filter-mapping> </web-app>
三、编写Struts2配置文件struts.xml(位于src目录)框架
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd"> <struts> <!-- package 定义一个包(一般一个业务模块使用一个包) 做用:管理Action name 包名(用来区分不一样包,不一样package的name值不能重复) extends 当前包继承的包(struts中有必定要继承struts-default [struts-default包在 struts-default.xml定义],继承struts-default包后,可使用struts-default包中定义拦截器和结果类型 ) abstract 表示当前包为抽象包,值为true/false(struts-default包的abstract值为true)。 抽象包中不能有action,不然运行时会出错 namespace 命名空间,默认为"/" --> <package name="struts2" extends="struts-default" abstract="false"> <!-- 配置全局结果集,在此package里每一个action共用的结果集 --> <global-results> <result name="success">/index.jsp</result> </global-results> <!-- action 配置请求路径与Action类的映射关系 name 请求路径名称 class 请求处理的Action类全名,默认是com.opensymphony.xwork2.ActionSupport,在struts-default.xml中定义 method 配置调用的处理方法 没有指定method属性, 默认执行 Action类中 execute方法 --> <action name="helloworld" class="cn.iborder.action.HelloWorldAction"> <!-- result 根据Action类返回的值进行相应处理 name Action类返回的值 type 跳转的结果类型(默认值dispatcher) 标签体 指定跳转的页面 --> <result name="success">/index.jsp</result> </action> <action name="login" class="cn.iborder.action.UserAction" method="login"> <result name="login" type="redirect">/index.jsp</result> </action> </package> <!-- 引入其余配置文件 config.xml内容: ====================================================================== <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd"> <struts> <package name="struts2" extends="struts-default" namespace="/"> <action name="hello" class="cn.iborder.action.HelloAction" method="hello"> <result name="hello">/hello.jsp</result> </action> </package> </struts> ====================================================================== --> <!-- 加载src路径下的config.xml文件 --> <include file="/config.xml"></include> </struts>
struts2中配置启动开发模式的好处:jsp
四、编写Action类ide
HelloWorldAction.java工具
package cn.iborder.action; import com.opensymphony.xwork2.ActionSupport; public class HelloWorldAction extends ActionSupport { @Override public String execute() throws Exception { // TODO Auto-generated method stub System.out.println("执行HelloWorldAction"); return "success"; } }
Action实现方式:普通pojo类、实现Action接口 、继承ActionSupport性能
Struts2 中一般直接使用 Action 来封装 HTTP 请求参数,所以,Action 类里还应该包含与请求参数对应的属性,而且为属性提供对应的 getter 和 setter 方法。
User.java
package cn.iborder.entity; public class User { private String userName; private String password; public String getUserName() { return userName; } public void setUserName(String userName) { this.userName = userName; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } }
UserAction.java
package cn.iborder.action; import cn.iborder.entity.User; public class UserAction { private User user; public User getUser() { return user; } public void setUser(User user) { this.user = user; } public String login() { System.out.println("用户:"+user.getUserName()); System.out.println("密码:"+user.getPassword()); return "login"; } }
package cn.iborder.action; import com.opensymphony.xwork2.Action; import cn.iborder.entity.User; public class UserAction implements Action { private User user; public User getUser() { return user; } public void setUser(User user) { this.user = user; } public String login() { System.out.println("用户:"+user.getUserName()); System.out.println("密码:"+user.getPassword()); return "login"; } @Override public String execute() throws Exception { // TODO Auto-generated method stub return null; } }
须要使用struts2的数据校验功能,必须继承ActionSupport.
ActionSupport已经实现了Action接口,还实现了Validateable接口,提供了数据校验功能。经过继承该 ActionSupport 类,能够简化 Struts 2 的 Action 开发。
Actionsupport类在实现的Validateable接口中定义了一个 validate()方法,重写该方法,自定义数据校验功能,它会在execute()方法以前执行。在实现表单验证功能的时候必定不要忘记了在 struts.xml 中相对应的 action 中配置 result="input",由于表单验证失败默认返回的字符串为 input,若是没有的话会报错。
重写父类的validate()方法,会对对全部业务逻辑都验证,不推荐使用,建议自定义一个校验类,继承实现Validator接口的类,有ValidatorSupport或FieldValidatorSupport。
经过校验配置文件可使用Struts2已有的校验器
package cn.iborder.action; import com.opensymphony.xwork2.ActionSupport; import cn.iborder.entity.User; public class UserAction extends ActionSupport { private User user; public User getUser() { return user; } public void setUser(User user) { this.user = user; } public String login() { System.out.println("用户:"+user.getUserName()); System.out.println("密码:"+user.getPassword()); return "login"; } }