【Web开发】OGNL语言+文件上传下载
OGNL语言
OGNL语言是一种可以方便地操作对象属性的开源表达式语言,也是Struts2默认的表达式语言。它的优点有:
1.支持对象方法调用,例如xxx.doSomething()
2.支持类静态方法调用和值访问,格式为@[类全名(包括包路径)]@[方法名|值名]。例如,@aaa@qq.com(‘foo%s’,’bar’)或者@aaa@qq.com_NAME。
3.支持赋值操作和表达式串联,如price=100,disocunt=0.8,calculatePrice(price * discount),返回80
4.可以方便地访问OGNL上下文(OGNLContext)和ActionContext。
5.可以方便地操作集合对象。
1.”#”符号
(1)用于访问上下文,相当于ActionContext.getContext()
#parameters.id[0]相当于request.getParameter(“id”)
#request.username相当于request.getAttribute(“userName”)
#session.username相当于session.getAttribute(“userName”)
#application.username相当于application.getAttribute(“userName”)
#attr 用于按request > session > application顺序访问其属性(attribute) #attr.userName相当于按顺序在以上三个范围(scope)内读取userName属性,直到找到为止。
(2)用于过滤和投影集合,例如books.{?#this.price<100}。
(3)用于构造Map,例如#{‘book’:’23’,’book2’:’55’}
2.”%”的用法
“%”符号的用途是在标志的属性为字符串类型时,计算OGNL表达式的值。
<h3>%的用途</h3>
<p><s:url value="#foobar['foo1']" /></p>
<p><s:url value="%{#foobar['foo1']}" /></p>
3.”$”的用法
1、用于在国际化资源文件中,引用OGNL表达式
2、在Struts 2配置文件中,引用OGNL表达式
例如:
<action name="AddPhoto" class="addPhoto">
<interceptor-ref name="fileUploadStack" />
<result type="redirect">/myOGNL.action?id=${id}</result>
</action>
文件上传
MyUpAction.java
public class MyUpAction extends ActionSupport{
private File upload;
private String uploadContentType;
private String uploadFileName;
private String savePath;
/*省略get()和set()方法*/
public String execute() throws Exception{
String fileName=getSavePath()+"\\"+getUploadFileName();
FileOutputStream fos=new FileOutputStream(fileName);
FileInputStream fis=new FileInputStream(getUpload());
byte []b=new byte[1024];
int len=0;
while((len=fis.read(b))>0){
fos.write(b,0,len);
}
return SUCCESS;
}
}
up.jsp
<s:form action="up" namespace="/user" method="post"
enctype="multipart/form-data" theme="simple">
<s:file name="upload" cssStyle="width:300px;"></s:file>
<s:submit value="确定"/>
</s:form>
application/x-www-form-urlencoded不是不能上传文件,是只能上传文本格式的文件,multipart/form-data是将文件以二进制的形式上传,这样可以实现多种类型的文件上传
struts.xml
saveDir用于指定存放指定临时文件的文件夹,不配置会出现Unable to find ‘struts.multipart.saveDir’ property setting错误。参考了这篇文章。
fileLoad为Struts2提供的文件上传拦截器
allowTypes:指定运行上传的文件类型
maximumSize:指定允许上传的文件大小,单位是字节。
<constant name="struts.multipart.saveDir" value="/tmp"/>
<package name="user" extends="struts-default" namespace="/user">
<action name="up" class="ch5.MyUpAction">
<interceptor-ref name="fileUpload">
<param name="allowedTypes">image/png,image/gif,image/jpg</param>
<param name="maximumSize">90000000</param>
</interceptor-ref>
<interceptor-ref name="defaultStack"/>
<param name="savePath">D:/pics/</param>
<result name="input">/up.jsp</result>
<result name="success">/success.jsp</result>
</action>
</package>
success.jsp
<h1>上传成功!</h1>
<s:property value="uploadFileName"/>
<br>
<img src="<s:property value="'D:/pics/'+uploadFileName"/>"/>
随便找的图片-_-|||
文件下载
MyDownload.java
public class MyDownload extends ActionSupport{
private String inputPath;
/* 省略get()和set()方法 */
public InputStream getTargetFile() throws Exception{
return ServletActionContext.getServletContext().getResourceAsStream(inputPath);
}
public String execute()throws Exception{
return SUCCESS;
}
}
struts.xml
contentType:指定文件的下载类型。
inputName:指定下载文件的输入流入口,在action中实现getXXX()类
contentDisposition:指定文件下载的处理方式,默认为inline,即直接尝试打开,附件attachment为文件保存。
<package name="user" extends="struts-default" namespace="/user">
<default-action-ref name="download"/>
<action name="download" class="ch5.MyDownload">
<param name="inputPath">\save\photo.jpg</param>
<result name="success" type="stream">
<param name="contentType">image/jpg</param>
<param name="inputName">targetFile</param>
<param name="contentDisposition">attachment;filename="photo.jpg"</param>
<param name="bufferSize">2048</param>
</result>
</action>
</package>
download.jsp
<a href="/test5/user/download.action" >我要下载</a>
上一篇: SpringBoot实现文件上传和下载
下一篇: javascript怎么删除对象的属性
推荐阅读
-
Git 项目推荐 | Go 语言编写的 web 完全开发框架_html/css_WEB-ITnose
-
有没有开发web控件的文件与书籍推荐
-
【微信开发】上传下载多媒体文件
-
spring boot开发遇到坑之spring-boot-starter-web配置文件使用教程
-
spring boot开发遇到坑之spring-boot-starter-web配置文件使用教程
-
java web开发中获取tomcat上properties文件内容的方法
-
web文件管理器的后续开发
-
javascript基础知识总结(web前端开发语言)
-
javascript基础知识总结(web前端开发语言)
-
循序渐进学.Net Core Web Api开发系列【5】:文件上传