KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > opensymphony > webwork > views > velocity > WebWorkVelocityServlet


1 /*
2  * Copyright (c) 2002-2003 by OpenSymphony
3  * All rights reserved.
4  */

5 package com.opensymphony.webwork.views.velocity;
6
7 import com.opensymphony.webwork.ServletActionContext;
8 import com.opensymphony.webwork.config.Configuration;
9 import com.opensymphony.webwork.views.util.ContextUtil;
10 import com.opensymphony.xwork.ActionContext;
11 import org.apache.velocity.Template;
12 import org.apache.velocity.context.Context;
13 import org.apache.velocity.exception.MethodInvocationException;
14 import org.apache.velocity.exception.ParseErrorException;
15 import org.apache.velocity.exception.ResourceNotFoundException;
16 import org.apache.velocity.runtime.RuntimeSingleton;
17 import org.apache.velocity.servlet.VelocityServlet;
18
19 import javax.servlet.ServletConfig JavaDoc;
20 import javax.servlet.ServletException JavaDoc;
21 import javax.servlet.http.HttpServletRequest JavaDoc;
22 import javax.servlet.http.HttpServletResponse JavaDoc;
23 import javax.servlet.jsp.JspFactory JavaDoc;
24 import javax.servlet.jsp.PageContext JavaDoc;
25 import java.io.FileNotFoundException JavaDoc;
26 import java.io.IOException JavaDoc;
27 import java.io.UnsupportedEncodingException JavaDoc;
28 import java.io.Writer JavaDoc;
29 import java.util.Properties JavaDoc;
30
31
32 /**
33  * @author $Author: plightbo $
34  * @version $Revision: 1.18 $
35  * @deprecated please use {@link com.opensymphony.webwork.dispatcher.VelocityResult} instead of direct access
36  */

37 public class WebWorkVelocityServlet extends VelocityServlet {
38     private VelocityManager velocityManager;
39
40     public WebWorkVelocityServlet() {
41         velocityManager = VelocityManager.getInstance();
42     }
43
44     public void init(ServletConfig JavaDoc servletConfig) throws ServletException JavaDoc {
45         super.init(servletConfig);
46
47         // initialize our VelocityManager
48
velocityManager.init(servletConfig.getServletContext());
49     }
50
51     protected Context createContext(HttpServletRequest JavaDoc request, HttpServletResponse JavaDoc response) {
52         return velocityManager.createContext(ActionContext.getContext().getValueStack(), request, response);
53     }
54
55     protected Template handleRequest(HttpServletRequest JavaDoc httpServletRequest, HttpServletResponse JavaDoc httpServletResponse, Context context) throws Exception JavaDoc {
56         String JavaDoc servletPath = (String JavaDoc) httpServletRequest.getAttribute("javax.servlet.include.servlet_path");
57
58         if (servletPath == null) {
59             servletPath = httpServletRequest.getServletPath();
60         }
61
62         return getTemplate(servletPath, getEncoding());
63     }
64
65     /**
66      * This method extends the VelocityServlet's loadConfiguration method by performing the following actions:
67      * <ul>
68      * <li>invokes VelocityServlet.loadConfiguration to create a properties object</li>
69      * <li>alters the RESOURCE_LOADER to include a class loader</li>
70      * <li>configures the class loader using the WebWorkResourceLoader</li>
71      * </ul>
72      *
73      * @param servletConfig
74      * @throws IOException
75      * @throws FileNotFoundException
76      * @see org.apache.velocity.servlet.VelocityServlet#loadConfiguration
77      */

78     protected Properties JavaDoc loadConfiguration(ServletConfig JavaDoc servletConfig) throws IOException JavaDoc, FileNotFoundException JavaDoc {
79         return velocityManager.loadConfiguration(servletConfig.getServletContext());
80     }
81
82     /**
83      * create a PageContext and render the template to PageContext.getOut()
84      *
85      * @see VelocityServlet#mergeTemplate(Template, Context, HttpServletResponse) for additional documentation
86      */

87     protected void mergeTemplate(Template template, Context context, HttpServletResponse JavaDoc response) throws ResourceNotFoundException, ParseErrorException, MethodInvocationException, IOException JavaDoc, UnsupportedEncodingException JavaDoc, Exception JavaDoc {
88         // save the old PageContext
89
PageContext JavaDoc oldPageContext = ServletActionContext.getPageContext();
90
91         // create a new PageContext
92
JspFactory JavaDoc jspFactory = JspFactory.getDefaultFactory();
93         HttpServletRequest JavaDoc request = (HttpServletRequest JavaDoc) context.get(ContextUtil.REQUEST);
94         PageContext JavaDoc pageContext = jspFactory.getPageContext(this, request, response, null, true, 8192, true);
95
96         // put the new PageContext into ActionContext
97
ActionContext actionContext = ActionContext.getContext();
98         actionContext.put(ServletActionContext.PAGE_CONTEXT, pageContext);
99
100         try {
101             Writer JavaDoc writer = pageContext.getOut();
102             template.merge(context, writer);
103             writer.flush();
104         } finally {
105             // perform cleanup
106
jspFactory.releasePageContext(pageContext);
107             actionContext.put(ServletActionContext.PAGE_CONTEXT, oldPageContext);
108         }
109     }
110
111     private String JavaDoc getEncoding() {
112         // todo look into converting this to using XWork/WebWork2 encoding rules
113
try {
114             return Configuration.getString("webwork.i18n.encoding");
115         } catch (IllegalArgumentException JavaDoc e) {
116             return RuntimeSingleton.getString(RuntimeSingleton.OUTPUT_ENCODING, DEFAULT_OUTPUT_ENCODING);
117         }
118     }
119 }
120
Popular Tags