如何使用 Jetty 提供 JSP 文件?

2024-04-30

我嵌入了 jetty,提供单个 servlet 和一些静态内容。我从下载了码头http://download.eclipse.org/jetty/7.4.5.v20110725/dist/ http://download.eclipse.org/jetty/7.4.5.v20110725/dist/,并将 JETTY_HOME/lib/* 和 JETTY_HOME/lib/jsp/* 中的所有 jar 添加到 eclipe 中的用户库;这些用户库已添加到我的项目中。如果我将 JSP 文件放入静态内容文件夹 (./webapps/static/) 并在以下位置查看它http://localhost:8080/static/test.jsp http://localhost:8080/static/test.jsp,java 表达式不会被求值,我会看到文件的完整内容。

我缺少什么?

我的主要java类:

import org.eclipse.jetty.server.Handler;
import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.server.handler.ContextHandler;
import org.eclipse.jetty.server.handler.HandlerList;
import org.eclipse.jetty.server.handler.ResourceHandler;
import org.eclipse.jetty.server.nio.SelectChannelConnector;
import org.eclipse.jetty.servlet.ServletContextHandler;
import org.eclipse.jetty.servlet.ServletHolder;

public class Test {

    public static void main(String[] args) throws Exception {
        Server server = new Server();
        SelectChannelConnector connector = new SelectChannelConnector();
        connector.setPort(8080);
        server.addConnector(connector);               

        // Create a resource handler for static content.
        ResourceHandler staticResourceHandler = new ResourceHandler();
        staticResourceHandler.setResourceBase("./webapps/static/");
        staticResourceHandler.setDirectoriesListed(true);        
        //staticResourceHandler.setWelcomeFiles(new String[]{ "index.html",  });         
        //staticResourceHandler.setCacheControl("no-store,no-cache,must-revalidate");

        // Create context handler for static resource handler.
        ContextHandler staticContextHandler = new ContextHandler();
        staticContextHandler.setContextPath("/static");       
        staticContextHandler.setHandler(staticResourceHandler);        

        // Create servlet context handler for main servlet.
        ServletContextHandler servletContextHandler = new ServletContextHandler(ServletContextHandler.SESSIONS);
        servletContextHandler.setContextPath("/");       
        servletContextHandler.addServlet(new ServletHolder(new HelloServlet()),"/");

        // Create a handler list to store our static and servlet context handlers.
        HandlerList handlers = new HandlerList();
        handlers.setHandlers(new Handler[] { staticContextHandler, servletContextHandler });

        // Add the handlers to the server and start jetty.
        server.setHandler(handlers);
        server.start();
        server.join();
    }           

}

我想要提供的 JSP 文件:

<html>
<body>
Time: <%= new java.util.Date() %>
</body>
</html>

JETTY_HOME/lib/ 中的 jar 列表:

$ ls -1 ./jetty-distribution-7.4.5.v20110725/lib/*.jar
./jetty-distribution-7.4.5.v20110725/lib/jetty-ajp-7.4.5.v20110725.jar
./jetty-distribution-7.4.5.v20110725/lib/jetty-annotations-7.4.5.v20110725.jar
./jetty-distribution-7.4.5.v20110725/lib/jetty-client-7.4.5.v20110725.jar
./jetty-distribution-7.4.5.v20110725/lib/jetty-continuation-7.4.5.v20110725.jar
./jetty-distribution-7.4.5.v20110725/lib/jetty-deploy-7.4.5.v20110725.jar
./jetty-distribution-7.4.5.v20110725/lib/jetty-http-7.4.5.v20110725.jar
./jetty-distribution-7.4.5.v20110725/lib/jetty-io-7.4.5.v20110725.jar
./jetty-distribution-7.4.5.v20110725/lib/jetty-jmx-7.4.5.v20110725.jar
./jetty-distribution-7.4.5.v20110725/lib/jetty-jndi-7.4.5.v20110725.jar
./jetty-distribution-7.4.5.v20110725/lib/jetty-overlay-deployer-7.4.5.v20110725.jar
./jetty-distribution-7.4.5.v20110725/lib/jetty-plus-7.4.5.v20110725.jar
./jetty-distribution-7.4.5.v20110725/lib/jetty-policy-7.4.5.v20110725.jar
./jetty-distribution-7.4.5.v20110725/lib/jetty-rewrite-7.4.5.v20110725.jar
./jetty-distribution-7.4.5.v20110725/lib/jetty-security-7.4.5.v20110725.jar
./jetty-distribution-7.4.5.v20110725/lib/jetty-server-7.4.5.v20110725.jar
./jetty-distribution-7.4.5.v20110725/lib/jetty-servlet-7.4.5.v20110725.jar
./jetty-distribution-7.4.5.v20110725/lib/jetty-servlets-7.4.5.v20110725.jar
./jetty-distribution-7.4.5.v20110725/lib/jetty-util-7.4.5.v20110725.jar
./jetty-distribution-7.4.5.v20110725/lib/jetty-webapp-7.4.5.v20110725.jar
./jetty-distribution-7.4.5.v20110725/lib/jetty-websocket-7.4.5.v20110725.jar
./jetty-distribution-7.4.5.v20110725/lib/jetty-xml-7.4.5.v20110725.jar
./jetty-distribution-7.4.5.v20110725/lib/servlet-api-2.5.jar

JETTY_HOME/lib/jsp/ 中的 jar 列表:

$ ls -1 ./jetty-distribution-7.4.5.v20110725/lib/jsp/*.jar
./jetty-distribution-7.4.5.v20110725/lib/jsp/com.sun.el_1.0.0.v201004190952.jar
./jetty-distribution-7.4.5.v20110725/lib/jsp/ecj-3.6.jar
./jetty-distribution-7.4.5.v20110725/lib/jsp/javax.el_2.1.0.v201004190952.jar
./jetty-distribution-7.4.5.v20110725/lib/jsp/javax.servlet.jsp_2.1.0.v201004190952.jar
./jetty-distribution-7.4.5.v20110725/lib/jsp/javax.servlet.jsp.jstl_1.2.0.v201004190952.jar
./jetty-distribution-7.4.5.v20110725/lib/jsp/jetty-jsp-2.1-7.4.5.v20110725.jar
./jetty-distribution-7.4.5.v20110725/lib/jsp/org.apache.jasper.glassfish_2.1.0.v201007080150.jar
./jetty-distribution-7.4.5.v20110725/lib/jsp/org.apache.taglibs.standard.glassfish_1.2.0.v201004190952.jar

更新:@JJ 的建议帮助解决了如何使用 jetty 正确提供 JSP 文件。我现在唯一的问题是如何阻止 jetty 列出 ./webapps/jsp/ 的目录内容。我目前最基本的修复是将index.html或index.jsp放入./webapps/jsp/中,但我更希望能够配置jetty以返回禁止的错误。

import org.eclipse.jetty.server.Handler;
import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.server.handler.ContextHandler;
import org.eclipse.jetty.server.handler.HandlerList;
import org.eclipse.jetty.server.handler.ResourceHandler;
import org.eclipse.jetty.server.nio.SelectChannelConnector;
import org.eclipse.jetty.servlet.ServletContextHandler;
import org.eclipse.jetty.servlet.ServletHolder;
import org.eclipse.jetty.webapp.WebAppContext;

public class Test {

    public static void main(String[] args) throws Exception {
        Server server = new Server();
        SelectChannelConnector connector = new SelectChannelConnector();
        connector.setHost("127.0.0.1");
        connector.setPort(8080);
        server.addConnector(connector);

        // Create a resource handler for static content.
        ResourceHandler staticResourceHandler = new ResourceHandler();
        staticResourceHandler.setResourceBase("./webapps/static/");
        staticResourceHandler.setDirectoriesListed(true);

        // Create context handler for static resource handler.
        ContextHandler staticContextHandler = new ContextHandler();
        staticContextHandler.setContextPath("/static");
        staticContextHandler.setHandler(staticResourceHandler);

        // Create WebAppContext for JSP files.
        WebAppContext webAppContext = new WebAppContext();
        webAppContext.setContextPath("/jsp");
        webAppContext.setResourceBase("./webapps/jsp/");
        // ??? THIS DOES NOT STOP DIR LISTING OF ./webapps/jsp/ ???
        webAppContext.setInitParameter("dirAllowed", "false");   

        // Create servlet context handler for main servlet.
        ServletContextHandler servletContextHandler = new ServletContextHandler(ServletContextHandler.SESSIONS);
        servletContextHandler.setContextPath("/");
        servletContextHandler.addServlet(new ServletHolder(new HelloServlet()), "/*");

        // Create a handler list to store our static, jsp and servlet context handlers.
        HandlerList handlers = new HandlerList();
        handlers.setHandlers(new Handler[] { staticContextHandler, webAppContext, servletContextHandler });

        // Add the handlers to the server and start jetty.
        server.setHandler(handlers);    
        server.start();
        server.join();
    }

}

我认为您缺少一些关键部分,它告诉 Jetty 将提供的文件解析为 JSP 内容而不是简单的静态文件。如果无法调试代码,我无法确切地看到您缺少什么,但是我建议您查看有关嵌入 Jetty 的参考资料:

http://docs.codehaus.org/display/JETTY/Embedding+Jetty http://docs.codehaus.org/display/JETTY/Embedding+Jetty

我特别认为这段代码可能与您的问题相关:

// assumes that this directory contains .html and .jsp files
// This is just a directory within your source tree, and can be exported as part of your normal .jar
final String WEBAPPDIR = "com/xxx/yyy/webapp";
final Server server = new Server(httpServerPort);
final String CONTEXTPATH = "/admin";

// for localhost:port/admin/index.html and whatever else is in the webapp directory
final URL warUrl = this.class.getClassLoader().getResource(WEBAPPDIR);
final String warUrlString = warUrl.toExternalForm();
server.setHandler(new WebAppContext(warUrlString, CONTEXTPATH));
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用 Jetty 提供 JSP 文件? 的相关文章

随机推荐

  • MATLAB:涉及大数的计算

    如何在 MATLAB 中执行涉及大量数字的计算 举一个简单的例子 任意精度计算器将显示 1 120 132 370 260 约为 1 56 但 MATLAB 无法执行此类计算 power 120 132 factorial 370 fact
  • .NET 中的嵌套事务

    我怎样才能执行与此等效的操作 我的理解是 这对于 TransactionScopes 来说是不可能的 https stackoverflow com questions 2741988 nested child transactionsco
  • 什么是 ADO.NET?

    我编写了一些 Access 数据库并使用了一些轻型 VBA 并且有一个 OO 类 现在我正在编写一个 C 数据库应用程序 我已经安装并连接了 VS 和 System Data SQLite 并输入了我的表和列 但这就是我陷入困境的地方 我正
  • 如何在 $match 内的 mongodb 聚合查询中使用 $regex

    我正在尝试使用 regex http docs mongodb org manual reference operator regex within match http docs mongodb org manual reference
  • 具有动态参数的 Oracle Lag 函数

    我有一个具体的问题 我有一个包含无效值的表 我需要替换无效值 此处0 与之前的值大于0 困难是 使用更新或插入对我来说是不合适的 游标和更新就可以了 我唯一的方法是使用 Select 语句 当我使用lag col1 1 当情况发生时 我只得
  • 从应用程序中删除死代码的最佳方法是什么? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我经常觉得 在多次迭代我的代码之后 我留下了一些函数 类或其他代码行 这些代码在以前的版本中有意义 但对于新版本来说并不是很有用 我知道探查器可
  • 如何使 scalatest 与 Spraytestkit 和 HttpServiceActor 一起工作

    我在看Spray 1 3 1 测试套件文档 http spray io documentation 1 2 1 spray testkit 但找不到下面我需要的正确示例 我有这个样本spray 1 3 1 service trait MyS
  • 如何在java中创建保留方法参数注释的动态代理?

    我目前正在尝试代理一些现有的 JAX RS 资源 以便允许我使用 Hibernate Validator 的方法验证支持 但是 当我代理我的类 当前使用 cglib 2 2 时 代理类中的参数上不存在 FormParam 注释 因此 JAX
  • firebase:“无法解析身份验证令牌。”

    你好 我正在使用 firebase 和 php 并使用这个library https github com ktamas77 firebase php supported commands 我收到此错误 无法解析身份验证令牌 我的身份验证令
  • Visual Studio Professional 2013 Update 5 中的“在线服务不可用”问题

    我一直在 vscode 2013 工作直到今天 但是 当我今天早上尝试打开 IDE 时 它收到 您的许可证已过时 必须更新 错误消息 如下所示 在我尝试更新许可证和登录操作之后 当我尝试这两个时 它得到 在线服务不可用 请稍后重试 错误消息
  • 将文本环绕在 div 两侧

    这是我试图实现的目标 与以下HTML div p some text p div Awesome content div div 有这个 text text text text text text text text text text t
  • data.table .SD 的 LHS 为 :=

    这是参考一个不同的问题 https stackoverflow com questions 26804362 iteratively create columns based on grouped variables 26805158 26
  • 从 IntelliJ IDEA 中的版本控制中删除文件

    我正在使用 IntelliJ IDEA 社区版 2016 1 我已将我的项目放在 Git 下 并将其托管在 GitHub 上 When I first hit that Share Project on GitHub button ever
  • 转储 $mft 文件的内容

    对于一些商业的我正在做的项目我需要能够读取 mft 文件中存储的实际数据 我找到了一个gpl lib http www codeproject com KB files NTFSParseLib aspx artkw ntfs这可能会有所帮
  • 如何在 Xcode 中保持标题注释最新

    Xcode 习惯于将各种 冗余 信息放在它创建的每个代码文件的顶部 其中包含版权声明 类名 项目名和客户端名称 不管你喜欢与否 一旦你创建了一个新的类 A 然后将其重构为 B 信息就已经是错误的 评论会一直说这是 A h 或 A m 此外
  • 对所有列实施搜索过滤器

    我在 PostgreSQL 中找到了这个搜索示例http www postgresql org docs current interactive textsearch tables html TEXTSEARCH TABLES SEARCH
  • 使用接口将泛型委托转换为另一种类型

    使用 NET 4 0 好的 所以我有 private Dictionary
  • flink - 使用匕首注入 - 不可序列化?

    我使用 Flink 最新通过 git 从 kafka 流式传输到 cassandra 为了简化单元测试 我通过 Dagger 添加依赖注入 ObjectGraph 似乎已正确设置自身 但 内部对象 被 Flink 标记为 不可序列化 如果我
  • Angular 2/4 存储令牌的位置

    我有一个用于生成令牌的 REST API 我在 Angular 4 客户端中使用它 但问题是在哪里存储该令牌 在互联网上我发现我可以存储在本地存储或cookie中 所以我的问题是 如果存储令牌是本地存储 并且我刚刚从另一个浏览器复制了有效令
  • 如何使用 Jetty 提供 JSP 文件?

    我嵌入了 jetty 提供单个 servlet 和一些静态内容 我从下载了码头http download eclipse org jetty 7 4 5 v20110725 dist http download eclipse org je