[java]34、文件上传
1、表单form文件上传-前端
1、form
支持文件上传,必须设置两个属性
method=post
、enctype="multipart/form-data"
2、input
在上传文件时,需要设置成如下
<input type="file" name="imagefile" accept="image/*">
type="file"
:代表承载的内容为文件类型
accept="image/*"
:代表可选择的内容为图片类型的文件
3、webapp
的文件的目录结构
. 所有的
html
以及资源文件需要放到webapp
目录下. 所有
asset
资源文件放在WEB-INF
的目录外面,需要外界可以随时访问. 所有的
html
以及jsp
文件需要放到WEB-INF
目录下,屏蔽外界通过url
的直接访问方式4、在
web.xml
中配置400
、500
页面
<error-page>
<error-code>404</error-code>
<location>/WEB-INF/page/404.jsp</location>
</error-page>
<error-page>
<error-code>500</error-code>
<location>/WEB-INF/page/500.jsp</location>
</error-page>
5、form
文件上传-实时预览
刚上传完毕的图片,有可能会出现无法实时预览的问题(要等一会才能预览成功)
把tomcat
的缓存资源功能关掉即可,在%TOMCAT_HOME%/conf/context.xml
中增加Resources
标签。
<?xml version="1.0" encoding="UTF-8"?>
<Context>
<WatchedResource>WEB-INF/web.xml</WatchedResource>
<WatchedResource>WEB-INF/tomcat-web.xml</WatchedResource>
<WatchedResource>${catalina.base}/conf/web.xml</WatchedResource>
<Resources
cachingAllowed="false"
cacheMaxSize="0" />
</Context>
2、表单form文件上传-后端
1、Java
后台中常使用commons-fileupload
来接收客户端上传的文件,需要在pom.xml
配置如下
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.4</version>
</dependency>
2、使用类ServletFileUpload
解析请求参数
ServletFileUpload upload = new ServletFileUpload(new DiskFileItemFactory());
upload.setHeaderEncoding("UTF-8");
List<FileItem> items = upload.parseRequest(request);
3、验证码(Kaptcha)
Kaptcha
是一个可高度可配置的验证码生成工具,由Google
提供
支持在pom.xml
配置
<dependency>
<groupId>com.github.penggle</groupId>
<artifactId>kaptcha</artifactId>
<version>2.3.2</version>
</dependency>
4、Filter(过滤器)
4.1、filter的配置
@WebFilter(/*)
等价于在web.xml
中配置如下
<filter>
<filter-name>LoginFilter</filter-name>
<filter-class>com.sj.xr.filter.LoginFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>LoginFilter</filter-name>
<url-pattern>/*</url-pattern>
<dispatcher>REQUEST</dispatcher>
</filter-mapping>
注:多个
filter
类的执行顺序是按照类名的字符串比较顺序过滤。
web.xml
中配置的多个filter
是按照配置的顺序从上到下执行过滤。
4.2、filter的生命周期
init
:将Filter
添加到Web
容器中时调用,一般用来加载资源(当项目部署到Tomcat
的时候回调用)
destory
:将Filter
从Web
容器中移除时调用,一般用来销毁资源(当项目从Tomcat
中解除部署的时候)
4.3、dispatcherTypes属性
1、REQUEST
:默认值。浏览器直接请求资源
//浏览器直接请求index.jsp资源时会执行过滤
@WebFilter(value = "/index.jsp",dispatcherTypes = DispatcherType.REQUEST)
2、FORWARD
:转发访问资源
//在发生转发请求时,如果转发请求的资源时index.jsp则执行过滤
@WebFilter(value = "/index.jsp",dispatcherTypes=DispatcherType.FORWARD)
3、INCLUDE
:包含访问资源
4、ERROR
:错误跳转资源
5、ASYNC
:异步访问资源
注意:上述的取值可以同时存在多个,比如:
@WebFilter(value = "/index.jsp",dispatcherTypes ={DispatcherType.REQUEST,DispatcherType.FORWARD})
web.xml
配置
<dispatcher></dispatcher>
5、Listener
1、Listener
译为监听器
比较常用的是ServletContextListener
,用来监听ServletContext
的创建和销毁
contextInitialized:ServletContext
创建的时候调用,可以在项目启动(部署)的时候做一些一次性的操作(资源加载)
contextDestoryed:ServletContext
销毁的时候调用
2、ServletContext
一个ServletContext
对象就代表一个Web
应用,可以用来与Web
容器(Tomcat
)通信
获取ServletContext
request.getServletContext
、servlet.getServletContext
3、在web.xml
中配置
<listener>
<listener-class>com.sj.xr.listener.ContextListener</listener-class>
</listener>