【发布时间】:2019-01-24 16:21:39
【问题描述】:
我是 Jetty 和 JSP 的新手。我现在正在尝试使用 Embedded Jetty 和 JSP 创建简单的服务器以生成 html。
我首先应该提到的是,我受限于 Jetty 版本。我必须使用的版本是 Jetty 7.6.x.x。
我需要创建一些 servlet,我可以在其中将请求/响应分派给 JSP 文件。问题是 JSP 文件似乎没有被编译,而不是评估表达式,而是将整个脚本作为纯文本扔到浏览器中。让我们看看。
public void start() throws Exception {
server = new Server();
SelectChannelConnector connector = new SelectChannelConnector();
connector.setPort(port);
server.addConnector(connector);
// Base URI to webapp, where jsp files are located
URI baseUri = getWebRootResourceUri();
// Create Servlet context
ServletContextHandler context = new ServletContextHandler(ServletContextHandler.SESSIONS);
context.setContextPath("/");
context.setResourceBase(baseUri.toASCIIString());
// Default Servlet (always last, always named "default")
ServletHolder holderDefault = new ServletHolder("default", DefaultServlet.class);
holderDefault.setInitParameter("resourceBase", baseUri.toASCIIString());
holderDefault.setInitParameter("dirAllowed", "true");
context.addServlet(holderDefault, "/");
server.setHandler(context);
server.start();
}
这是JSP文件
<!DOCTYPE html>
<html>
<head>
<title>Coin Flipper</title>
</head>
<body>
<h1>Coin Flipper</h1>
<p>Flipping a coin...</p>
<% if(Math.random() < .5){ %>
<p>Heads!</p>
<% }
else{ %>
<p>Tails!</p>
<% } %>
<hr />
<p>Refresh to flip again.</p>
</body>
</html>
结果如下:
我没有使用 web.xml,但如果它可以解决我的问题,我不介意使用它。
这也是我的 maven 依赖项:
<dependencies>
<!-- Embedded web server -->
<!-- https://mvnrepository.com/artifact/org.eclipse.jetty/jetty-server -->
<dependency>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-server</artifactId>
<version>7.6.21.v20160908</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.eclipse.jetty/jetty-servlet -->
<dependency>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-servlet</artifactId>
<version>7.6.21.v20160908</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.glassfish.web/jsp-impl -->
<dependency>
<groupId>org.glassfish.web</groupId>
<artifactId>jsp-impl</artifactId>
<version>2.1.3-b10</version>
</dependency>
</dependencies>
【问题讨论】:
-
Jetty 7 is EOL (End of Life),考虑升级到当前受支持的版本。
-
Jetty 9 从 Glassfish JSP 迁移到 Apache Jasper JSP,因为 Glassfish 实现中有太多未合并/未解决的错误。
-
@JoakimErdfelt “我首先要提到的是,我受限于 Jetty 版本。我必须使用的版本是 Jetty 7.6.x.x。”
-
继续使用 Jetty 7 的第一个原因是 Android,如果是这样,您必须使用 jetty 中的
jspc和 jetty 中的 glassfish 实现,并在部署之前预编译您的 JSP。另请注意,由于 Jetty 7 是 EOL,因此针对它的现有/已知/公共漏洞未修复。 -
@JoakimErdfelt 是的,我知道。这应该只是我实际项目所需的临时物品
标签: java maven jsp embedded-jetty end-of-life