java - 使用没有 web.xml 的 JSPServlet jsp 文件
问题描述
我正在尝试从使用带有 web.xml 的 Jetty 转向使用嵌入式 Jetty。我已经设法使用 HttpServletDispatchers 移动了我的 REST 端点,但是我正在努力让 JSP servlet 移动
目前,在 web.xml 我有
<servlet-mapping>
<servlet-name>home</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>home</servlet-name>
<jsp-file>/index.jsp</jsp-file>
</servlet>
我拥有的 Java 代码类似于
final JspServlet indexServlet = new JspServlet();
final ServletHolder indexServletHolder = new ServletHolder("jsp", indexServlet);
indexServletHolder.setInitParameter("fork", "false");
indexServletHolder.setInitParameter("xpoweredBy", "false");
indexServletHolder.setInitOrder(1);
context.addServlet(indexServletHolder, "/*");
但我无法确定在哪里添加与
<jsp-file>/index.jsp</jsp-file>
进入Java
索引文件实际上只是一个普通的 html 页面,所以如果有一个更简单的方法来做到这一点而不是 JSP 文件,那么它也可以。但是,我不能将此文件作为欢迎文件,因为我需要将所有 URL 映射到这个文件(除非我也可以这样做并且我遗漏了一些东西)
解决方案
首先,使用JettyJspServlet
,而不是JspServlet
。
见https://github.com/jetty-project/embedded-jetty-jsp
您的使用JettyJspServlet
将仅配置为识别各种 jsp 扩展(例如:的 url 模式*.jsp
),而不是直接附加到/index.jsp
(其他 servlet 映射将是您的实际 jsp 文件和引用)
对于与...的 web.xml 段等效的代码
<servlet-mapping>
<servlet-name>home</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>home</servlet-name>
<jsp-file>/index.jsp</jsp-file>
</servlet>
这将是 ...
ServletHolder homeHolder = new ServletHolder();
homeHolder.setName("home");
homeHolder.setForcedPath("/index.jsp"); // equiv to <jsp-file>
context.addServlet(homeHolder, "/*");
...但是这个 url 模式对于“全 html”的 JSP 文件来说是无意义的。
这种模式意味着 100% 的请求将发送到您的/index.jsp
.
请看示例项目,因为在 Embedded-jetty 中设置 JSP 非常棘手!在 JSP 正常工作之前,许多事情必须以正确的方式就位。
您可能希望使用欢迎文件行为,如果请求的 URL 将返回 404,它将针对请求的 URL 解析(注意这个词!),欢迎文件列表一个接一个地尝试(使用技术类似于URI.resolve(String)
直到返回除 404 之外的其他内容。
WEB-INF/web.xml
在将在以下代码段中表示的标准 servlet 描述符中...
<web-app
xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
metadata-complete="false"
version="3.1">
<welcome-file-list>
<welcome-file>index.jsp</welcome-file> <!-- relative ref -->
<welcome-file>/index.jsp</welcome-file> <!-- absolute ref -->
<welcome-file>index.html</welcome-file>
</welcome-file-list>
</web-app>
或在代码中...
context.setWelcomeFiles(new String[]{"index.jsp", "/index.jsp", "index.html"});
推荐阅读
- java - 获取其他应用的通知渠道(或通知设置)
- ios - IOS/Xcode/Git:突然无法提交更改,无法自动检测电子邮件地址错误
- api - 麻烦下载npm包
- c - LMDB 作案手法
- java - 用于在字符串中查找 1 到 3 个字符的正则表达式
- pycharm - pycharm 中为每个属性(字段)生成自动 setter 和 getter 函数并生成自动承包商的功能
- selenium - 每次使用不同值的 Selenium 重复操作
- reactjs - 如何在 React Highchart 的工具提示中删除小数点时间
- python - 如何将数据从 Python 异步套接字服务器发送到子进程?
- java - 无法理解在 View.setOnClickListner(this) 中使用 this 关键字?