java - Jetty设置Servlet与JSP页面通信

标签 java jsp servlets jetty

我对 JSP 和 Jetty 非常陌生,我真的很困惑为什么这段代码不起作用。

这是我的主课

    public static void main(String[] args) {

        Server server = new Server(8080);

        // As we are using the Servlet to server responses remove the resource
        // handler.
        ResourceHandler resource_handler = new ResourceHandler();
        resource_handler.setDirectoriesListed(true);
        resource_handler.setWelcomeFiles(new String[] { "index.jsp",
                "index.html" });
        resource_handler.setResourceBase("./target/classes/webapp");

        // Initialise Servlet context handler
        ServletContextHandler context = new ServletContextHandler(
                ServletContextHandler.SESSIONS);

        context.setContextPath("/");



        // Create WebAppContext for JSP files.
        WebAppContext webAppContext = new WebAppContext();
        webAppContext.setResourceBase("./target/classes/webapp");

        HandlerList handlers = new HandlerList();
        handlers.setHandlers(new Handler[] { webAppContext, context,
                resource_handler, new DefaultHandler() });
        server.setHandler(handlers);

        try {
            server.start();
        } catch (Exception ex) {
            ex.printStackTrace();
            System.exit(-1);
        }

    }

这是我的 servlet

public class IndexServlet extends HttpServlet {

    private static final long serialVersionUID = 0x1C30CCL;

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // Set response content type.
        response.setContentType("text/html");
        response.setStatus(HttpServletResponse.SC_OK);

        request.setAttribute("message", "hello");


    }

}

这是我的index.jsp

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"%> 

<!DOCTYPE html>
<html>
<head>
<title>Book a hotel!</title>
</head>
<body>

<form action="index.jsp" method="post">
<input type="text" name="username" placeholder="Enter Username" />
<input type="Submit">
</form>
<p> The current local time at the hotel is: <%= new java.util.Date() %> </p>
    <h1>${message }</h1>

</body>
</html>

这是我的 web.xml

<?xml version="1.0" encoding="UTF-8"?>

<web-app xmlns="http://java.sun.com/xml/ns/javaee"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
 version="2.5">


<servlet>
    <servlet-class>ncl.raffaello.IndexServlet</servlet-class>
    <servlet-name>IndexServlet</servlet-name>
</servlet>
<servlet-mapping>
    <servlet-name>IndexServlet</servlet-name>
    <url-pattern>index.jsp</url-pattern>
</servlet-mapping>


</web-app>

我的问题是,虽然我知道 .jsp 在我没有 servlet 时可以工作,但我希望 servlet 设置请求变量,但是当启用 servlet 时,就像在我的代码示例中一样,它不会运行任何.jsp 的全部!有什么帮助吗?我不知道该怎么办...

最佳答案

您正在定义一个具有/index.jsp 映射的 servlet,并且具有同名的静态欢迎页面。

当容器收到/index.jsp 的请求时,它会查找最长的精确匹配,因此它与 servlet 匹配,并且调用 doGet。

如果未找到精确匹配,容器只会调用 jsp,在这种情况下,它将与 jsp 处理器将匹配的 *.jsp 进行匹配。

你有两个选择:

  1. 将 servlet 的映射设置为除 index.jsp 之外的其他内容。

  2. 将jsp放在子目录中,例如“welcomes”,因此您将欢迎文件定义为/welcome/index.jsp。然后,任何对/index.jsp 的请求都将转到 servlet,而对“/”的请求将转到 index.jsp。然后,servlet 可以将请求转发到/welcomes/index.jsp,并且该 jsp 将被调用。

关于java - Jetty设置Servlet与JSP页面通信,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34090997/

相关文章:

java - Tomcat v8+Servlet v3.1 在运行 servlet 时出现 404 错误

java - JsonArray 的项目没有 id

java - 一种禁用动态加载的 JAR 之间共享 Gradle 依赖关系的方法

java - 数据插入 mongoDB 集合后触发 MongoDB 事件

apache - org.apache.jasper.JasperException 异常

java - Servlet URL 模式与斜杠前缀匹配

java - 如何将相同的参数从一个 JSP 传递到两个 servlet?然后将不同的参数从servlet传递到同一个JSP?

java - PIG/Hadoop 问题 : ERROR 2081: Unable to setup the load function

java - HashMap重复键替换java

java - 在 Eclipse 中使用 JBDC 驱动程序会出现 classNotFoundException