Jetty设置Servlet与JSP页面进行通信

时间:2015-12-04 14:50:09

标签: 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!有帮助吗?我无所适从......

2 个答案:

答案 0 :(得分:1)

您正在定义一个带有/index.jsp映射的servlet,以及一个具有相同名称的静态欢迎页面。

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

如果找不到完全匹配,容器只会调用jsp,在这种情况下,它将与* .jsp匹配,这是jsp处理器将匹配的内容。

您有两种选择:

  1. 使servlet的映射不是index.jsp。

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

答案 1 :(得分:0)

你必须使用

PrintWriter out = res.getWriter(); out.println("something")中的

sevlet可在jsp页面上打印一些内容。

简单教程here

将您的servlet映射网址格式index.jsp更改为test

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

将index.jsp中的表单操作修改为<form action="test">

构建项目并启动服务器。

如果您点击了网址localhost:8080,则应将index.jsp设置为welcomePage。如果没有,请尝试localhost:8080/index.jsp。你现在应该得到表格。

如果您提交表单,则会调用IndexServlet