gpt4 book ai didi

java - 将请求解释为 JSP 而不是通过 servlet

转载 作者:行者123 更新时间:2023-12-01 19:22:07 26 4
gpt4 key购买 nike

这应该相对简单,但我还没有找到如何做到这一点的描述。

我的设置是一个简单的 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 );

我想做的是:

  • 在 servlet 内部,如果请求是 .jsp 文件的 URL,我希望能够在将字符串写入响应之前让容器解释 JSP scriptlet 部分/taglib 内容。
  • 更改我的 web.xml,使其在 MyEverythingServlet 之外处理 .jsp 文件。

最佳答案

  • Inside the servlet, if the request is a URL to a .jsp file, I'd like to be able to have the container interpret the JSP scriptlet parts/taglib stuff before I write the String to the response.

没有直接可用的 API 可以像这样以编程方式处理 JSP 文件。理论上,您希望在公共(public) Web 内容中包含 JSP,并将请求转发到 JSP。您可以使用 RequestDispatcher#forward() 来完成此操作。

if (request.getServletPath().endsWith(".jsp")) {
request.getRequestDispatcher(request.getServletPath()).forward(request, response);
} else {
// Write "plain" to response as you did.
}

您可能只想对路径的正确性进行一些检查,但这至少应该给您一个通用的想法。然而有一个小问题:servlet 将被递归调用,因为它映射到 /* 上。您宁愿用 Filter 替换此 MyEverythingServlet,它只是将作业的剩余部分委托(delegate)给应用程序服务器的内置默认 servlet。使用 Servlet 来监听 /* 已经是一种设计味道,表明它从一开始就应该是一个 Filter ;)

  • Change my web.xml to have it process .jsp files outside of MyEverythingServlet.

web.xml 中不能有“否定”url-pattern。您能做的最好的事情就是让 servlet 监听更具体的 url-pattern,例如 *.txt/static/* 并保持外部的 JSP 文件。

关于java - 将请求解释为 JSP 而不是通过 servlet,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3662664/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com