Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jsp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Jetty设置Servlet与JSP页面通信_Java_Jsp_Servlets_Jetty - Fatal编程技术网

Java Jetty设置Servlet与JSP页面通信

Java Jetty设置Servlet与JSP页面通信,java,jsp,servlets,jetty,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. ResourceHandl

我对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>

预订酒店!
酒店目前的当地时间为:

${message}
这是我的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>

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

你必须使用

PrintWriter out=res.getWriter();
out.println(“某物”)
sevlet
中,在
jsp
页面上打印某物

简单教程

将servlet映射url模式表单
index.jsp
更改为
test

<servlet-mapping>
        <servlet-name>IndexServlet</servlet-name>
        <url-pattern>test</url-pattern>
    </servlet-mapping>

IndexServlet
测试
将index.jsp中的表单操作修改为

构建项目并启动服务器

如果点击url
localhost:8080
,您应该会得到index.jsp,因为您将其设置为
welcomePage
。如果没有,请尝试
localhost:8080/index.jsp
。你现在应该拿到表格


如果您提交表单,
IndexServlet
将被调用

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

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

容器仅在未找到完全匹配的情况下调用jsp,在这种情况下,它将与jsp处理器将匹配的*.jsp匹配

你有两个选择:

  • 使servlet的映射不是index.jsp

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


  • 抱歉,Sysout只是调试代码。执行该代码时,只需将“某物”打印到我的页面上,它不会显示web表单和jspdid的其余部分。您可以通过此url获得
    index.jsp
    ,localhost:8080/index.jsp?是的,我曾经使用过urlI,但最终我执行了后者,它可以工作,我的问题是,在发送get请求时是否可以“拦截”调用,设置一些参数,然后转移到同名的.jsp页面,该页面将显示该参数。除非服务器提供了一些特殊的定制方式。基本上,服务器不能将同一个uri(/index.jsp)与入站请求的一个资源和转发请求的不同资源相匹配。好的,这是非常有用的信息,我会将您的答案标记为已接受,然后选择第二个选项。非常感谢你!