2015-12-04 3 views
1

Я очень новичок в JSP и Jetty, и я действительно смущен, почему этот код не работает.Jetty Настройка сервлета для связи с JSP Страница

Это мой Основной класс

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); 
     } 

    } 

Это мой сервлет

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> 

и это мой веб .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 работает, когда у меня нет сервлета, я хочу, чтобы сервлет для установки переменного запроса, однако, когда активизирован сервлет, как в моих примерах кода он вообще не запускает никакой .jsp! Любая помощь? Я на потери в том, что делать ...

ответ

1

Вы определяете сервлет с отображением /index.jsp, а также имеете статическую страницу приветствия с тем же именем.

Когда контейнер получает запрос на /index.jsp, он ищет самое длинное точное совпадение, поэтому он совпадает с сервлетом и вызывается ваш doGet.

Контейнер будет вызывать только jsp, если точное совпадение не найдено, и в этом случае оно будет соответствовать * .jsp, что соответствует процессору jsp.

У вас есть два варианта:

  1. сделать отображение для сервлета нечто иное, чем index.jsp.

  2. Поместите jsp в подкаталог, например «приветствует», поэтому вы определяете файл приветствия как /welcome/index.jsp. Тогда любой запрос /index.jsp пойдет на сервлет, и запрос на «/» перейдет к index.jsp.Сервлет может перенаправить запрос в /welcomes/index.jsp, и jsp будет вызван.

+0

Я делаю последнее, и это работает, мой вопрос в том, можно ли «перехватить» вызов при отправке запроса GET, установить некоторые параметры, а затем переадресовать на страницу .jsp с тем же именем, которое будет отображаться этот параметр. – Display

+0

Если только сервер не предоставил какой-либо особый индивидуальный способ его выполнения. В основном сервер не может сопоставлять один и тот же uri (/index.jsp) с одним ресурсом для входящего запроса и другого ресурса для прямого запроса. – mmulholl

+0

Хорошо, это довольно информативно, я буду отмечать ваш ответ как принятый и выбрать второй вариант. Большое спасибо! – Display

0

Вы должны использовать

PrintWriter out = res.getWriter(); out.println("something") в вашем sevlet напечатать что-то на jsp странице.

Простой учебник here.

Изменить ваш сервлет отображение URL шаблон формы 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 будет называться

+0

Извините, Sysout был всего лишь отладочным кодом. Выполняя этот код, просто распечатывает «что-то» на моей странице, он не показывает веб-форму, а остальная часть jsp – Display

+0

вы получили 'index.jsp' с этим url' localhost: 8080/index.jsp' ? –

+0

Да, я использовал этот url – Display

Смежные вопросы