[java]34、文件上传

2022-04-12  本文已影响0人  史记_d5da

1、表单form文件上传-前端

1、form支持文件上传,必须设置两个属性
method=postenctype="multipart/form-data"
2、input在上传文件时,需要设置成如下
<input type="file" name="imagefile" accept="image/*">
type="file":代表承载的内容为文件类型
accept="image/*":代表可选择的内容为图片类型的文件
3、webapp的文件的目录结构

webapp
. 所有的html以及资源文件需要放到webapp目录下
. 所有asset资源文件放在WEB-INF的目录外面,需要外界可以随时访问
. 所有的html以及jsp文件需要放到WEB-INF目录下,屏蔽外界通过url的直接访问方式
4、在web.xml中配置400500页面
<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:将FilterWeb容器中移除时调用,一般用来销毁资源(当项目从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.getServletContextservlet.getServletContext
3、在web.xml中配置

<listener>
    <listener-class>com.sj.xr.listener.ContextListener</listener-class>
</listener>
上一篇下一篇

猜你喜欢

热点阅读