Jimoshi_Struts2 框架学习(三)--valueStack和ognl、struts2验证、struts2文件上传和下载
来源:互联网 发布:崖山之后无中国 知乎 编辑:程序博客网 时间:2024/06/07 20:55
Jimoshi成长经历:前面的笔记后面再慢慢整理-------方便自己
目录:valueStack(值栈)、ognl( 对象图形导航语言)、struts2标签、struts2国际化、struts2验证、struts2文件上传和下载
Struts2 框架学习(三):
一、valueStack(值栈,存储数据的空间,线程安全)
1、描述:Struts2会为每个请求创建一个新的值栈,也就是说,栈和请求是一一对应的,不同的请求,值栈也不一
样,而值栈封装了一次请求所有需要操作的相关的数据。
2、狭义值栈:狭义值栈主要用来存放动态EL(表达式语言)运算需要的值和结果,当然OgnlValueStack对象主要是
用来支持OGNL(对象图导航语言)运算的(也就是说请求action 中产生的数据或者获取的数据,最终都是放到Ation
对应的值栈当中)
代码示例:
注::前台页面取值需要用S标签 当然注意要引入S标签 <s:property value="uname"/>
ActionContext ac = ActionContext.getContext();
ValueStack vs = ac.getValueStack();
vs.set("uname","wwj");
二、ognl( 对象图形导航语言)
1、描述:对存放的数据进行取值,是一种表达式
2、#request,#session,#application后面跟.语法(这里访问的是actioncontext里面的数据)
3、通过使用#attr取数据的范围是:page - request -session -application
4、ognl 访问静态方法和属性
4.1.配置struts.xml文件
代码示例:
<constant name="struts.ognl.allowStaticMethodAccess" value="true"/>
4.2.页面中使用OGNL表达式访问
代码示例:
<!-- 访问静态属性和方法 -->
<s:property value="@com.zr.controller.MyStatic@name"/><br/>
<s:property value="@com.zr.controller.MyStatic@showMsg()"/>
4.3.ongl访问javabean对象、集合和Map
代码示例:
模拟数据:
this.setStudent1(new Student(1, "wwj"));
Map<String,Student> s2 =new HashMap<String,Student>();
s2.put("student2", new Student(2,"xyz"));
this.setStudent2(s2);
List<Student> students = new ArrayList<Student>();
students.add(new Student(3,"abc"));
this.setStudents(students);
页面获取:
<!-- 访问对象 -->
对象:<s:property value="student1.sname"/><br>
<!-- 访问集合 -->
集合:<s:property value="students[0].sname"/><br>
<!-- 访问Map-->
map:<s:property value="student2.student2.sname"/>
三、struts2标签(数据标签,控制标签,界面标签,其它一些标签)
优点:比JSTL强大
缺点 :性能特别低,一般在开发中不太常用
数据标签:Propetry(输出值)、set(设置值)、Bean(定义java对象)、Date(日期)、Debug(调试)
url标签、Include 标签(在页面使用<s:debug></s:debug>)
控制标签:ifelse(判断标签)、Iterator(循环)、Append(叠加)、Generator(分隔标签)
Merge(组合)、sort(排序标签)、subset(截取标签)
循环标签:
<s:iterator var="student" value="students">
<s:property value="#student.sname"/>
</s:iterator>
界面标签:Form(表单)、text(文本)、radios(单选)、checkbox 标签、select (下拉)
其它标签:UpdownSelect、optiontransferselect
四、struts2国际化
1、配置国际化的属性文件
代码示例:
resource_en_US.properties
resource_zh_CN.properties
uname=Uname
upsw=Upassword
2、配置struts.xml文件
代码示例:
<!-- 添加国际化资源文件配置,value里面的值随便取-->
<constant name="struts.custom.i18n.resources" value="resource"></constant>
3、标签都是采用s标签
代码示例:
<s:form id="loginform" action="login" method="post">
<s:text name="uname"></s:text>
<input type="text"/>
<s:text name="upsw"></s:text>
<input type="text"/>
</s:form>
五、struts2验证(实现的效果跟我们前台使用js进行验证是一个效果)
1、编写提交文件
代码示例:
<s:form id="loginform" action="login" method="post">
<s:textfield name="uname" label="用户名"></s:textfield>
<s:submit value="提交"></s:submit>
</s:form>
2、配置对应的请求验证器XML文件
注意:要保证跟action类同级
比如action叫做abc那么对应验证文件就叫做abc--validation.xml
编写XML中的验证规则:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE validators PUBLIC "-//OpenSymphony Group//XWork Validator 1.0.2//EN"
"http://struts.apache.org/dtds/xwork-validator-1.0.2.dtd">
<!-- 编写验证 -->
<validators>
<!-- 对哪个字段进行验证-->
<field name="uname">
<!-- 配置必填字符串校验器 -->
<!-- 这里相当于是对字符长度的验证-->
<field-validator type="requiredstring">
<param name="minLength">5</param>
<param name="maxLength">10</param>
<message>对不起长度不满足要求</message>
</field-validator>
</field>
</validators>
3、如果不满足条件配置返回结果为input。返回你自己验证的页面。提交测试
六、struts2文件上传和下载
1、文件上传
1.1.编写页面
代码示例:
<!--enctype 必需配置,这个需要不是针对框架的,而是文件上传必需有这个 -->
<form action="upload" method="post" enctype="multipart/form-data">
请选择需要上传的文件:<input type="file" name="fname"/>
<input type="submit" value="提交">
</form>
1.2.配置对应的XML文件
代码示例:
<!-- 指定允许上传的文件最大字节数。默认值是2097152(2M) -->
<constant name="struts.multipart.maxSize" value="10701096"/>
<!-- 设置上传文件的临时文件夹,默认使用javax.servlet.context.tempdir-->
<constant name="struts.multipart.saveDir " value="d:/tmp" />
<package name="zr" extends="struts-default">
<!-- 接收文件上传的请求 -->
<action name="upload" class="com.zr.controller.UploadController" method="upload">
<result name="success">index.jsp</result>
</action>
</package>
1.3.编写对应的action类
代码示例:
public class UploadController extends ActionSupport{
//通过文件上传,struts2会帮你接受上传的一些数据
//文件 fname 跟 页面中file 定义的name名字一致的
private File fname;
//文件名 必需后缀加上FileName
private String fnameFileName;
//文件类型 必需后缀加上ContentType
private String fnameContentType;
(自行get set)
public String upload(){
//获取服务器的地址 webapps/项目名/users
String path = ServletActionContext.getServletContext().getRealPath("/users");
System.out.println(path);
//将文件拷贝到需要的路径下面
//1.先创建File 对象
File f = new File(path);
//2.执行拷贝的方法 (io组件当中 FileUtils 类 )
try {
//FileUtils.copyFileToDirectory(fname, f);
FileUtils.copyFile(fname, new File(f,fnameFileName));
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return SUCCESS;
}
}
注意:多文件上传也就是接收的参数为数组
代码示例:
private File[] fnames;//文件
private String[] fnamesFileName;//文件名
private String[] fnamesContentType;//文件类型
2、文件下载
2.1. 发送请求下载否文件
代码示例:
<a href="download">点击我下载</a>
2.2.配置Struts.xml文件 接受对应下载请求
代码示例:
<!-- 接受下载的请求 --> 设置返回类型为流的形式
<action name="download" class="com.zr.controller.DownloadController">
<result type="stream">
<!-- 默认是找getInputstream 方法 但是可以配置由哪个方法来处理流-->
<!--这里命名为download 那么anction 中必需方法命名为getDdownload-->
<param name="inputName">download</param>
<!-- 提示用户下载 attachment;filename= 不变 等号跟文件名-->
<param name="contentDisposition">attachment;filename="${filename}"</param>
</result>
</action>
2.3.编写getDownload的方法 返回类型是流
代码示例:
public InputStream getDownload(){
//模拟已经知道文件路径的地址
String fpath = ServletActionContext.getServletContext().getRealPath("/users")+"\\abc.xls";
File f = new File(fpath);
this.setFilename("bcd");
FileInputStream in = null;
try {
in = new FileInputStream(f);
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return in;
}
2.4.测试下载
目录:valueStack(值栈)、ognl( 对象图形导航语言)、struts2标签、struts2国际化、struts2验证、struts2文件上传和下载
Struts2 框架学习(三):
一、valueStack(值栈,存储数据的空间,线程安全)
1、描述:Struts2会为每个请求创建一个新的值栈,也就是说,栈和请求是一一对应的,不同的请求,值栈也不一
样,而值栈封装了一次请求所有需要操作的相关的数据。
2、狭义值栈:狭义值栈主要用来存放动态EL(表达式语言)运算需要的值和结果,当然OgnlValueStack对象主要是
用来支持OGNL(对象图导航语言)运算的(也就是说请求action 中产生的数据或者获取的数据,最终都是放到Ation
对应的值栈当中)
代码示例:
注::前台页面取值需要用S标签 当然注意要引入S标签 <s:property value="uname"/>
ActionContext ac = ActionContext.getContext();
ValueStack vs = ac.getValueStack();
vs.set("uname","wwj");
二、ognl( 对象图形导航语言)
1、描述:对存放的数据进行取值,是一种表达式
2、#request,#session,#application后面跟.语法(这里访问的是actioncontext里面的数据)
3、通过使用#attr取数据的范围是:page - request -session -application
4、ognl 访问静态方法和属性
4.1.配置struts.xml文件
代码示例:
<constant name="struts.ognl.allowStaticMethodAccess" value="true"/>
4.2.页面中使用OGNL表达式访问
代码示例:
<!-- 访问静态属性和方法 -->
<s:property value="@com.zr.controller.MyStatic@name"/><br/>
<s:property value="@com.zr.controller.MyStatic@showMsg()"/>
4.3.ongl访问javabean对象、集合和Map
代码示例:
模拟数据:
this.setStudent1(new Student(1, "wwj"));
Map<String,Student> s2 =new HashMap<String,Student>();
s2.put("student2", new Student(2,"xyz"));
this.setStudent2(s2);
List<Student> students = new ArrayList<Student>();
students.add(new Student(3,"abc"));
this.setStudents(students);
页面获取:
<!-- 访问对象 -->
对象:<s:property value="student1.sname"/><br>
<!-- 访问集合 -->
集合:<s:property value="students[0].sname"/><br>
<!-- 访问Map-->
map:<s:property value="student2.student2.sname"/>
三、struts2标签(数据标签,控制标签,界面标签,其它一些标签)
优点:比JSTL强大
缺点 :性能特别低,一般在开发中不太常用
数据标签:Propetry(输出值)、set(设置值)、Bean(定义java对象)、Date(日期)、Debug(调试)
url标签、Include 标签(在页面使用<s:debug></s:debug>)
控制标签:ifelse(判断标签)、Iterator(循环)、Append(叠加)、Generator(分隔标签)
Merge(组合)、sort(排序标签)、subset(截取标签)
循环标签:
<s:iterator var="student" value="students">
<s:property value="#student.sname"/>
</s:iterator>
界面标签:Form(表单)、text(文本)、radios(单选)、checkbox 标签、select (下拉)
其它标签:UpdownSelect、optiontransferselect
四、struts2国际化
1、配置国际化的属性文件
代码示例:
resource_en_US.properties
resource_zh_CN.properties
uname=Uname
upsw=Upassword
2、配置struts.xml文件
代码示例:
<!-- 添加国际化资源文件配置,value里面的值随便取-->
<constant name="struts.custom.i18n.resources" value="resource"></constant>
3、标签都是采用s标签
代码示例:
<s:form id="loginform" action="login" method="post">
<s:text name="uname"></s:text>
<input type="text"/>
<s:text name="upsw"></s:text>
<input type="text"/>
</s:form>
五、struts2验证(实现的效果跟我们前台使用js进行验证是一个效果)
1、编写提交文件
代码示例:
<s:form id="loginform" action="login" method="post">
<s:textfield name="uname" label="用户名"></s:textfield>
<s:submit value="提交"></s:submit>
</s:form>
2、配置对应的请求验证器XML文件
注意:要保证跟action类同级
比如action叫做abc那么对应验证文件就叫做abc--validation.xml
编写XML中的验证规则:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE validators PUBLIC "-//OpenSymphony Group//XWork Validator 1.0.2//EN"
"http://struts.apache.org/dtds/xwork-validator-1.0.2.dtd">
<!-- 编写验证 -->
<validators>
<!-- 对哪个字段进行验证-->
<field name="uname">
<!-- 配置必填字符串校验器 -->
<!-- 这里相当于是对字符长度的验证-->
<field-validator type="requiredstring">
<param name="minLength">5</param>
<param name="maxLength">10</param>
<message>对不起长度不满足要求</message>
</field-validator>
</field>
</validators>
3、如果不满足条件配置返回结果为input。返回你自己验证的页面。提交测试
六、struts2文件上传和下载
1、文件上传
1.1.编写页面
代码示例:
<!--enctype 必需配置,这个需要不是针对框架的,而是文件上传必需有这个 -->
<form action="upload" method="post" enctype="multipart/form-data">
请选择需要上传的文件:<input type="file" name="fname"/>
<input type="submit" value="提交">
</form>
1.2.配置对应的XML文件
代码示例:
<!-- 指定允许上传的文件最大字节数。默认值是2097152(2M) -->
<constant name="struts.multipart.maxSize" value="10701096"/>
<!-- 设置上传文件的临时文件夹,默认使用javax.servlet.context.tempdir-->
<constant name="struts.multipart.saveDir " value="d:/tmp" />
<package name="zr" extends="struts-default">
<!-- 接收文件上传的请求 -->
<action name="upload" class="com.zr.controller.UploadController" method="upload">
<result name="success">index.jsp</result>
</action>
</package>
1.3.编写对应的action类
代码示例:
public class UploadController extends ActionSupport{
//通过文件上传,struts2会帮你接受上传的一些数据
//文件 fname 跟 页面中file 定义的name名字一致的
private File fname;
//文件名 必需后缀加上FileName
private String fnameFileName;
//文件类型 必需后缀加上ContentType
private String fnameContentType;
(自行get set)
public String upload(){
//获取服务器的地址 webapps/项目名/users
String path = ServletActionContext.getServletContext().getRealPath("/users");
System.out.println(path);
//将文件拷贝到需要的路径下面
//1.先创建File 对象
File f = new File(path);
//2.执行拷贝的方法 (io组件当中 FileUtils 类 )
try {
//FileUtils.copyFileToDirectory(fname, f);
FileUtils.copyFile(fname, new File(f,fnameFileName));
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return SUCCESS;
}
}
注意:多文件上传也就是接收的参数为数组
代码示例:
private File[] fnames;//文件
private String[] fnamesFileName;//文件名
private String[] fnamesContentType;//文件类型
2、文件下载
2.1. 发送请求下载否文件
代码示例:
<a href="download">点击我下载</a>
2.2.配置Struts.xml文件 接受对应下载请求
代码示例:
<!-- 接受下载的请求 --> 设置返回类型为流的形式
<action name="download" class="com.zr.controller.DownloadController">
<result type="stream">
<!-- 默认是找getInputstream 方法 但是可以配置由哪个方法来处理流-->
<!--这里命名为download 那么anction 中必需方法命名为getDdownload-->
<param name="inputName">download</param>
<!-- 提示用户下载 attachment;filename= 不变 等号跟文件名-->
<param name="contentDisposition">attachment;filename="${filename}"</param>
</result>
</action>
2.3.编写getDownload的方法 返回类型是流
代码示例:
public InputStream getDownload(){
//模拟已经知道文件路径的地址
String fpath = ServletActionContext.getServletContext().getRealPath("/users")+"\\abc.xls";
File f = new File(fpath);
this.setFilename("bcd");
FileInputStream in = null;
try {
in = new FileInputStream(f);
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return in;
}
2.4.测试下载
1 0
- Jimoshi_Struts2 框架学习(三)--valueStack和ognl、struts2验证、struts2文件上传和下载
- Struts2框架--------OGNL和valueStack
- struts2学习三(OGNL和ValueStack值栈)
- Struts2 学习系列 (4) ValueStack和OGNL
- ValueStack、OGNL和Struts2标签
- Struts2学习记录2(ValueStack(值栈)和ognl)
- struts2中OGNL和 ValueStack(一)
- struts2中OGNL和 ValueStack(一)
- struts2中OGNL和 ValueStack(二)
- struts2中OGNL和 ValueStack(一)
- Struts2(三)-Struts2之文件的上传和下载
- Struts2学习笔记16:Struts2的文件上传和下载【续】三
- Struts2学习笔记13:Struts2的文件上传和下载
- 【Struts2】Struts2学习(6)文件上传和下载
- Struts2文件上传和下载
- struts2文件上传和下载
- struts2文件上传和下载
- struts2 文件上传和下载
- 【转】Qt中的QString,QByteArray,Qchar, char*
- QtQuick学习笔记之QML布局定位器Row/Column/Grid/Flow
- JVM内存区域划分Eden Space、Survivor Space、Tenured Gen,Perm Gen解释
- log4j配置xml详解
- 如何将数据库引擎配置为侦听多个 TCP 端口
- Jimoshi_Struts2 框架学习(三)--valueStack和ognl、struts2验证、struts2文件上传和下载
- Docker
- 新手的MFC对话框背景图添加与自适应缩放
- 虚拟机配置及问题的解决
- 三题基础题,来测测基础吧
- bzoj4552【TJOI2016&HEOI2016】排序
- 为数据库引擎访问配置 Windows 防火墙
- CGLib之Enhancer
- 【WebService框架-CXF】——CXF对Map等无法自动转化的类型的处理