我尝试使用包含jsp和@Controller的Spring MVC启动Jetty。在开始码头后,如果我试图拨打任何页面,我每次都会获得WARN。例如
TTP://本地主机:8080 / getMessageStats /
在DispatcherServlet中找不到带有URI [/resources/css/bootstrap.min.css]的HTTP请求的映射,其名称为' org.springframework.web.servlet.DispatcherServlet-57ad85ed'在DispatcherServlet中找不到带有URI [/resources/js/bootstrap.min.js]的HTTP请求的映射,其名称为' 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-调度-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 /爪哇/主/净/.../ WebServer.class; SRC / JAVA /主/净/.../ GetMessagesStatsController.class 的src /主/ web应用/ WEB-INF / web.xml中;的src /主/ web应用/ WEB-INF / MVC-调度-servlet.xml中; SRC /主/ web应用/ WEB-INF /页/ * JSP。 src / main / webapp / resources / css和src / main / webapp / resources / js
伙计们,任何想法?
答案 0 :(得分:2)
首先,在部署应用程序时,它会检查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()
答案 1 :(得分:1)
看起来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 /)+前缀(WEB-INF / pages /)+ request(getMessageStats)+后缀(.jsp)中找到该页面。