forked from jruby/jruby-rack
-
Notifications
You must be signed in to change notification settings - Fork 0
/
RackTag.java
57 lines (50 loc) · 2.14 KB
/
RackTag.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
/*
* Copyright (c) 2010-2011 Engine Yard, Inc.
* Copyright (c) 2007-2009 Sun Microsystems, Inc.
* This source code is available under the MIT license.
* See the file LICENSE.txt for details.
*/
package org.jruby.rack;
import org.jruby.rack.servlet.ServletRackEnvironment;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletRequestWrapper;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.tagext.TagSupport;
public class RackTag extends TagSupport {
private String path;
private String params;
public void setPath(String path) {
this.path = path;
}
public void setParams(String params) {
this.params = params;
}
@Override
public int doEndTag() throws JspException {
try {
RackApplicationFactory factory = (RackApplicationFactory)
pageContext.getServletContext().getAttribute(RackApplicationFactory.FACTORY);
RackContext context = (RackContext)
pageContext.getServletContext().getAttribute(RackApplicationFactory.RACK_CONTEXT);
RackApplication app = factory.getApplication();
try {
final HttpServletRequest request =
new HttpServletRequestWrapper((HttpServletRequest) pageContext.getRequest()) {
@Override public String getMethod() { return "GET"; }
@Override public String getRequestURI() { return path; }
@Override public String getPathInfo() { return path; }
@Override public String getQueryString() { return params; }
@Override public String getServletPath() { return ""; }
};
RackResponse result = app.call(new ServletRackEnvironment(request, (HttpServletResponse) pageContext.getResponse(), context));
pageContext.getOut().write(result.getBody());
} finally {
factory.finishedWithApplication(app);
}
} catch (Exception e) {
throw new JspException(e);
}
return EVAL_PAGE;
}
}