struts
一.介绍
框架:就是半成品,框架已经完成一些通用功能。只需要实现与业务有关功能。
版本:struts-2.3.15.3-all
Struts的版本:
Struts1(已经淘汰)
Struts2(我们要学) XWork
Struts => WEB层框架
优势:
1.不用侵入性比较高的Servlet.可以直接写普通java类作为处理请求逻辑的处理类.
这样更易于测试.
2.整合了一些之前需要手动来做的功能. 后台验证,表单回显,自动将表单参数封装,防止表单重复提交...
如果不够用我们还可以扩展框架的功能.
二.核心功能
•POJO(PlainOld Java Objects)。
•实现TDD(Test-Driven Development,测试驱动开发)。
•OGNL(ObjectGraph NavigationLanguage)对象图形导航语言。
三.目录结构
l apps / struts2-blank.war 最简答环境
l apps / struts2-showcase.war 常见案例
war只要放在tomcat/webapps/ 将自动解压,并可以访问
四、jar包介绍
五、编写流程
(1)导入jar包
jar位置:struts-2.3.15.3\apps\struts2-blank\WEB-INF\lib
(2)Action类(请求处理类)
public class UserAction {
public String execute(){
return "success";
}
}
(3)核心配置文件:struts.xml
位置:src下(实际是在WEB-INF/classes目录下)
名称:struts.xml
内容
约束:
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
<package name="day01" namespace="/hello" extends="struts-default">
<action name="userAction" class="cn.hcx.a_hello.UserAction">
<result name="success">/a_hello/success.jsp</result>
</action>
</package>
</struts>
(4)web.xml配置过滤器
核心过滤器名称:StrutsPrepareAndExecuteFilter
<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>
5()测试
第一个struts:hello world
1.导包
2.编写配置文件:struts.xml
<struts>
<package name="action" namespace="/aa" extends="struts-default">
<action name="HelloAction" class="action.HelloAction" method="execute">
<result name="success" type="dispatcher">/index.jsp</result>
</action>
</package>
</struts>
详解:
<!--
http://localhost:8080/struts2-mini/HelloAction.action 一级
http://localhost:8080/struts2-mini/aaa/HelloAction.action 二级
name:单纯的给包起一个名字,不要与其他包名重复
namespace: 为action访问加上一层或多层路径
extends: 继承一个其他包,目的是引入其他包的配置
abstract: 声明包是抽象的.意思就是让别的包来继承,声明为抽象的包中不能含有Action配置
--><!-- package下的action处理aaa这级目录下的action,即该包可以把action配置到某一级或多级目录下-->
<package name="hello" namespace="/aaa" extends="struts-default" abstract="true/false" >
<!--
name: 为我们的action类加上一个标识,在访问时填入name名称.就可以找到action
class: action完整类名
method:处理的方法
-->
<action name="HelloAction" class="cn.hcx.action.HelloAction" method="execute" >
<!-- name:返回结果的标识,用于找到结果路径
type: 可以决定跳转到结果的方式=> 转发,重定向..... 方法的要求:公共的 返回值类型是String(匹配result元素) 无参
-->
<result name="success" type="dispatcher" >/index.jsp</result> <!--访问helloaction时转发到index.jsp-->
</action>
</package>
3.编写action:
package cn.hcx.action;
public class HelloAction {
public String execute(){
System.out.println("hehe!");
return "success";
}
}
4.配置xml过滤器
<!-- 重要: 配置struts2的核心过滤器 -->
<!-- 注意: 配置struts2过滤器要放置到其他过滤器后面.保证其他过滤器可以执行 -->
<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>
六、执行流程
七、基本配置
(1)配置文件介绍
1. default.properties :用于配置struts 常量。例如:编码
package cn.hcx.b_constant;
import java.util.Arrays;
import org.apache.struts2.ServletActionContext;
import com.opensymphony.xwork2.ActionContext;
public class Demo1Action {
public String execute(){
//获得参数,并在控制台打印
//String name = ServletActionContext.getRequest().getParameter("name");
String[] names = (String[]) ActionContext.getContext().getParameters().get("name");
System.out.println(Arrays.toString(names));
return "success";
}
}
<struts>
<!-- 常量的包 -->
<package name="constant" namespace="/constant" extends="struts-default">
<action name="Demo1Action" class="constant.Demo1Action" method="execute">
<result name="success" type="dispathcer">index.jsp</result>
</action>
</package>
</struts>
<body>
<form action="/struts2demo1/constant/Demo1Action.action" method="post">
<input type="text" name="name">
<input type="submit" value="go">
</form>
</body>
在struts中添加配置:
<struts>
<!-- 解决表单提交乱码 -->
<constant name="struts.i18n.encoding" value="GBK"></constant>
</struts>
struts.multipart.maxSize=2097152
<!-- 配置Action访问后缀 -->
<constant name="struts.action.extension" value="do"></constant>
struts.serve.static.browserCache=true 设置浏览器是否需要缓存
<constant name="struts.devMode" value="false"></constant>
struts.ui.theme=xhtml 开发样式时使用struts标签自带样式
2. struts-default.xml:struts提供的默认核心配置文件,struts大部分功能都在此配置文件中。
struts2-core-2.3.15.3.jar!/struts-default.xml
3.struts-plugin.xml : struts插件核心配置文件,struts整合其他框架或工具。
* 以上三个文件,用户自己不进行修改。
4. struts.xml:用户自定义核心配置文件。
struts.xml 可以配置所有内容,包括:常量
<constantname="struts.i18n.encoding"value="GBK"></constant> 配置编码
5.struts.properties : 用于自定义struts常量配置文件。一般不使用。
6.web.xml :也可以配置struts常量
<!-- 通过初始化参数,配置常量 -->
<init-param>
<param-name>struts.i18n.encoding</param-name>
<param-value>GBK</param-value>
</init-param>
@@@注意:如果配置常量,所有的配置文件存在优先级,编号越大优先级越高。
八、常见struts常量
1.用于配置项目编码
struts.i18n.encoding=UTF-8
2.struts整合spring需要配置,默认注释掉了【】
struts.objectFactory = spring
3.struts默认使用文件上传解析工具:apache-commons-fileupload
struts.multipart.parser=jakarta
3.1临时文件保存位置
struts.multipart.saveDir=
3.2上传文件最大大小,默认值:2M,单位字节
struts.multipart.maxSize
4.用于设置action请求路径扩展名。默认:action或空。多个值使用逗号分隔【】
struts.action.extension=action,,
例如:/hello/userAction 或 /hello/userAction.action
5.确定是否使用动态方法调用。默认关闭的。
struts.enable.DynamicMethodInvocation =false
6. 设置开发模式,默认关闭。如果设置true:将提供更多提示信息,自动加载文件。【】
struts.devMode = false
6.1自动重新加载国际化资源文件。
struts.i18n.reload= true
6.2自动冲洗加载xml配置文件。例如:struts.xml。但不会自动加载action类。
struts.configuration.xml.reload= true
7. 设置struts标签主题,默认值:xhtml。取值:simple。【】
struts.ui.theme=xhtml
开发中常用simple。xhtml存在默认布局,开发中布局使用美工提供页面,布局自定义。
<struts>
<!-- 解决表单提交乱码 -->
<constant name="struts.i18n.encoding" value="GBK"></constant>
<!-- 配置Action访问后缀 -->
<constant name="struts.action.extension" value="do"></constant>
<!-- 打开开发者模式
1.重新加载i18n配置
2.重新加载struts.xml配置
3.提供更多的错误提示.
-->
<constant name="struts.devMode" value="false"></constant>
</struts>