posting again
On Fri, 5 Nov 2004 10:49:25 -0800, Sanjay Choudhary <[EMAIL PROTECTED]> wrote: > Hi All, > > I have an application which contains 100+ jsp's. Use case is to > inject the Javascript conditionally into the JSP's. Condition is - If > a cookie is present in the request, inject the Javascript else leave > it alone. > > I started with a simple struts example project for the proof of > concept. I thought of a Servlet Filter and I created a filter as > below > > import java.io.IOException; > > import javax.servlet.Filter; > import javax.servlet.FilterChain; > import javax.servlet.FilterConfig; > import javax.servlet.RequestDispatcher; > import javax.servlet.ServletException; > import javax.servlet.ServletRequest; > import javax.servlet.ServletResponse; > import javax.servlet.http.Cookie; > import javax.servlet.http.HttpServletRequest; > > public class SecurePageFilter implements Filter { > private static final String SECURITY_COOKIE = "ObSSOCookie"; > private static final String SECURITY_JS = "/check.js"; > > public void init(FilterConfig filterConfig) throws ServletException { > } > > public void destroy() { > } > > public void doFilter( > ServletRequest oRequest, > ServletResponse oResponse, > FilterChain oFilterChain) > throws IOException, ServletException { > > oFilterChain.doFilter(oRequest, oResponse); > > HttpServletRequest woRequest = (HttpServletRequest) oRequest; > Cookie[] aoCookies = woRequest.getCookies(); > String strUrl = woRequest.getRequestURI(); > > if (strUrl != null > && strUrl.endsWith("deleteCookie.jsp") > || aoCookies == null) > return; > > for (int i = 0; i < aoCookies.length; i++) { > Cookie oCookie = aoCookies[i]; > > if (oCookie.getName().equals(SECURITY_COOKIE)) { > String strValue = oCookie.getValue(); > if (strValue != null && strValue.length() > 0) { > RequestDispatcher rd = > woRequest.getRequestDispatcher(SECURITY_JS); > rd.include(oRequest, oResponse); > oResponse.flushBuffer(); > return; > } > } > } > return; > } // doFilter > > } // SecurePageFilter > > My filter is mapped to (*.jsp and *.do) in the web.xml. > > This works fine if I have a URI as > http://localhost:9080/struts-example/welcome.jsp > > But this doesn't work if I use the URL > http://localhost:9080/struts-example/welcome.do > > To explore more I downloaded Struts 1.2 source and took a look in > RequestDispatcher class --> processForward(..) , processInclude(..), > doForward(..) and doInclude(..) methods. And off course, process(..) > method. In the process method , if request is forwarded using the > RequestDispatcher, which is normally the case in *.do types URI's, > control is returned back to the servlet without processing the > 'processInclude'. I further extended the RequestDispatcher class and > implemented my own doForward method. This is more or less same as > Struts implementation but also calls includes. Code is as below :- > protected void doForward( > String uri, > HttpServletRequest request, > HttpServletResponse response) > throws IOException, ServletException { > > // Unwrap the multipart request, if there is one. > if (request instanceof MultipartRequestWrapper) { > request = ((MultipartRequestWrapper) request).getRequest(); > } > > RequestDispatcher rd = getServletContext().getRequestDispatcher(uri); > if (rd == null) { > response.sendError( > HttpServletResponse.SC_INTERNAL_SERVER_ERROR, > getInternal().getMessage("requestDispatcher", uri)); > return; > } > rd.forward(request, response); > doIncludeJS(request,response); > } > > protected void doIncludeJS( > HttpServletRequest request, > HttpServletResponse response) > throws IOException, ServletException { > Cookie[] aoCookies = request.getCookies(); > String strUrl = request.getRequestURI(); > > if (strUrl != null > && strUrl.endsWith("deleteCookie.jsp") > || aoCookies == null) > return; > > for (int i = 0; i < aoCookies.length; i++) { > Cookie oCookie = aoCookies[i]; > > if (oCookie.getName().equals(SECURITY_COOKIE)) { > String strValue = oCookie.getValue(); > if (strValue != null && strValue.length() > 0) { > doInclude(SECURITY_JS,request, response); > break; > } > } > } > return; > } > > Still to my surprise, JS file did not get injected in the response.( I > debugged the application do ensure that doInclude(..) method is > called) > > [Q1] - Can we use RequestDispatcher to Forward and Include for the > same request/response? (I know we can't do Include and Forward, it > throws an error. But in case of Forward and Include no error is thrown > but nothing gets included). > > [Q2] - Is there anyother way of including into request with URI like *.do? > > Any help is highly appreciated. > > Thanks, > > Sanjay > --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]