既然学习了就要去总结不能颓废 当复习了框架的重点都是配置文件
Struts2框架的应用
二、struts.xml配置文件详解
package:包,将Action(应用控制器)在逻辑上进行隔离,完成包中功能上的继承
name:给package起的名字,就是通过name属性完成继承
namespace:命名空间,action请求url的前缀(url的构成部分)包在地址栏的反应。
extends:值必须为某个包的名字,完成包之间的继承
abstract:抽象的 ,如果一个package是abstract=“true”,该package必须被继承,不能包含action节点。
Action:描述javabean(应用控制器,具体处理请求的javabean)
name:该javabean的请求路径
class: javabean的完成限定名(通过反射创建javabean的对象)
method: 指定的是处理本次请求的方法
result:Action执行完成后需要响应的结果
name:需要响应的结果逻辑名称
type:表示响应的结果的类型(ajax响应,通过的跳转响应)
请求转化:
dispatcher(默认值),只能跳转到jsp
chain:跳转到javabean(应用控制器)
重定向:
redirect : jsp
redirectAction : javabean
产生一个流对象:
stream : 通过流对象的方式给客户端做出响应
plainText:响应到客户单的内容为view的源码
param: 参数,给struts2系统中定义的类的属性赋值
name: 需要赋值的属性名称
1.
2.在src下新建struts的配置文件,名称为struts.xml并添加dtd的引用(struts2-core-2.5.10.1.jar中struts-2.5.dtd找到)
3**.预处理拦截器(prepare)**
在action 方法执行前,调用prepare方法。(只对实现了prepareAble接口的aciton有效)。
4.action链拦截器(chain)
能将所有实例的所有属性都拷贝到当前执行的对象的valueStack中。除非该对象实现了Unchainable接口。该连接器同 action返回类型为chain联合使用。
5.debug拦截器(debugging)
6.scopedModelDriven:该拦截器只对实现了ScopedModelDriven 接口的action实例起作用。
7.modelDriven类:com.opensymphony.xwork2.interceptor.ModelDrivenInterceptor
该拦截器同上面原理一样,是只对实现了ModelDriven接口的action起作用
8.文件上传拦截器(fileUpload)
类:org.apache.struts2.interceptor.FileUploadInterceptor
9:checkBox处理拦截器(checkbox)
类:org.apache.struts2.interceptor.CheckboxInterceptor
此拦截器是针对checkbox表单控件的。
10:多选拦截器(multiselect)
类:org.apache.struts2.interceptor.MultiselectInterceptor
同checkbox一样,如果没有选中,则设置默认的值。
11:静态参数拦截器(staticParams)
类:com.opensymphony.xwork2.interceptor.StaticParametersInterceptor
该拦截器将action中配置的静态参数添加到action中。如果action实现了Parameterizable接口,那么,一个map的静态参数也将会设置到action中。
12:静态参数拦截器(staticParams)
类:com.opensymphony.xwork2.interceptor.StaticParametersInterceptor
该拦截器将action中配置的静态参数添加到action中。如果action实现了Parameterizable接口,那么,一个map的静态参数也将会设置到action中。
拦截器和过滤器的对比
拦截器和过滤器之间有很多相同之处,但是两者之间存在根本的差别。其主要区别为以下几点:
1)拦截器是基于JAVA反射机制的,而过滤器是基于函数回调的。
2)过滤器依赖于Servlet容器,而拦截器不依赖于Servlet容器
3)拦截器只能对Action请求起作用,而过滤器可以对几乎所有的请求起作用。
4)拦截器可以访问Action上下文、值栈里的对象,而过滤器不能
5)在Action的生命周期中,拦截器可以多次被调用,而过滤器只能在容器初始化时被调用一次。
文件上传和下载的页面
如果要获取上传文件的名称: 上传文件的属性名+FileName
如果要获取上传文件的文件类型: 上传文件的属性名+ContentType
package cn.zzsxt.action;
import java.io.File;
import org.apache.commons.io.FileUtils;
import com.opensymphony.xwork2.ActionSupport;
public class UploadAction extends ActionSupport {
private File myfile;//接受上传的文件
private String myfileFileName;//上传文件的属性+FileName获取上传文件的名称,并绑定到该属性上
private String myfileContentType;//上传文件的属性+ContentType获取上传文件的类型,并绑定到该属性上
public File getMyfile() {
return myfile;
}
public void setMyfile(File myfile) {
this.myfile = myfile;
}
public String getMyfileFileName() {
return myfileFileName;
}
public void setMyfileFileName(String myfileFileName) {
this.myfileFileName = myfileFileName;
}
public String getMyfileContentType() {
return myfileContentType;
}
public void setMyfileContentType(String myfileContentType) {
this.myfileContentType = myfileContentType;
}
@Override
public String execute() throws Exception {
System.out.println(myfileFileName+"---"+myfileContentType);
File uploadDir = new File("D:/upload");
//如果上传文件的保存目录不存在,则创建该目录
if(!uploadDir.exists())
uploadDir.mkdirs();//创建目录
//上传
FileUtils.copyFile(myfile, new File(uploadDir,myfileFileName));
return this.SUCCESS;
}
}
编写处理下载的业务逻辑Action
package cn.zzsxt.action;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import com.opensymphony.xwork2.ActionSupport;
/**
* 利用stream结果视图完成下载
* @author Think
*
*/
public class DownloadAction extends ActionSupport {
private String fileName;//获取要下载的文件名称
private InputStream inputStream;//输入流(将要下载的问题转换为输入流,结合stream结果视图完成下载操作)
public String getFileName() {
return fileName;
}
public void setFileName(String fileName) {
this.fileName = fileName;
}
public InputStream getInputStream() {
return inputStream;
}
public void setInputStream(InputStream inputStream) {
this.inputStream = inputStream;
}
@Override
public String execute() throws Exception {
File file = new File("D:/upload",fileName);//将要下载的文件转为File对象
inputStream = new FileInputStream(file);//转换为输入流
return this.SUCCESS;
}
}