redirect implemented
[pnews.git] / war / src / main / java / pnews / servlet / Pnews.java
1 package pnews.servlet;
2
3 import java.io.IOException;
4 import java.io.UnsupportedEncodingException;
5 import java.net.URLDecoder;
6 import java.util.logging.Level;
7 import java.util.logging.Logger;
8
9 import javax.servlet.ServletConfig;
10 import javax.servlet.ServletException;
11 import javax.servlet.http.HttpServlet;
12 import javax.servlet.http.HttpServletRequest;
13 import javax.servlet.http.HttpServletResponse;
14
15 public class Pnews extends HttpServlet {
16         private static final Logger LOG = Logger.getLogger(Pnews.class.getName());
17         private static final long serialVersionUID = 1L;
18
19         private static String getQueryParameter(HttpServletRequest rq, String key)
20                         throws UnsupportedEncodingException {
21                 String[] params;
22                 int idx;
23                 String q;
24                 
25                 q = rq.getQueryString();
26                 
27                 if (q == null)
28                         return null;
29                 
30                 params = URLDecoder.decode(q, "UTF-8").split("&");
31                 
32                 for (String p: params) {                        
33                         idx = p.indexOf('=');
34                                                 
35                         if (idx > 1 && p.substring(0, idx).equals(key))
36                                 return p.substring(idx + 1);
37                 }
38                 
39                 return null;
40         }
41         
42         private static void redirect(HttpServletRequest rq, HttpServletResponse rp) {
43                 String redirectURL;
44                 
45                 try {
46                         redirectURL = getQueryParameter(rq, "url");
47                                                
48                         LOG.info("Request redirection to " + redirectURL);
49                         
50                         if (redirectURL != null) {
51                                 rp.setHeader("Location", redirectURL);
52                                 rp.setStatus(HttpServletResponse.SC_TEMPORARY_REDIRECT);
53                         } else {
54                                 rp.setStatus(HttpServletResponse.SC_NOT_FOUND);
55                         }
56
57                 } catch (UnsupportedEncodingException e) {
58                         e.printStackTrace();
59                         LOG.log(Level.SEVERE, "redirect failure", e);
60                         rp.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
61                 }                
62         }
63         
64         @Override
65         protected void  doGet(HttpServletRequest req, HttpServletResponse resp) {
66                 String path;
67                 
68                 LOG.info("doGet " + req.getRequestURI());
69
70                 path = req.getPathInfo();
71                 
72                 if (path.equals("/redirect")) {
73                         redirect(req, resp);
74                 } else {
75                         try {
76                                 resp.getWriter().write("Not found " + req.getPathInfo());
77                                 resp.setStatus(HttpServletResponse.SC_NOT_FOUND);
78                         } catch (IOException e) {
79                                 LOG.log(Level.SEVERE, "doGet failure", e);
80                         }
81                 }
82         }
83         
84         @Override
85         public void init(ServletConfig config) throws ServletException {
86                 LOG.info("Pnews servlet init " + config.getServletContext().getContextPath());
87                 
88         }
89 }