1 struts入门
1.1 介绍
框架:就是半成品,框架已经完成一些通用功能。只需要实现与业务有关功能。
版本:struts-2.3.15.3-all
1.2 核心功能
1.3 目录结构
apps / struts2-blank.war 最简答环境
apps / struts2-showcase.war 常见案例
war 只要放在 tomcat/webapps/ 将自动解压,并可以访问
1.4 jar包介绍
2 练习
2.1 导入jar包
jar位置:struts-2.3.15.3\apps\struts2-blank\WEB-INF\lib
2.2 编写实现类
public class UserAction {
public String execute(){
return "success";
}
}
2.3 核心配置文件
位置:src
名称: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.itcast.a_hello.UserAction">
<result name="success">/a_hello/success.jsp</result>
</action>
</package>
</struts>
2.5 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>
3 基本配置
3.1 配置文件介绍
- default.properties :用于配置struts 常量。例如:编码
- struts-default.xml :struts提供的默认核心配置文件,struts大部分功能都在此配置文件中。
- struts-plugin.xml : struts插件核心配置文件,struts整合其他框架或工具。
- 以上三个文件,用户自己不进行修改。
- struts.xml :用户自定义核心配置文件。
- struts.properties : 用于自定义struts常量配置文件。一般不使用。
- web.xml :也可以配置struts常量
@@@注意:如果配置常量,所有的配置文件存在优先级,编号越大优先级越高。
default.properties
位置:struts2-core-2.3.15.3.jar!/org/apache/struts2/default.properties
struts-default.xml
struts2-core-2.3.15.3.jar!/struts-default.xml
struts-plugin.xml
struts.xml 可以配置所有内容,包括:常量
配置编码
struts.properties , 不用
struts.i18n.encoding = GBK
web.xml,也可以配置常量,也不用。
<init-param>
<param-name>struts.i18n.encoding</param-name>
<param-value>GBK</param-value>
</init-param>
3.2 常见struts常量
- 用于配置项目编码
struts.i18n.encoding=UTF-8 - struts整合spring需要配置,默认注释掉了【】
struts.objectFactory = spring - struts默认使用文件上传解析工具:apache-commons-fileupload
struts.multipart.parser=jakarta
3.1 临时文件保存位置
struts.multipart.saveDir=
3.2 上传文件最大大小,默认值:2M,单位字节
struts.multipart.maxSize - 用于设置action请求路径扩展名。默认:action或空。多个值使用逗号分隔【】
struts.action.extension=action,
例如:/hello/userAction 或 /hello/userAction.action - 确定是否使用动态方法调用。默认关闭的。
struts.enable.DynamicMethodInvocation = false - 设置开发模式,默认关闭。如果设置true:将提供更多提示信息,自动加载文件。【】
struts.devMode = false
6.1 自动重新加载国际化资源文件。
struts.i18n.reload = true
6.2 自动冲洗加载xml配置文件。例如:struts.xml。但不会自动加载action类。
struts.configuration.xml.reload = true - 设置struts标签主题,默认值:xhtml。取值:simple。【】
struts.ui.theme=xhtml
开发中常用simple。xhtml存在默认布局,开发中布局使用美工提供页面,布局自定义。
3.3 struts.xml 自动提示
配置提示
删除缓存
提示完成
3.4 struts.xml详解
- 用于配置struts常量的
name:struts提供固定常量名称。此名称从 default.properties文件获得
value:常量值
例如: - struts用于管理所有action类
name:给当前包进行唯一命名,必填项。用于其他包继承的。
例如:struts-default.xml/
将struts已经完成的功能,作为一个包存在。名称是固定值struts-default。
namespace:action访问路径前缀。
例如:“/”
“/hello”
“/a/b/c”
“”
extends:用于继承其他包的。
例如: 当前action继承struts已经完成功能。
abstract:是否抽象,如果设置为true,表示没有具体action实现功能。(了解)
2.1 用于配置action类(请求处理类)
name:action名称,用于在请求路径进行访问
class:action类全限定类名
method:用于确定action类中需要执行的方法,默认值:execute
2.2 用于配置结果集
name:用于确定action类中,方法的返回值
text:标签体用于设置jsp路径
type:结果集类型
dispatcher:请求转发,从一个action到jsp页面,默认值。
redirect:重定向到jsp页面
redirectAction:重定向到另一个action
stream:以流的方法发送浏览器,用于文件下载。
chain:链,在一次请求中,从一个action到另一个action
2.3 用于配置结果集类型的,一般不用,但需要看的懂。
2.4 用于配置拦截器
用于注册拦截器的
拦截器栈,将已经注册的拦截器组合在一起,形成一个栈。
例如: 声明一个拦截器栈,名称是:defaultStack
2.5 用于确定当前默认拦截器的
例如: 将“defaultStack”拦截器栈,声明默认拦截器栈
2.6 如果访问的action不存在,默认执行的aciton。
例如:/a/b/c/d/oneAction 此aciton没有配置,默认情况返回action找不到
如果配置 如果存在404时,不显示action找不到,而是指定action
2.7 用于配置 默认action实现类
例如:
如果编写配置文件时没有声明class属性,及 将执行ActionSupport类。 - 将多个struts配置文件组合成一个。
struts.xml 入口配置文件,大家共用的。用于存放通用模块。
提供子配置文件
struts-user.xml
struts-book.xml
3.5 action访问
3.5.1 动态方法调用
格式: action名称!方法名称.action
例如:bookAction!add.action
入口:
2 . 动态方法调用–add
struts.xml 配置
<action name="bookAction" class="cn.itcast.b_demo.BookAction">
<result name="success">/b_demo/success.jsp</result>
</action>
action类,提供两个方法
位置:/struts_day01/src/cn/itcast/b_demo/BookAction.java
public class BookAction {
public String execute(){
System.out.println("bookAction execute()");
return "success";
}
public String add(){
System.out.println("bookAction add()");
return "success";
}
}
注意:默认情况动态方法调用关闭的,必须通过struts常量进行配置。
3.5.2 通配符
, action.name可以使用通配符星号(),在action.class、aciton.method、result.name 处可以使用{n}方式匹配星号。
例如:
【案例1】:userAction_ 将可以通过{1}方法获得第一个星号匹配到内容。
请求路径 /userAction_add , {1} 匹配的内容是add,将执行add方法
案例2:userAction__ {1} 匹配ID一个星;{2}匹配第二星
请求路径 /userAction_add_success
{1}匹配add方法,{2}匹配返回值的名称success
例如:3:__* 将采用多个分别描述不同的内容,一次{1}{2}{3}获得
请求路径 /UserAction_add_success
/pages/{3}.jsp
<!-- 案例3:通配符 -->
<action name="personAction_*" class="cn.itcast.c_demo.PersonAction" method="{1}">
<result name="add">/c_demo/add.jsp</result>
<result name="update">/c_demo/update.jsp</result>
</action>
3.5.3 action访问路径
当默认访问一个action时,package.namespace = /a/b/c
优先从"/a/b/c"namespace获得相应的aciton,
如果没有获得,将从"/a/b"中获得
如果没有获得,将从"/a"中获得【】
如果没有获得,将从"/“中获得【】
如果没有获得,将从”"中获得
4 Action类
4.1 实现方式
- POJO,普通类。
- Action接口,实现接口
public static final String SUCCESS = "success";
public static final String NONE = "none";
public static final String ERROR = "error";
public static final String INPUT = "input";
public static final String LOGIN = "login";
public String execute() throws Exception;
success : 表示成功了。
none:没有返回值。相当方法void。没有返回值表示没有result,常用与ajax操作。使用response发送数据。
error:服务器异常。
input:表示用户输入错误。
login:表示需要权限。
-
ActionSupport类,继承类
已经默认提供很多功能。
4.2 方法
- 必须是public
- 建议又返回值,类型必须String
- 方法名称自定义
- 没有参数
- 需要throw Exception
- 非静态的
注意:可以没有返回值,一般情况都有,可以使用return “none” 表示没有返回。
public void add() throw Exception{
}
4.3 Struts.xml中struts-default包中的默认配置
如果不手动配置Action 默认Action如下配置:
如果不配置结果的type属性,默认type属性如下配置:
5 访问Servlet api
5.1 完全解耦,但只能操作作用域【】
不使用曾经学习过的servlet知识,可以去操作三个作用域
ActionContext 工具类,action上下文对象
获得实例:ActionContext.getContext()
api:
ac.put(key,value) , 相当于操作request作用域。request.setAttribute(“key”,value)
ac.getSession().put(key,value) ,相当于操作session作用域。session.setAttribute(“key”,value)
ac.getApplication().put(key,value) ,相当于操作application作用域。servletContext.setAtt…
@Override
public String execute() throws Exception {
//1 request作用域
ActionContext.getContext().put(“ds”, “屌丝_request”);
//2 session作用域
ActionContext.getContext().getSession().put(“ds”, “屌丝_session”);
//3 application作用域
ActionContext.getContext().getApplication().put(“ds”, “屌丝——application”);
return SUCCESS;
}
5.2 操作servlet对象【】
ServletActionContext 工具类,获得需要servlet对象
api:
//1 获得request对象
HttpServletRequest request = ServletActionContext.getRequest();
//2 获得response对象
HttpServletResponse response = ServletActionContext.getResponse();
//3获得servletContext对象
ServletContext servletContext = ServletActionContext.getServletContext();
//4 获得session
HttpSession session = request.getSession();
5.3 通过实现接口,struts注入
需要实现指定的接口,此接口都提供setter,struts在执行action方法之前,将调用setter方法进行赋值。
ServletRequestAware 获得HttpServletRequest对象
ServletResponseAware 获得HttpServletResponse对象
ServletContextAware 获得ServletContext对象
public class Demo5Action3 extends ActionSupport implements ServletRequestAware , ServletResponseAware ,ServletContextAware{
private HttpServletRequest request;
private HttpServletResponse response;
private ServletContext servletContext;
private HttpSession session;
@Override
public void setServletRequest(HttpServletRequest request) {
this.session = request.getSession();
this.request = request;
}
@Override
public void setServletResponse(HttpServletResponse response) {
this.response = response;
}
@Override
public void setServletContext(ServletContext context) {
this.servletContext = context;
}
6 结果集类型 Result
<action name="demo6Action" class="cn.itcast.f_demo.Demo6Action">
<result type="redirect">/f_demo/type.jsp</result>
</action>
<!-- 案例 6.2 :结果集类型,重定向action -->
<action name="demo6Action2" class="cn.itcast.f_demo.Demo6Action2">
<result type="redirectAction">demo6Action3</result>
</action>
<action name="demo6Action3" class="cn.itcast.f_demo.Demo6Action3">
<!-- 请求转发 ,默认值-->
<result type="dispatcher">/f_demo/type.jsp</result>
</action>