网页未找到。 Spring MVC + 码头
Posted
技术标签:
【中文标题】网页未找到。 Spring MVC + 码头【英文标题】:Page not found. Spring MVC + Jetty 【发布时间】:2014-07-03 09:09:08 【问题描述】:我正在尝试使用包含 jsp 和 @Controller 的 Spring MVC 启动 Jetty。启动码头后,如果我尝试调用任何页面,我每次都会收到警告。例如
ttp://localhost:8080/getMessageStats/
在名称为 'org.springframework.web.servlet.DispatcherServlet-57ad85ed' 的 DispatcherServlet 中未找到带有 URI [/resources/css/bootstrap.min.css] 的 HTTP 请求的映射 未找到带有 URI 的 HTTP 请求的映射 [/ resources/js/bootstrap.min.js] 在 DispatcherServlet 中,名称为 'org.springframework.web.servlet.DispatcherServlet-57ad85ed'
web.xml
<web-app 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">
<display-name>Spring MVC Application</display-name>
<servlet>
<servlet-name>mvc-dispatcher</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/mvc-dispatcher-servlet.xml</param-value>
</context-param>
<servlet-mapping>
<servlet-name>mvc-dispatcher</servlet-name>
<url-pattern>/cloud/*</url-pattern>
</servlet-mapping>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
mvc-dispatcher-servlet.xml
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc.xsd">
<context:component-scan base-package="net.cloud.web.statistics"/>
<bean id="viewResolver"
class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="viewClass" value="org.springframework.web.servlet.view.JstlView" />
<property name="prefix" value="/WEB-INF/pages/"/>
<property name="suffix" value=".jsp"/>
</bean>
<mvc:resources mapping="/resources/**" location="/resources/" />
<mvc:annotation-driven />
WebServer.class
public class WebServer
private static final Logger log = LoggerFactory.getLogger(WebServer.class);
private static final String CONTEXT_PATH = "/";
private Server httpServer;
@Value("$http_statistics_port")
private Integer port;
@Value("$start_page_path")
private String startPagePath;
public void init()
try
httpServer = new Server(port);
httpServer.setHandler(getServletContextHandler());
httpServer.setStopAtShutdown(true);
httpServer.start();
log.info("WebServer start ...");
httpServer.join();
catch (Exception ex)
log.error("Exception in http server. Exception: ", ex.getMessage());
private static ServletContextHandler getServletContextHandler() throws IOException
WebAppContext contextHandler = new WebAppContext();
contextHandler.setErrorHandler(null);
contextHandler.setContextPath(CONTEXT_PATH);
WebApplicationContext context = getContext();
contextHandler.addServlet(new ServletHolder(new DispatcherServlet(context)), CONTEXT_PATH);
contextHandler.addEventListener(new ContextLoaderListener(context));
contextHandler.setResourceBase(new ClassPathResource("webapp").getURI().toString());
contextHandler.setDescriptor("/webapp/WEB-INF/web.xml");
return contextHandler;
private static WebApplicationContext getContext()
AnnotationConfigWebApplicationContext context = new AnnotationConfigWebApplicationContext();
context.setConfigLocation("webapp/WEB-INF/");
log.info("CONTEXT name locations ", context.getDisplayName(), context.getConfigLocations());
return context;
GetMessagesStatsController.class
@Controller
@RequestMapping("/getMessageStats")
public class GetMessageStatsController
@RequestMapping(value = "/", method = RequestMethod.GET)
public String printWelcome(ModelMap model)
GetMessageStatsRPC rpc = new GetMessageStatsRPC();
model.addAttribute("result", rpc.getResult());
return "getMessageStats";
@RequestMapping(value = "/json", method = RequestMethod.GET)
public @ResponseBody
String generateJsonResponse()
GetMessageStatsRPC rpc = new GetMessageStatsRPC();
return rpc.getResult().toString();
项目树(抱歉,上传图片没有评级)。类:
src/java/main/net/.../WebServer.class;src/java/main/net/.../GetMessagesStatsController.class src/main/webapp/WEB-INF/web.xml; src/main/webapp/WEB-INF/mvc-dispatcher-servlet.xml; src/main/webapp/WEB-INF/pages/*.jsp; src/main/webapp/resources/css 和 src/main/webapp/resources/js
伙计们,有什么想法吗?
【问题讨论】:
尝试像这样访问localhost:8080/ProjectName/pageName.jsp 【参考方案1】:首先在部署应用程序时,它会检查 web.xml 并获取
<url-pattern>/*</url-pattern>
然后它初始化 DispatcherServlet 并使用初始化参数初始化
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/mvc-dispatcher-servlet.xml</param-value>
</context-param>
(WEB-INF 必须以 / 开头)
然后在mvc-dispatcher-servlet.xml
中,视图解析器解析渲染页面。
更改<property name="prefix" value="WEB-INF/pages/"/>
到
<property name="prefix" value="/WEB-INF/pages/"/>
终于在你的控制器里@RequestMapping("/getMessageStats")
所以最终启动应用程序
http://localhost:8080/ProjectName/getMessageStats/
调用 GetMessagesStatsController 的 printWelcome() 和
http://localhost:8080/ProjectName/getMessageStats/json
调用 generateJsonResponse()
【讨论】:
我们在哪里设置 xml 或其他我们需要在 url 中写入看起来 viewResolver 有问题。将前缀改为/WEB-INF/pages/,如下:
<bean id="viewResolver" class="org.springframework.web.servlet.view.UrlBasedViewResolver">
<property name="viewClass" value="org.springframework.web.servlet.view.JstlView" />
<property name="prefix" value="/WEB-INF/pages/"/>
<property name="suffix" value=".jsp"/>
</bean>
没有斜杠表示相对路径,所以它会在 relativePath(getMessageStats/) + prefix(WEB-INF/pages/) + request(getMessageStats) +suffix(.jsp) 处找到页面。
【讨论】:
我已经改变了,同样的事情:在 DispatcherServlet 中找不到带有 URI [/WEB-INF/pages/getMessageStats.jsp] 的 HTTP 请求的映射,名称为 'mvc-dispatcher' 。真正的路径是 webapp/WEB-INF/pages/*.jsp。如果我设置webapp
)。
我由 MAVEN 运行它,在我的项目中就像另一个服务一样,所以我不创建 WAR 文件。有趣的事情。如果我设置 以上是关于网页未找到。 Spring MVC + 码头的主要内容,如果未能解决你的问题,请参考以下文章
Spring MVC + Eclipse:HTTP 404 – 未找到
获取此 org.springframework.web.servlet.DispatcherServlet noHandlerFound 错误和警告:在 Spring MVC 中未找到 HTTP 请求