这应该相对简单,但我还没有找到如何做的描述。
我的设置是一个简单的Web应用程序,它通过servlet处理每个请求(我将这个问题称为MyEverythingServlet)。这是我的web.xml的略微修改版本:
<servlet>
<servlet-name>MyEverythingServlet</servlet-name>
<servlet-class>blah.blah.blah.MyEverythingServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>MyEverythingServlet</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
现在,servlet非常简单,要么做一些工作(当work.do是路径的一部分时),如果在路径中指定了.txt文件,我们将进行一些验证,然后加载文件并将文本作为回复发送:
response.getOutputStream().print( content );
我想做的是:
答案 0 :(得分:4)
- 在servlet内部,如果请求是.jsp文件的URL,我希望能够在将String写入响应之前让容器解释JSP scriptlet parts / taglib内容。
没有直接的API可用于以编程方式处理JSP文件。从理论上讲,您希望将JSP放在公共webcontent中,并将转发请求发送到JSP。您可以使用RequestDispatcher#forward()
。
if (request.getServletPath().endsWith(".jsp")) {
request.getRequestDispatcher(request.getServletPath()).forward(request, response);
} else {
// Write "plain" to response as you did.
}
您可能只想对路径的正确性进行一些检查,但这至少应该为您提供一般的想法。但是有一点问题:servlet将被递归调用,因为它映射在/*
上。您宁愿将MyEverythingServlet
替换为Filter
,它只是将作业的剩余部分委托给appserver的内置默认servlet。让Servlet
听/*
已经是一种设计气味,表明它应该从一开始就是Filter
;)
- 更改我的web.xml,让它处理MyEverythingServlet之外的.jsp文件。
url-pattern
中不能有“否定”web.xml
。最好的办法是让servlet监听更具体的url-pattern
*.txt
或/static/*
,并将JSP文件保存在外面。