9

I have my Servlet responding on the everything "/" url-pattern. Inside I need to sometimes render html, so I'd like to .include a JSP page, but I'd like that .jsp to be inaccessible externally. Also, how can I pass a model object into it.

Hafthor
  • 16,358
  • 9
  • 56
  • 65

2 Answers2

16

I'd like to .include a JSP page, but I'd like that .jsp to be inaccessible externally.

Put it in /WEB-INF folder. The client cannot access it, but the RequestDispatcher can access it.

request.getRequestDispatcher("/WEB-INF/page.jsp").forward(request, response);

Also, how can I pass a model object into it.

Set it as request attribute.

request.setAttribute("bean", bean); // It'll be available as ${bean} in JSP.

See also:


That said, be aware that mapping a servlet on / takes over the job of servletcontainer's builtin DefaultServlet for serving static content. You'll have to handle all static files like JS/CSS/images yourself. Consider choosing a more specific url-pattern like /pages/* or *.do for JSP views. Bring eventually a Filter in front as outlined in this answer.

Community
  • 1
  • 1
BalusC
  • 1,082,665
  • 372
  • 3,610
  • 3,555
  • 2
    I refer putting resources in their own sub folder like (`WEB-INF/jsp`) – rsp Nov 19 '10 at 20:33
  • @rsp: You can indeed always categorize it further the way you want :) – BalusC Nov 19 '10 at 20:35
  • Wasn't my choice on the / servlet - no directories, no extensions. Your answer worked once I added a /WEB-INF/jsp/* mapping to org.apache.jasper.servlet.JspServlet – Hafthor Nov 19 '10 at 20:48
  • You're welcome. As to the extra mapping: that's weird. It should by default work out of the box. Was the servletcontainer's builtin `JspServlet` in servletcontainer's own `web.xml` changed to ignore `INCLUDE` and `FORWARD` dispatches or so? – BalusC Nov 19 '10 at 20:51
  • web.xml had nothing but my catch-all servlet - without the /WEB-INF/jsp/* mapping, it would keep invoking my cath-all servlet and then SO. – Hafthor Nov 19 '10 at 21:10
  • Ok. Thx for all the help BalusC - I tried to get the filter working, but for now my eek servlet works. – Hafthor Nov 19 '10 at 23:08
2

It's easy:

  1. Put your JSP file inside WEB-INF folder.
  2. In your servlet, perform a getServletContext().getRequestDispatcher("/WEB-INF/path/your.jsp").forward(request, response);
Pablo Santa Cruz
  • 176,835
  • 32
  • 241
  • 292