td.removeChild(input);
td.removeChild(button);
}
//将创建的组件加到中
td.appendChild(br);
td.appendChild(input);
td.appendChild(button);
}
**=======================
限制上传类型
=======================
**org.apache.struts2.interceptor.FileUploadInterceptor类
Long maximumSize:最大上传大小—每一个文件的大小,不是总和
String allowedTypes:允许的类型
**-------------
struts.xml
-------------**
<action …>
/upload.jsp
<result …/>
加入一个上传文件的拦截器并设置其属性
409600 单个上传文件最大不能超过400K
… mime类型,多个用逗号分开
** 加入默认的拦截器
注:后缀可以到tomcat/conf/web.xml中找中的字符串
**--------------
upload.jsp
--------------**
添加<s:fielderror />
**----------------------
更改显示的错误信息
----------------------**
org.apache.struts2中 找到struts-messages.properties
-----------------------
上传文件类型不匹配
struts.messages.error.content.type.not.allowed=Content-Type not allowed: {0} “{1}” {2}
-----------------------
**上传文件大小超出规定
**struts.messages.error.file.too.large=File too large: {0} “{1}” {2}
-----------------------
**上传文件出错
**struts.messages.error.uploading=Error uploading: {0}
创建一个全局的属性文件 /src/ messages.properties
struts.messages.error.content.type.not.allowed=不支持上传该类型的文件
struts.messages.error.file.too.large=上传文件过大,请重试
struts.messages.error.uploading=上传文件时发生错误
**---------
国际化
---------**
messages_en_US.properties
messages_zh_CN.properties
**==============================
下载
==============================**
处理下载的类:org.apache.struts2.dispatcher. StreamResult
== 属性 ==
String contentType = “text/plain”;
String contentLength;
String contentDisposition = “inline”;
String inputName = “inputStream”;
InputStream inputStream;
int bufferSize = 1024;
== 说明 ==
contentType
内容类型,和互联网MIME标准中的规定类型一致,例如text/plain代表纯文本,text/xml表示XML,image/gif代表GIF图片,image/jpeg代表JPG图片
用来做动态文件下载的,事先并不知道未来的文件类型是什么,那么我们可以把它的值设置成为:application/octet-stream;charset=ISO8859-1 ,注意一定要加入charset,否则某些时候会导致下载的文件出错
inputName
下载文件的来源流,对应着action类中某个类型为Inputstream的属性名,例如取值为inputStream的属性需要编写getInputStream()方法
contentDisposition
文件下载的处理方式,包括 内联( inline)和 附件( attachment)两种方式,而附件方式会弹出文件保存对话框,否则浏览器会尝试直接显示文件。取值为:attachment;filename=“struts2.txt”,表示文件下载的时候保存的名字应为struts2.txt。如果直接写filename=“struts2.txt”,那么默认情况是代表inline,浏览器会尝试自动打开它,等价于这样的写法:inline; filename=“struts2.txt”
bufferSize
下载缓冲区的大小
# contentType属性和contentDisposition分别对应着HTTP响应中的头Content-Type和Content-disposition头。
如:
HTTP头内容:
HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
Content-disposition: attachment;filename=“struts2.txt”
Content-Type: text/plain
Transfer-Encoding: chunked
Date: Sun, 02 Mar 2008 02:58:25 GMT
**----------
action
----------**
Class DownloadAction extends ActionSupport {
private String path;
// setter… getter…
//必须返回一个输入流,该流是让用户下载的
public InputStream getDownloadFile() {
//从某个文件获得流 --这里是获得项目root下upload下的文件
//也可以 new FileInputStream(“c:/test.text”);
return ServletActionContext.getServletContext().getResourceAsStream(“/upload/struts2.ppt”);
}
public String execute() throws Exception {
return SUCCESS;
}
}
**-----------
struts.xml
-----------**
**
**/download/xhtml.txt
**
**
**
**text/plain
**
**attachment;filename=“xhtml.txt”
**
**downloadFile
4096
**==========================
解决下载文件名中文问题
==========================**
1.在下载action获取文件名的方法中先进行转码然后再返回
path = new String( path.getBytes(), “ISO-8859-1” );
2.xml配置文件动态的获取path的值
attachment;filename=" **${path}**"${path} 用于动态的获取所配置的action中path成员的值,相当于调用getPath()方法
3. /*解决中文乱码问题,设置后产生一个新的String对象此对象以改变了编码*/ String newpath=URLEncoder.encode(path,“utf-8”);
**-------
action
-------
**private String path;
public String getPath() {
try { //转换成西欧字符集
**path = new String( path.getBytes(), “ISO-8859-1” );
**} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
return path;
}
public void setPath(String path) {
this.path = path;
}
**---------------
struts.xml
---------------**
/download/wmlscript实例.txt text/plain attachment;filename="${path}" downloadFile 4096**=================
安全隐患
=================**
访问者如果精通Struts 2的话,它可能使用这样的带有表单参数的地址来访问:
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新
如果你觉得这些内容对你有帮助,可以添加V获取:vip1024b (备注Java)
最后
俗话说,好学者临池学书,不过网络时代,对于大多数的我们来说,我倒是觉得学习意识的觉醒很重要,这是开始学习的转折点,比如看到对自己方向发展有用的信息,先收藏一波是一波,比如如果你觉得我这篇文章ok,先点赞收藏一波。这样,等真的沉下心来学习,不至于被找资料分散了心神。慢慢来,先从点赞收藏做起,加油吧!
另外,给大家安排了一波学习面试资料:
以上就是本文的全部内容,希望对大家的面试有所帮助,祝大家早日升职加薪迎娶白富美走上人生巅峰!
一个人可以走的很快,但一群人才能走的更远。如果你从事以下工作或对以下感兴趣,欢迎戳这里加入程序员的圈子,让我们一起学习成长!
AI人工智能、Android移动开发、AIGC大模型、C C#、Go语言、Java、Linux运维、云计算、MySQL、PMP、网络安全、Python爬虫、UE5、UI设计、Unity3D、Web前端开发、产品经理、车载开发、大数据、鸿蒙、计算机网络、嵌入式物联网、软件测试、数据结构与算法、音视频开发、Flutter、IOS开发、PHP开发、.NET、安卓逆向、云计算
不至于被找资料分散了心神。慢慢来,先从点赞收藏做起,加油吧!
另外,给大家安排了一波学习面试资料:
[外链图片转存中…(img-3BKv6bIC-1712449051089)]
[外链图片转存中…(img-IrGK7VWA-1712449051089)]
以上就是本文的全部内容,希望对大家的面试有所帮助,祝大家早日升职加薪迎娶白富美走上人生巅峰!
一个人可以走的很快,但一群人才能走的更远。如果你从事以下工作或对以下感兴趣,欢迎戳这里加入程序员的圈子,让我们一起学习成长!
AI人工智能、Android移动开发、AIGC大模型、C C#、Go语言、Java、Linux运维、云计算、MySQL、PMP、网络安全、Python爬虫、UE5、UI设计、Unity3D、Web前端开发、产品经理、车载开发、大数据、鸿蒙、计算机网络、嵌入式物联网、软件测试、数据结构与算法、音视频开发、Flutter、IOS开发、PHP开发、.NET、安卓逆向、云计算