1
2
3
4
5
6
7
8
9
10
11
12
13
14 package org.eclipse.jetty.server.handler;
15
16 import java.io.IOException;
17
18 import javax.servlet.ServletException;
19 import javax.servlet.http.HttpServletRequest;
20 import javax.servlet.http.HttpServletResponse;
21
22 import org.eclipse.jetty.http.HttpHeaders;
23 import org.eclipse.jetty.server.HandlerContainer;
24 import org.eclipse.jetty.server.Request;
25 import org.eclipse.jetty.util.URIUtil;
26
27
28
29
30
31
32
33 public class MovedContextHandler extends ContextHandler
34 {
35 final Redirector _redirector;
36 String _newContextURL;
37 boolean _discardPathInfo;
38 boolean _discardQuery;
39 boolean _permanent;
40 String _expires;
41
42 public MovedContextHandler()
43 {
44 _redirector=new Redirector();
45 setHandler(_redirector);
46 setAllowNullPathInfo(true);
47 }
48
49 public MovedContextHandler(HandlerContainer parent, String contextPath, String newContextURL)
50 {
51 super(parent,contextPath);
52 _newContextURL=newContextURL;
53 _redirector=new Redirector();
54 setHandler(_redirector);
55 }
56
57 public boolean isDiscardPathInfo()
58 {
59 return _discardPathInfo;
60 }
61
62 public void setDiscardPathInfo(boolean discardPathInfo)
63 {
64 _discardPathInfo = discardPathInfo;
65 }
66
67 public String getNewContextURL()
68 {
69 return _newContextURL;
70 }
71
72 public void setNewContextURL(String newContextURL)
73 {
74 _newContextURL = newContextURL;
75 }
76
77 public boolean isPermanent()
78 {
79 return _permanent;
80 }
81
82 public void setPermanent(boolean permanent)
83 {
84 _permanent = permanent;
85 }
86
87 public boolean isDiscardQuery()
88 {
89 return _discardQuery;
90 }
91
92 public void setDiscardQuery(boolean discardQuery)
93 {
94 _discardQuery = discardQuery;
95 }
96
97 private class Redirector extends AbstractHandler
98 {
99 public void handle(String target, Request baseRequest, HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException
100 {
101 if (_newContextURL==null)
102 return;
103
104 String url = _newContextURL;
105 if (!_discardPathInfo && request.getPathInfo()!=null)
106 url=URIUtil.addPaths(url, request.getPathInfo());
107 if (!_discardQuery && request.getQueryString()!=null)
108 url+="?"+request.getQueryString();
109
110 response.sendRedirect(response.encodeRedirectURL(url));
111
112 String path=_newContextURL;
113 if (!_discardPathInfo && request.getPathInfo()!=null)
114 path=URIUtil.addPaths(path, request.getPathInfo());
115
116 StringBuilder location = URIUtil.hasScheme(path)?new StringBuilder():baseRequest.getRootURL();
117
118 location.append(path);
119 if (!_discardQuery && request.getQueryString()!=null)
120 {
121 location.append('?');
122 location.append(request.getQueryString());
123 }
124
125 response.setHeader(HttpHeaders.LOCATION,location.toString());
126
127 if (_expires!=null)
128 response.setHeader(HttpHeaders.EXPIRES,_expires);
129
130 response.setStatus(_permanent?HttpServletResponse.SC_MOVED_PERMANENTLY:HttpServletResponse.SC_FOUND);
131 response.setContentLength(0);
132 baseRequest.setHandled(true);
133 }
134
135 }
136
137
138
139
140
141 public String getExpires()
142 {
143 return _expires;
144 }
145
146
147
148
149
150 public void setExpires(String expires)
151 {
152 _expires = expires;
153 }
154
155 }