struts2利用webwork2核心和struts1的名气,
优点:1.无侵入式设计
2.拦截器,aop编程
3.支持表现层技术
4.可对指定方法校验
5.国际化资源文件管理
缺点:太灵活,知识零碎
搭建Struts2的开发环境
1、找到所需的jar包:发行包的lib目录中(不同版本需要的最小jar包是不同的,参见不同版本的文档。2.1.7)
struts2-core.jar 核心jar包
xwork-2.jar xwork核心jar包
ognl.jar ognl表达式
freemarker.jar FreeMarker模板
commons-logging.jar 日志
commons-fileupload.jar 文件上传
commons-io.jar 文件上传依赖的包
2、在应用的WEB-INF/classes目录下建立一个名称为struts.xml的配置文件,内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
</struts>
3、配置核心控制器,就是一个过滤器
<filter>
<filter-name>struts2</filter-name>
<filter-class>
org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
4、如果TOmcat启动成功,没有报错,证明环境搭建成功!
开发第一个Struts2案例
1、编写struts.xml配置文件
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1.7//EN" "http://struts.apache.org/dtds/struts-2.1.7.dtd"> <struts><!--这是Struts2配置文件的根元素--> <package name="p1" namespace="/test" extends="struts-default"> <!-- pageckage:方便管理动作元素 name:必须有。包的名称,配置文件中必须保证唯一。 namespace:该包的名称空间,一般是以"/"开头 extends:集成的父包的名称。struts-default名称的包是struts2框架已经命名好的 一个包。(在struts2-core.jar中有一个struts-default.xml中) abstract:是否是抽象包。没有任何action元素的包就是抽象包(java类) --> <action name="helloworld" class="cn.struts2.action.HelloWorldAction" method="sayHello"> <!-- action:代表一个请求动作 name:同包中必须唯一。动作的名称 class:负责处理的JavaBean的类全名 method:JavaBean中的对应处理方法。 (动作方法:特点是,public String 方法名(){}) --> <result name="success">/1.jsp</result> <!-- result:结果类型 name:动作方法返回的字符串 主体内容:View的具体地址。 --> </action> </package> </struts>
2、根据配置文件,创建需要的javabean和对应的动作方法,在动作方法中完成你的逻辑调用。
package cn.struts2.action; public class HelloWorldAction implements Serializable { private String message; public String getMessage() { return message; } public void setMessage(String message) { this.message = message; } public String sayHello(){ message = "helloworld by struts2"; return "success"; } }
3、编写View,index.jsp显示结果
${message}
4、访问helloworld动作的方式:http://localhost:8080/struts2day01/test/helloworld 应用名称/包的名称空间/动作的名称
默认情况下:访问动作名helloworld,可以直接helloworld,或者helloworld.action
http://localhost:8080/struts2day01/test/a/b/c/helloworld
/struts2day01:应用名称
/test/a/b/c:名称空间
helloworld:动作名称
搜索顺序:名称空间
/test/a/b/c 没有helloworld
/test/a/b 没有helloworld
/test/a 没有helloworld
/test 有了,调用执行
12-动作类的生命周期
1.struts2对用户的每次请求都会创建一个action, action是线程安全的,
2. 实例化对象必须调用javabean 公共的无参构造方法,如果没有这个构造方法,无法实例化
13-struts2根据模块设置配置文件,将模块配置文件插入到 struts.xml中就可以了。 模块配置文件必须与struts.xml有相同的根元素<struts> ,相同的DOCTYPE声明
14-动态方法调用
1. actionName!methodName 不建议使用
2.关闭上述动态调用, 参考 struts2-core-->org.apache.struts2-->static-->default.properties搜索dynamic
15-使用通配的动态调用 占位符
<action name="orders_*" class="cn.itcast.action.OrdersAction" method="{1}">
<result type="dispatcher" name="success"> /orders/{1).jsp</result>
</action>
16-获取表单请求参数
1.struts2自动将接收的请求参数,赋值给对应action类的同名属性。通过内省调用与请求参数同名属性的setter方法来获取
2.基本类型及其包装类 自动转换为String类型
3.封装数据由struts2完成了
4.请求参数乱码,post提交,在struts.xml中设置常量<constant name="stuts.i18n.encoding" value="Utf-8"/>相当于request.setCharacterEncoding("utf-8")
set提交,设置乱码过滤器