2013-10-09 4 views
1

EDIT: Я смог исправить проблему, переименовав index.jsp в hi.jsp. У кого-нибудь есть идея, почему у меня проблема с именем файла?NullPointerException пытается получить index.jsp настроено

ПРОБЛЕМА: Я написал бэкэнд компонент веб-приложение с помощью Java/Spring и подключили его к Tomcat через пружинные аннотаций:

@Controller 
public class WorkerSubmitterController { 
    @RequestMapping(value = {"/start"}, method = RequestMethod.GET, produces = "text/plain") 
    @ResponseBody 
    public ResponseEntity<String> start() throws Exception { 
     return new ResponseEntity<String>("Started", HttpStatus.OK); 
    } 
} 

Я настройке сервлеты, как это:

public class WebInitializer implements WebApplicationInitializer { 
    @Override 
    public void onStartup(ServletContext container) { 
     // Create the dispatcher servlet's Spring application context 
     AnnotationConfigWebApplicationContext dispatcherContext = new AnnotationConfigWebApplicationContext(); 
     dispatcherContext.scan("com.myProject.someName"); 

     // Manage the lifecycle of the root application context 
     container.addListener(new ContextLoaderListener(dispatcherContext)); 

     // Register and map the dispatcher servlet 
     ServletRegistration.Dynamic dispatcher = 
     container.addServlet("dispatcher", new DispatcherServlet(dispatcherContext)); 

     dispatcher.setLoadOnStartup(1); 
     Set<String> mappingConflicts = dispatcher.addMapping("/"); 
    } 

} 

Это прекрасно работает, когда я иду в localhost:8080/start

Однако, сейчас я стараюсь чтобы написать интерфейс, получив index.jsp. Я создал index.jsp файл под /webapp/WEB-INF/ со следующим:

<html> 
<head> 
    <title>Hello world</title> 
</head> 
<body> 

Я добавил web.xml файл:

<web-app id="WebApp_ID" version="2.4" 
     xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee 
    http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"> 

    <servlet> 
     <servlet-name>home</servlet-name> 
     <jsp-file>/index.jsp</jsp-file> 
    </servlet> 
    <servlet-mapping> 
     <servlet-name>home</servlet-name> 
     <url-pattern>/home</url-pattern> 
    </servlet-mapping> 

</web-app> 

Когда я посещаю localhost:8080/home я получаю эту ошибку:

HTTP ERROR 404 

Problem accessing /home. Reason: 

    Not Found 
Powered by Jetty:// 

и на стороне сервера, показывает:

2013-10-08 20:27:31.652:WARN:oejs.ServletHandler:/home 
java.lang.NullPointerException 
    at java.net.URLEncoder.encode(URLEncoder.java:205) 
    at java.net.URLEncoder.encode(URLEncoder.java:171) 
    at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:474) 
    at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:378) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:848) 
    at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:669) 
    at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:457) 
    at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:137) 
    at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:557) 
    at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:231) 
    at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1075) 
    at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:384) 
    at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:193) 
    at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1009) 
    at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:135) 
    at org.eclipse.jetty.server.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:255) 
    at org.eclipse.jetty.server.handler.HandlerCollection.handle(HandlerCollection.java:154) 
    at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:116) 
    at org.eclipse.jetty.server.Server.handle(Server.java:368) 
    at org.eclipse.jetty.server.AbstractHttpConnection.handleRequest(AbstractHttpConnection.java:489) 
    at org.eclipse.jetty.server.AbstractHttpConnection.headerComplete(AbstractHttpConnection.java:942) 
    at org.eclipse.jetty.server.AbstractHttpConnection$RequestHandler.headerComplete(AbstractHttpConnection.java:1004) 
    at org.eclipse.jetty.http.HttpParser.parseNext(HttpParser.java:640) 
    at org.eclipse.jetty.http.HttpParser.parseAvailable(HttpParser.java:235) 
    at org.eclipse.jetty.server.AsyncHttpConnection.handle(AsyncHttpConnection.java:82) 
    at org.eclipse.jetty.io.nio.SelectChannelEndPoint.handle(SelectChannelEndPoint.java:628) 
    at org.eclipse.jetty.io.nio.SelectChannelEndPoint$1.run(SelectChannelEndPoint.java:52) 
    at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:608) 
    at org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:543) 
    at java.lang.Thread.run(Thread.java:724) 

Что я делаю неправильно? Я пропустил шаг, чтобы работать с страницами .jsp? Возможно, index.jsp? Я пробовал модифицировать index.jsp, чтобы просто быть hello и та же ошибка появляется. Кроме того, я пытался переместить файл index.jsp, чтобы найти источник проблемы, и ошибка исчезает, но затем я получаю

Oct 08, 2013 9:58:38 PM org.apache.jasper.servlet.JspServlet serviceJspFile 
SEVERE: PWC6117: File "%2FUsers%2FuserName%2Fpersonal%2Friver%2Fsrc%2Fmain%2Fwebapp%2FWEB-INF%2Findex.jsp" not found 

Так что я предполагаю, что проблема связана с моим файлом JSP.

+0

Это, кажется, предупреждение, а не ошибка. Вы не объявили кодировку файла? – Floris

+0

Я использовал <% @ page contentType = "text/html; charset = UTF-8" language = "java"%> в верхней части index.jsp, но он все равно дал мне ту же ошибку – Popcorn

+0

У меня также есть попробовал добавить Popcorn

ответ

2

Проблема в том, что вы пытаетесь получить доступ к JSP, который находится в каталоге WEB-INF, что, очевидно, недоступно. И вы пытаетесь получить к нему доступ из корня, поэтому вы получите ошибку HTTP ERROR 404

However, now I'm trying to write the frontend by getting index.jsp working. I created a index.jsp file under /webapp/WEB-INF/ with the following:...

Попробуйте переместить JSP вне папки WEB-INF в корень вашего приложения.

+0

Да, это было! Спасибо – Popcorn

+1

@Popcorn В качестве дополнительной информации. ** Также ** широко распространенная практика безопасности (если вам это необходимо, конечно) намеренно помещать файлы JSP внутри WEB-INF, чтобы предотвратить прямой доступ к клиентскому броузеру.В этом случае вы должны использовать некоторый сервлет, к которому сначала будет обращаться, когда запрос будет отправлен на указанный URL-адрес, и в этом сервлете вы используете [RequestDispatcher] (http://docs.oracle.com/javaee/7/api /javax/servlet/RequestDispatcher.html) для пересылки на желаемый JSP, например 'request.getRequestDispatcher ("/WEB-INF/jsp/index.jsp "). forward (request, response);' – informatik01

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