文章没继续写是因为,ls

既然学习了就要去总结不能颓废 当复习了框架的重点都是配置文件
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;
}

}
这里写图片描述

猜你喜欢

转载自blog.csdn.net/qq_34890925/article/details/78438890