1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 package org.mortbay.jetty.handler;
16
17 import java.io.IOException;
18
19 import javax.servlet.ServletException;
20 import javax.servlet.http.HttpServletRequest;
21 import javax.servlet.http.HttpServletResponse;
22
23 import org.mortbay.jetty.HandlerContainer;
24 import org.mortbay.jetty.HttpConnection;
25 import org.mortbay.jetty.Request;
26 import org.mortbay.util.URIUtil;
27
28
29
30
31
32
33
34 public class MovedContextHandler extends ContextHandler
35 {
36 String _newContextURL;
37 boolean _discardPathInfo;
38 boolean _discardQuery;
39 boolean _permanent;
40 Redirector _redirector;
41
42 public MovedContextHandler()
43 {
44 _redirector=new Redirector();
45 addHandler(_redirector);
46 }
47
48 public MovedContextHandler(HandlerContainer parent, String contextPath, String newContextURL)
49 {
50 super(parent,contextPath);
51 _newContextURL=newContextURL;
52 _redirector=new Redirector();
53 addHandler(_redirector);
54 }
55
56 public boolean isDiscardPathInfo()
57 {
58 return _discardPathInfo;
59 }
60
61 public void setDiscardPathInfo(boolean discardPathInfo)
62 {
63 _discardPathInfo = discardPathInfo;
64 }
65
66 public String getNewContextURL()
67 {
68 return _newContextURL;
69 }
70
71 public void setNewContextURL(String newContextURL)
72 {
73 _newContextURL = newContextURL;
74 }
75
76 public boolean isPermanent()
77 {
78 return _permanent;
79 }
80
81 public void setPermanent(boolean permanent)
82 {
83 _permanent = permanent;
84 }
85
86 public boolean isDiscardQuery()
87 {
88 return _discardQuery;
89 }
90
91 public void setDiscardQuery(boolean discardQuery)
92 {
93 _discardQuery = discardQuery;
94 }
95
96 private class Redirector extends AbstractHandler
97 {
98 public void handle(String target, HttpServletRequest request, HttpServletResponse response, int dispatch) throws IOException, ServletException
99 {
100 if (_newContextURL==null)
101 return;
102
103 Request base_request=(request instanceof Request)?(Request)request:HttpConnection.getCurrentConnection().getRequest();
104
105 String url = _newContextURL;
106 if (!_discardPathInfo && request.getPathInfo()!=null)
107 url=URIUtil.addPaths(url, request.getPathInfo());
108 if (!_discardQuery && request.getQueryString()!=null)
109 url+="?"+request.getQueryString();
110
111 response.sendRedirect(url);
112 if (_permanent)
113 response.setStatus(HttpServletResponse.SC_MOVED_PERMANENTLY);
114
115 base_request.setHandled(true);
116 }
117
118 }
119
120 }