前回質問させた頂いた続きになります。
編集中のページに、別のユーザーで編集ページに入らせない処理を書いています。
編集ページを抜けた判定を、フィルターで実装しようと処理を書いてみましたが、フィルターを実行すると、NullPointerException で処理が止まってします状況です。
そもそもフィルターで実装は不可能なのでしょうか
知恵をお貸しいただけないでしょうか。
また、フィルターのdestroyはいつ実行されるかご教授いただけないでしょうか(Servletのdestroyとの違い等)
よろしくお願いします。
Java
1package fw; 2 3import java.io.IOException; 4import java.util.Map; 5 6import javax.servlet.Filter; 7import javax.servlet.FilterChain; 8import javax.servlet.FilterConfig; 9import javax.servlet.ServletContext; 10import javax.servlet.ServletException; 11import javax.servlet.ServletRequest; 12import javax.servlet.ServletResponse; 13import javax.servlet.http.HttpServlet; 14 15import wiki.WikiBean; 16 17public class PostProcessing extends HttpServlet implements Filter { 18 19 public void init(FilterConfig filterConfig) 20 throws ServletException { 21 } 22 23 public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) 24 throws IOException, ServletException { 25 System.out.println("後処理フィルター"); 26 27 /* 編集ページのアクセスの履歴があれば、mapからidを削除 */ 28 ServletContext sc = null; 29 if (getServletContext() == null) { 30 }else{ 31 sc = getServletContext(); 32 String name = request.getParameter("name"); 33 if (sc.getAttribute("tmpMap") != null) { 34 int id = -1; 35 if (request.getParameter("id") == null || request.getParameter("id").isEmpty()) { 36 id = 0; 37 } else { 38 id = Integer.parseInt(request.getParameter("id")); 39 } 40 41 Map<String, Integer> map = WikiBean.autoCast(sc.getAttribute("tmpMap")); 42 if (map.containsKey(name)) { 43 if (map.get(name) == id) { 44 map.remove(name); 45 sc.setAttribute("tmpMap", map); 46 } 47 } 48 } 49 50 } 51 chain.doFilter(request, response); 52 } 53 54 public void destroy() { 55 ServletContext sc = null; 56 if (getServletContext() != null) { 57 sc = getServletContext(); 58 } 59 if (sc.getAttribute("tmpMap") != null) { 60 sc.removeAttribute("tmpName"); 61 } 62 } 63}
web.xml
1<?xml version="1.0" encoding="UTF-8"?> 2<web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 3 xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" 4 version="2.5"> 5 6 <!-- セッションタイムアウト設定 --> 7 <session-config> 8 <session-timeout>300</session-timeout> 9 </session-config> 10 11 <!-- フィルター --> 12 <filter> 13 <filter-name>EncodingFilter</filter-name> 14 <filter-class>fw.EncodingFilter</filter-class> 15 <init-param> 16 <param-name>encode</param-name> 17 <param-value>UTF-8</param-value> 18 </init-param> 19 </filter> 20 21 <filter-mapping> 22 <filter-name>EncodingFilter</filter-name> 23 <url-pattern>/*</url-pattern> 24 </filter-mapping> 25 26<!-- 27 <filter> 28 <filter-name>PostProcessing</filter-name> 29 <filter-class>fw.PostProcessing</filter-class> 30 </filter> 31 32 <filter-mapping> 33 <filter-name>PostProcessing</filter-name> 34 <url-pattern>/*</url-pattern> 35 </filter-mapping> 36 --> 37途中省略
回答3件
あなたの回答
tips
プレビュー