计应134(实验班) 张人川
一、文件上传
在WEB-INFO/lib下加入commons-flileupload-1.2.1.jar,commons-io-1.3.2.jar
把form表的enctype设置为”multipart/form-data”如下
<form enctype=”multipart/form-data” action=”${pageContext.request.contextPath}/
xxx.action” method=”post”>
<input type=”file” name=”uploadImage”>
</form>
在Action类中添加以下属性,属性红色部分对应于表单文字的名字;
public class HelloWorldAction{
private File uploadImage;             //得到上传文件
private String uploadImagContentType; //得到文件的类型
private String uploadImag FileName; //得到文件的名字
getter setter
.
.
.
public String upload() throws Exception{
String realpath=ServletActionContext.getServletContext.getRealPath(“/image
“);
if(uploadImage!=null){
File file=new File(realpath);
if(!file.exists())  file.mkdirs();
FileUtils.copyFile( uploadImage , new File( 
file , uploadImageFileName));
ActionContext.getContext().put(“message”,”上传成功”);
}
return “success”;
}
}
二、自定义拦截器
需要实现com.opensymphony.xwork2.interceptor.Interceptor接口
public String intercept(ActionInvocation invocation) throws Exception{
if(sesion存在用户){
String result=invocation.invoke();     //返回Action所调方法的名称
}else{
return “logon”;
}
}
在package里写interceptors
<interceptors>
<interceptor name=”permission” class=”com.icss.interceptro.PermissionInterceptor”/>
<interceptor-stack name=”permissionStack”>
<interceptor-ref name=”defaultStack”/>
<interceptor-ref name=”permission”/>
</interceptor-stack>
</interceptors>
Action里写
<interceptor-ref name=”permissionStack”/>
如果希望包下所有的Action都使用自定义拦截器,可以通过<default-interceptor-ref name=””/>把它定义为默认拦截器;注意每个包只能指定一个默认拦截器,且如果该包下的某个Action显示指定了某个拦截器,则默认拦截器不会起作用;
三、输入校验
采用手工编写代码实现
对所有方法进行校验
Action继承ActionSupport重写validate()方法
public class PersonAction extends ActionSupport{
private String username;
private String mobile;
getter setter;
.
.
.
public void validate(){
if(this.username==null || “”.equals(this.username.trim())){
this.addFieldError(“username”,”用户名不能为空”);
}
if(this.mobile==null || “”.equeal(this.mobile.trimm())){
this.addFileError(“mobile”,”手机号不能为空”);
}else{
if(!Pattern.compile(“^1[358]\\d{9}$”).matcher(this.mobile)
.matches()){
This.addFieldError(“mobile”,”手机号格式不正确”);
}
}
}
}
//验证失败返回input视图所以<result name=”input”></result>
<s:fieldError/>
对某个方法进行校验
提供validateXxx(),校验xxx()方法
基于xml的输入校验
对所有方法进行校验
Action继承ActionSupport,并将校验文件和Action类放在同一包下,
文件的取名格式为:ActionClassName-validation.xml
<validators>
<field name=”username”>
<field-validator type=”requiredstring”>
<param name=”trim” >true</param>
<message>用户名不能为空</message>
</field-validator>
</field>
<validators>
关于type属性的值见com.opensymphony.xwork2.validator.validators下
的default.xml中;
校验器的例子:
Email:
<field-validator type=”email”>
<message>电子邮箱地址无效</message>
</field>
Regex
<field-validator type=”regex”>
<param name=”expression”>![CDATA[^1[358]\D{9}$]]</param>
<message>手机号格式不正确</message>
</field>
Int
<field-validator type=”int”>
<param name=”min”>1</param>
<param name=”max”>150</param>
<message>年龄必须在1-150之间</message>
</field>
OGNL
<field-validator type=”fieldexpression”>
<param name=”expression”>![CDATA[imagefile.length
()<=0]]</param>
<message>文件不能为空</message>
</field>
对指定方法进行校验
ActionClassName-ActionName-validation.xml
<action name=”user-*” method=”{1}”></action>
//提交哪个对哪个方法进行哪个方法进行校验;
四、输入校验的流程
类型转换器对请求参数进行类型转换,并把转换后的值赋给action中的属性
如果在执行类型那个转换的过程中出现异常,系统会将异常信息保存到ActionContext,
conversionError拦截器将异常信息添加到fieldErrors里;
系统通过反射技术先调用action中的validateXxx()方法
在调用validate()方法
如果系统中的fieldErrors存在错误信息,系统将发送名称为input的视图
五、国际化
baseName_en_US.properties
baseName_zh_CN.properties
配置全局资源和国际化信息
struts.xml.
<constant name=”struts.custom.i18n.resources” value=” baseName”/>
Jsp
<s:text name=””/>     //name为资源文件中的key
<s:text name=”welcome”>
<s:param>wanglei</s:param>
<s:param>study</s:param>
</s:text>
在Action类中可以继承ActionSupport,使用getText(“key”)得到国际化信息
getText(“welcome”,new String[]{“liming”,”study”});
资源文件
Key=value
welcome={0},欢迎来到XXXX{1}
配置包范围的全局化资源文件
package_en_US.properties
package_zh_CN.properties
package为固定写法,而不是包名
Action范围资源文件
在Action类所在的路径,放置ActionClassName_en_US.properties,
ActionClassName_zh_CN.properties
国际化—Jsp中直接访问某个资源文件
<s:i18n name=”baseName”>
<s:text name=”welcome”/>
</s:i18n>
访问com.icsss.action包下的资源文件
<s:i18n name=”com/icss/action/package”>
<s:text name=”welcome”>
<s:param>小张</s:param>
</s:text>
</s:i18n>
六、日期类型
xxxx-xx-xx形式写年月日可以直接转换为java.utli.Date;
七、类型转换器
局部类型转化器(com.opensymphony.xwork2.conversion.impl.DefaultTypeConberter)
public class DateTypeConverter extends DefaultTypeConvert{
public object convertValue(Map<String , Object> context , Object value ,Class toType){
SimpleDateFormate dateFormat=new SimpleDateFormat(“yyyy/MM/dd”);
try{
if(toType==Date.class){
String[] params=(String[])value;
return dateFormat.parse(params[0]);
}else if(toType==String.class){
Date date=(Date)value;
return dateFormat.format(date);
}
}catch(ParseException e){
return null;
}
}
}
在Action类所在的包下放置ActionClassName-conversion.properties
在properties文件中的内容为:
属性名称=类型转换器的去类名称
birthday=com.icss.conversion.DateTypeConverter
全局类型转换器
xwork-conversion.properties
内容为:待转换的类型=类型转换器的全名称
Java.util.Date=com.icss.conversion.DateConverter
八、访问或添加request/session/application属性
ActionContext ctx=ActionContext.getContext();
ctx.getApplication().put();         //往ServletContext或Application属性里放置
ctx.getSession(0.put();
ctx.put();             //往request里放值
九、获取request/session/application对象
方法一:
通过ServletActionContext类直接获取
HttpServletRequest request=ServletActionContext.getRequest();
ServletContext servletContext=ServletActionContxt.getServletContext();
HttpServletResponse respone=ServletActionContext.getResponse();
方法二:
实现指定接口,由Struts框架运行时注入:
public class HelloWorldAction implement ServletRequestAware,ServletResponseAware,
ServletContxtAware{
private HttpServletRequest request;
private ServletContext servletContext;
private HttpServletResponse respone;
setter
.
.
.
}

转载于:https://www.cnblogs.com/qq347471280/p/4570244.html

浅谈Struts2下相关推荐

  1. 浅谈struts2之chain

    前一段时间,有关chain的机制着实困绕了许久.尽管网上有许多关于chain的解说,但要不是只谈大理论,不结合实例:要不就是只有示例,没有挖出示例背后的意义.    先解释下chain吧: Chain ...

  2. python中文字符串编码_浅谈python下含中文字符串正则表达式的编码问题

    前言 Python文件默认的编码格式是ascii ,无法识别汉字,因为ascii码中没有中文. 所以py文件中要写中文字符时,一般在开头加 # -*- coding: utf-8 -*- 或者 #co ...

  3. shell for循环1到100_浅谈Linux下shell 编程的for循环常用的6种结构

    浅谈Linux下shell 编程的for循环常用的6种结构 1. 常用for循环结构 (1) for 变量 in 值1 值2 值3... do 程序块儿 done (2) for 变量 in `命令` ...

  4. Linux系统常用函数,浅谈linux下的一些常用函数的总结(必看篇)

    1.exit()函数 exit(int n)  其实就是直接退出程序, 因为默认的标准程序入口为int main(int argc, char** argv),返回值是int型的. 一般在shell下 ...

  5. python打开文件夹中的tiff_浅谈python下tiff图像的读取和保存方法

    对比测试 scipy.misc和 PIL.Image和 libtiff.TIFF三个库 输入: 1. (读取矩阵) 读入uint8.uint16.float32的lena.tif 2. (生成矩阵) ...

  6. Linux命令删除find,浅谈Linux下通过find命令进行rm文件删除的小技巧

    我们经常会通过find命令进行批量操作,如:批量删除旧文件.批量修改.基于时间的文件统计.基于文件大小的文件统计等,在这些操作当中,由于rm删除操作会导致目录结构变化,如果要通过find结合rm的操作 ...

  7. 计算机病毒的隐藏方式有ign,浅谈windows下的病毒隐藏技术.doc

    浅谈windows下的病毒隐藏技术 浙江工业职业技术学院 毕业论文 (2011届) 浅谈windows下的病毒隐藏技术 学生姓名 学 号 分 院 专 业 信 指导教师 完成日期 2011年5月 19日 ...

  8. linux cp mv区别,浅谈Linux下mv和cp命令的区别

    1.功能上的区别 mv:用户可以使用该命令为文件或目录重命名或将文件由一个目录移入另一个目录中. cp: 该命令的功能是将给出的文件或目录拷贝到另一文件或目录中. 2.从inode角度来区分 mv:会 ...

  9. linux gz文件压缩比,浅谈Linux下各种压缩 解压命令和压缩比率对比.doc

    浅谈Linux下各种压缩 解压命令和压缩比率对比 浅谈Linux下各种压缩 解压命令和压缩比率对比 Linux下压缩.解压命令五花八门,不像在windows下一个winrar打遍天下无敌手,清一色的. ...

最新文章

  1. SpringMVC的form:form表单的使用
  2. ios mysql 修改数据,iOS数据库FMDB--增删改查(模糊查询)实写记录
  3. 《TCP/IP具体解释》读书笔记(18章)-TCP连接的建立与中止
  4. Lombok — Java代码自动生成 开发利器
  5. 在JDK 8中可通过反射获得构造函数/方法参数元数据
  6. Eclipse 可视化插件Windows Builder在线更新地址
  7. VC中如何重命名一个文件
  8. 【粉丝福利,免费送书】SQL编程思想
  9. cis系统服务器,基于客户端/服务器模式头影测量信息系统(CIS)影像测量模块的开发...
  10. 无聊 做一个支付宝打赏二维码
  11. xp 启动linux系统安装,Linux网络安装Centos/windows 2003/xp 并且启动winpe系统
  12. php实现发送微信模板消息的方法
  13. 使用python抓取并分析数据—链家网(requests+BeautifulSoup)(转)
  14. 输出100内所含5或5的倍数的值(Python)
  15. 怎么的测试用例是一个好的测试用例?
  16. 如何使用Erdas进行监督分类
  17. 在小县城适合做什么生意?
  18. 微信php第三方登录接口,ThinkPHP实现微信三方登录
  19. HTTP状态码304详解
  20. 绘图板程序设计及其具体实现 第三篇

热门文章

  1. TensorFlow 2.0 极简教程,不到 20 行代码带你入门
  2. c语言scarf函数原型,scanf 函数原型.doc
  3. php面向对象分页,PHP基于面向对象封装的分页类示例
  4. 为什么vs数据库中文显示问号_在vs2008中注册页面中的中文字符写入数据库的后中文会变成问号...
  5. python工资管理系统课程设计_高校教师绩效工资管理系统设计开发,源码下载
  6. idea设置文件多行显示
  7. 012_SpringBoot视图层技术thymeleaf-条件判断
  8. 055_Unicode字符官方标准六
  9. 014_logback中的SiftingAppender
  10. java 获取excel最后一行_查找Excel电子表格中的最后一行