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]