1. 常用过滤器配置

    1. Session有效性验证

      用来判断当前的Session是否合法,该逻辑在实际应用中可重载,非必须。

      配置示例代码:

      <filter>
      	<filter-name>SessionVerifyFilter</filter-name>
      	<filter-class>com.ailk.web.servlet.SessionVerifyFilter</filter-class>
      	<init-param>
      		<param-name>page-login</param-name>
      		<param-value>*</param-value>
      	</init-param>
      	<init-param>
      		<param-name>page-error</param-name>
      		<param-value>Exception</param-value>
      	</init-param>
      </filter>
      
      <filter-mapping>
      	<filter-name>SessionVerifyFilter</filter-name>
      	<servlet-name>demo</servlet-name>
      </filter-mapping>
      
    2. Gzip压缩

      如果开启Gzip功能,则必须配置该Filter,否则页面无法加载样式、JS脚本等。

      配置示例代码:

      <filter>
      	<filter-name>GzipFilter</filter-name>
      	<filter-class>com.ailk.web.servlet.gzip.GzipFilter</filter-class>
      	<init-param>
      		<param-name>max-age</param-name>
      		<param-value></param-value>
      	</init-param>
      </filter>
      
      <filter-mapping>
      	<filter-name>GzipFilter</filter-name>
      	<url-pattern>*.gzjs</url-pattern>
      </filter-mapping>
      
      <filter-mapping>
      	<filter-name>GzipFilter</filter-name>
      	<url-pattern>*.gzcss</url-pattern>
      </filter-mapping>
      
    3. ETag缓存控制

      如果需要ETag功能,则添加该配置,非必须。

      配置示例代码:

      <filter>
      	<filter-name>ETagFilter</filter-name>
      	<filter-class>com.ailk.web.servlet.etag.ETagFilter</filter-class>
      </filter>
      
      <filter-mapping>
      	<filter-name>ETagFilter</filter-name>
      	<url-pattern>*.png</url-pattern>
      </filter-mapping> 
      
      <filter-mapping>
      	<filter-name>ETagFilter</filter-name>
      	<url-pattern>*.jpg</url-pattern>
      </filter-mapping>
      
      <filter-mapping>
      	<filter-name>ETagFilter</filter-name>
      	<url-pattern>*.gif</url-pattern>
      </filter-mapping>
      
      <filter-mapping>
      	<filter-name>ETagFilter</filter-name>
      	<url-pattern>*.css</url-pattern>
      </filter-mapping>
      
      <filter-mapping>
      	<filter-name>ETagFilter</filter-name>
      	<url-pattern>*.js</url-pattern>
      </filter-mapping>
      
      <filter-mapping>
      	<filter-name>ETagFilter</filter-name>
      	<url-pattern>*.gzcss</url-pattern>
      </filter-mapping>
      
      <filter-mapping>
      	<filter-name>ETagFilter</filter-name>
      	<url-pattern>*.gzjs</url-pattern>
      </filter-mapping>
      
    4. web 安全控制

      如果需要使用 web 安全控制的功能,则添加如下配置。
      其中 page-login 对应的是自定义的登录页面的 name
      page-error 对应的是自定义的异常控制页面的 name
      若未自定义 page-login 和 page-error 则可使用示例中的配置

      配置示例代码:

      <filter>
      	<filter-name>WebSecurityFilter</filter-name>
      	<filter-class>com.ailk.web.servlet.WebSecurityFilter</filter-class>
      	<init-param>
      		<param-name>page-error</param-name>
      		<param-value>Exception</param-value>
      	</init-param>
      </filter>
      
      <filter-mapping>
      	<filter-name>WebSecurityFilter</filter-name>
      	<servlet-name>demo</servlet-name>
      </filter-mapping>
      
  2. 常用Servlet配置

    1. 页面访问Servlet

      若有WEB页面,则必须配置,该servlet-name必须存在与之同名的.application文件。

      配置示例代码:

      <servlet>
      	<servlet-name>demo</servlet-name>
      	<servlet-class>com.ailk.web.servlet.PageServlet</servlet-class>
      	<load-on-startup>0</load-on-startup>
      </servlet>
      
      <servlet-mapping>
      	<servlet-name>demo</servlet-name>
      	<url-pattern>/demo</url-pattern>
      </servlet-mapping>
      
    2. 文件上传Servlet

      根据文件的操作可以定制IFileAction,当FileAction加载失败时使用默认的DefaultFileAction

      IFileAction接口说明:

      com.ailk.web.view.servlet.file.IFileAction
      /**
       * 查询显示已上传的文件列表
       * 返回的数据结构必须是{fileId:{fileId:xx,fileName:xx,fileSize:xx,fileType:xx}},否则解析失败
       * @param config 初始化FileServlet参数
       * @param params 前台传入所有参数
       * @param fileIds 文件列表 以,分隔
       * @param ftpSite FTP站点
       * @return
       */
      public IDataBus query(Map<String, String> config,Map<String,String[]> params, String fileIds,String ftpSite);
      
      /**
       * 文件删除,成功返回0
       * @param config 初始化FileServlet参数
       * @param params 前台传入所有参数
       * @param fileId 文件id
       * @param ftpSite FTP站点
       * @throws Exception
       */
      public int delete(Map<String, String> config,Map<String,String[]> params, String fileId,String ftpSite) ;
      
      /**
       * 文件上传,成功返回fileId,失败返回小于0的整形字符串
       * @param config 初始化FileServlet参数
       * @param file  上传文件信息
       * @param params 前台传入所有参数
       * @param ftpSite FTP站点
       * @throws Exception
       */
      public String upload(Map<String, String> config, FileItem file,Map<String,String[]> params,String ftpSite)  throws IOException;
      
      
      /**
       * 文件下载,成功返回0
       * @param config 初始化FileServlet参数
       * @param response HttpServletResponse
       * @param fileId 文件id
       * @param real_name 文件重命名
       * @param ftpSite FTP站点
       * @param params 前台传入所有参数
       * @throws Exception
       */
      public int download(Map<String, String> config,HttpServletResponse response, String fileId,String real_name,String ftpSite,Map<String,String[]> params) ;
      
      
      /**
       * 查看文件,成功返回0
       * @param config 初始化FileServlet参数
       * @param params 前台传入所有参数
       * @param fileId 文件id
       * @param ftpSite FTP站点
       */
      public int show(Map<String, String> config,Map<String,String[]> params, String fileId,String ftpSite);
      
      
      /**
       * 操作合法性验证,包括访问的权限,访问的文件目录等
       * @param config 初始化FileServlet参数
       * @param params 前台传入所有参数
       * @param fileId 文件id
       * @param ftpSite FTP站点
       * @return
       * @throws Exception
       */
      public boolean isValidate(Map<String, String> config,Map<String,String[]> params, String fileId,String ftpSite) ;
      
      /**
       * 限制上传文件的最大值,默认是FILE_MAX_SIZE(30M)
       * @return
       */
      public int getMaxSize();
      
      /**
       * 获取单个文件存在内存中的阀值大小,默认是FILE_THRESHOLD_SIZE(300kb)
       * @return
       */
      public int getThresholdSize();
      
      /**
       * 获取文件临时存放的磁盘目录,默认是System.getProperty("java.io.tmpdir");
       * @return
       */
      public String getTempRepository();
      
      /**
       * 获取upload,download,delete,show的返回值获取返回结果
       * @param actionCode
       * @return
       */
      public String getActionInfo(int actionCode);
      
      /**
       * 生成文件id
       * @param config 初始化FileServlet参数
       * @param params 前台传入所有参数
       * @param fileItem 上传文件信息
       * @return
       */
      public String makeFileId(Map<String, String> config,Map<String,String[]> params,FileItem fileItem);
      
      /**
       * 文件上传后执行
       * @param config 初始化FileServlet参数
       * @param params 前台传入所有参数
       * @param fileItem 上传文件信息
       * @return
       */
      public void afterUpload(Map<String, String> config,Map<String,String[]> params,FileItem fileItem);
      

      配置示例代码:

      <servlet>
      	<servlet-name>attach</servlet-name>
      	<servlet-class>com.ailk.web.servlet.file.FileServlet</servlet-class>
      	
      	<!-- file action -->
      	<init-param>
      		<param-name>action</param-name>
      		<param-value>com.ailk.web.servlet.file.DefaultFileAction</param-value>
      	</init-param>
      
      	<load-on-startup>0</load-on-startup>
      </servlet>
      
      <servlet-mapping>
      	<servlet-name>attach</servlet-name>
      	<url-pattern>/attach</url-pattern>
      </servlet-mapping>
      
    3. 图片验证码Servlet

      配置示例代码:

      <servlet>
      	<servlet-name>image</servlet-name>
      	<servlet-class>com.ailk.web.servlet.file.ImageServlet</servlet-class>
      	<load-on-startup>0</load-on-startup>
      </servlet>
      
      <servlet-mapping>
      	<servlet-name>image</servlet-name>
      	<url-pattern>/image</url-pattern>
      </servlet-mapping>
      
    4. Session超时设置

      配置示例代码:

      <session-config>
      	<session-timeout>30</session-timeout>
      </session-config>
      
    5. 默认访路径

      若有WEB页面访问,一般配置成页面访问Servlet的访问路径。

      配置示例代码:

      <welcome-file-list>
      	<welcome-file>demo</welcome-file>
      </welcome-file-list>
      
    6. 完整配置示例

      <?xml version="1.0" encoding="UTF-8"?>
      <!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd">
      <web-app>
      	<filter>
      		<filter-name>SessionVerifyFilter</filter-name>
      		<filter-class>com.ailk.web.servlet.SessionVerifyFilter</filter-class>
      		<init-param>
      			<param-name>page-login</param-name>
      			<param-value>*</param-value>
      		</init-param>
      		<init-param>
      			<param-name>page-error</param-name>
      			<param-value>Exception</param-value>
      		</init-param>
      	</filter>
      	
      	<filter>
      		<filter-name>GzipFilter</filter-name>
      		<filter-class>com.ailk.web.servlet.gzip.GzipFilter</filter-class>
      		<init-param>
      			<param-name>max-age</param-name>
      			<param-value></param-value>
      		</init-param>
      	</filter>
      	
      	<filter>
      		<filter-name>ETagFilter</filter-name>
      		<filter-class>com.ailk.web.servlet.etag.ETagFilter</filter-class>
      	</filter>
      	
      	<filter-mapping>
      		<filter-name>SessionVerifyFilter</filter-name>
      		<servlet-name>demo</servlet-name>
      	</filter-mapping>
      	
      	
      	<filter-mapping>
      		<filter-name>GzipFilter</filter-name>
      		<url-pattern>*.gzjs</url-pattern>
      	</filter-mapping>
      
      	<filter-mapping>
      		<filter-name>GzipFilter</filter-name>
      		<url-pattern>*.gzcss</url-pattern>
      	</filter-mapping>
      	
      	<filter-mapping>
      	  <filter-name>ETagFilter</filter-name>
      	  <url-pattern>*.png</url-pattern>
      	</filter-mapping> 
      	
      	<filter-mapping>
      	  <filter-name>ETagFilter</filter-name>
      	  <url-pattern>*.jpg</url-pattern>
      	</filter-mapping>
      
      	<filter-mapping>
      	  <filter-name>ETagFilter</filter-name>
      	  <url-pattern>*.gif</url-pattern>
      	</filter-mapping>
      	
      	<filter-mapping>
      	  <filter-name>ETagFilter</filter-name>
      	  <url-pattern>*.css</url-pattern>
      	</filter-mapping>
      
      	<filter-mapping>
      	  <filter-name>ETagFilter</filter-name>
      	  <url-pattern>*.js</url-pattern>
      	</filter-mapping>
      	
      	<filter-mapping>
      	  <filter-name>ETagFilter</filter-name>
      	  <url-pattern>*.gzcss</url-pattern>
      	</filter-mapping>
      
      	<filter-mapping>
      	  <filter-name>ETagFilter</filter-name>
      	  <url-pattern>*.gzjs</url-pattern>
      	</filter-mapping>
      	
      	<servlet>
      		<servlet-name>demo</servlet-name>
      		<servlet-class>com.ailk.web.servlet.PageServlet</servlet-class>
      		<load-on-startup>0</load-on-startup>
      	</servlet>
      	
      	<servlet>
      		<servlet-name>attach</servlet-name>
      		<servlet-class>com.ailk.web.servlet.file.FileServlet</servlet-class>
      		<load-on-startup>0</load-on-startup>
      	</servlet>
      	
      	<servlet>
      		<servlet-name>image</servlet-name>
      		<servlet-class>com.ailk.web.servlet.file.ImageServlet</servlet-class>
      		<load-on-startup>0</load-on-startup>
      	</servlet>
      	
      	<servlet-mapping>
      		<servlet-name>demo</servlet-name>
      		<url-pattern>/demo</url-pattern>
      	</servlet-mapping>
      	
      	<servlet-mapping>
      		<servlet-name>attach</servlet-name>
      		<url-pattern>/attach</url-pattern>
      	</servlet-mapping>
      	
      	<servlet-mapping>
      		<servlet-name>image</servlet-name>
      		<url-pattern>/image</url-pattern>
      	</servlet-mapping>
      	
      	<session-config>
      		<session-timeout>30</session-timeout>
      	</session-config>
      	
      	<welcome-file-list>
      		<welcome-file>demo</welcome-file>
      	</welcome-file-list>
      	
      </web-app>