No WebApplicationContext found
来源:互联网 发布:淘宝保税区发货靠谱吗 编辑:程序博客网 时间:2024/06/07 00:59
No WebApplicationContext found: not in a DispatcherServlet request and no ContextLoaderListener registered?
在使maven构建SpringMVC 国际化(i18n) 项目中中出现页面显示异常,尝试查找了所有答案。一度怀疑是tomcat出了问题,但是经过测试得出tomcat是正常的,以下是项目的配置和运行异常。
jsp页面报错信息
Eclipse 的控制台报出的错误:
十二月 14, 2017 1:52:40 下午 org.springframework.web.servlet.tags.MessageTag doStartTag严重: No WebApplicationContext found: not in a DispatcherServlet request and no ContextLoaderListener registered?java.lang.IllegalStateException: No WebApplicationContext found: not in a DispatcherServlet request and no ContextLoaderListener registered? at org.springframework.web.servlet.support.RequestContext.initContext(RequestContext.java:235) at org.springframework.web.servlet.support.JspAwareRequestContext.initContext(JspAwareRequestContext.java:75) at org.springframework.web.servlet.support.JspAwareRequestContext.<init>(JspAwareRequestContext.java:49) at org.springframework.web.servlet.tags.RequestContextAwareTag.doStartTag(RequestContextAwareTag.java:77) at org.apache.jsp.welcome_jsp._jspx_meth_spring_005fmessage_005f0(welcome_jsp.java:167) at org.apache.jsp.welcome_jsp._jspService(welcome_jsp.java:129) at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70) at javax.servlet.http.HttpServlet.service(HttpServlet.java:729) at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:438) at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:396) at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:340) at javax.servlet.http.HttpServlet.service(HttpServlet.java:729) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:292) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207) at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:212) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:106) at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:141) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79) at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:616) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:528) at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1100) at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:687) at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1520) at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1476) at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) at java.lang.Thread.run(Unknown Source)十二月 14, 2017 1:52:40 下午 org.apache.catalina.core.StandardWrapperValve invoke严重: Servlet.service() for servlet [jsp] in context with path [/Springi18n] threw exception [java.lang.IllegalStateException: No WebApplicationContext found: not in a DispatcherServlet request and no ContextLoaderListener registered?] with root causejava.lang.IllegalStateException: No WebApplicationContext found: not in a DispatcherServlet request and no ContextLoaderListener registered? at org.springframework.web.servlet.support.RequestContext.initContext(RequestContext.java:235) at org.springframework.web.servlet.support.JspAwareRequestContext.initContext(JspAwareRequestContext.java:75) at org.springframework.web.servlet.support.JspAwareRequestContext.<init>(JspAwareRequestContext.java:49) at org.springframework.web.servlet.tags.RequestContextAwareTag.doStartTag(RequestContextAwareTag.java:77) at org.apache.jsp.welcome_jsp._jspx_meth_spring_005fmessage_005f0(welcome_jsp.java:167) at org.apache.jsp.welcome_jsp._jspService(welcome_jsp.java:129) at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70) at javax.servlet.http.HttpServlet.service(HttpServlet.java:729) at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:438) at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:396) at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:340) at javax.servlet.http.HttpServlet.service(HttpServlet.java:729) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:292) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207) at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:212) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:106) at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:141) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79) at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:616) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:528) at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1100) at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:687) at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1520) at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1476) at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) at java.lang.Thread.run(Unknown Source)
项目构建样式
1.web.xml的相关配置
web.xml
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1"> <display-name>Springi18n</display-name> <welcome-file-list> <welcome-file>login.jsp</welcome-file><!-- web.xml加载的时候初始化到welcom.jsp页面 --> </welcome-file-list> <servlet-mapping> <servlet-name>springmvc</servlet-name><!-- springMVC 映射服务名称 --> <url-pattern>/springmvc/*</url-pattern><!-- 映射路径,协议+主机+端口+项目名+其他(具体使用的方法),http://localhost:8080/Springi18n/ --> </servlet-mapping> <servlet> <servlet-name>springmvc</servlet-name><!-- springMVC 服务名称 ,注意这里的 <servlet-mapping/>和<servlet/>的<servlet-name/> 的值需要一样 --> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class><!-- 使用使用spring框架的 DispatcherServlet调度服务类 --> <init-param> <param-name>contextConfigLocation</param-name><!-- context配置位置 --> <param-value>classpath:applicationContext.xml</param-value><!-- 加载类路径下的 XML文件 --> </init-param> <load-on-startup>1</load-on-startup> <!-- web服务加载的优先级 ,正整数数值小的优先级高 --> </servlet> </web-app>
这里是web.xml配置,当web.xml加载的时候初始化页面是
2.pox.xml文件的相关配置
pox.xml
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>online.shixun.springi18n</groupId> <artifactId>Springi18n</artifactId> <packaging>war</packaging> <version>0.0.1-SNAPSHOT</version> <name>Springi18n Maven Webapp</name> <url>http://maven.apache.org</url> <properties> <spring-framework.version>4.3.10.RELEASE</spring-framework.version> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> </properties> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>3.8.1</version> <scope>test</scope> </dependency> <!-- spring-core --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> <version>${spring-framework.version}</version> </dependency> <!-- spring-context --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>${spring-framework.version}</version> </dependency> <!-- spring-mvc --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>${spring-framework.version}</version> </dependency> <dependency> <groupId>javax.servlet</groupId> <artifactId>jstl</artifactId> <version>1.2</version> </dependency> <!-- https://mvnrepository.com/artifact/javax.servlet/servlet-api --> <dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <version>3.1.0</version> </dependency> <dependency> <groupId>javax.servlet.jsp</groupId> <artifactId>javax.servlet.jsp-api</artifactId> <version>2.3.0</version> </dependency> <dependency> <groupId>javax.el</groupId> <artifactId>javax.el-api</artifactId> <version>3.0.0</version> </dependency> <dependency> <groupId>commons-logging</groupId> <artifactId>commons-logging</artifactId> <version>1.2</version> </dependency> <!-- https://mvnrepository.com/artifact/org.apache.logging.log4j/log4j-core --> <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-core</artifactId> <version>2.8.2</version> </dependency> <!-- https://mvnrepository.com/artifact/org.slf4j/slf4j-api --> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version>1.7.21</version> </dependency> <!-- https://mvnrepository.com/artifact/org.slf4j/slf4j-log4j12 --> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> <version>1.7.25</version> <scope>test</scope> </dependency> </dependencies> <build> <finalName>Springi18n</finalName> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-war-plugin</artifactId> <configuration> <failOnMissingWebXml>false</failOnMissingWebXml> </configuration> </plugin> </plugins> </build></project>
3.springMVC 的applicationContext.xml文件的配置
applicationContext.xml
<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans" xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:context="http://www.springframework.org/schema/context" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd "> <!-- 扫描包 --> <context:component-scan base-package="online.shixun.springi18n.controllers"></context:component-scan> <!-- 启动注解标签,控制 --> <mvc:annotation-driven /> <!-- 试图解析器 --> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="suffix" value=".jsp" /> <property name="prefix" value="/" /> </bean> <!-- messageSource bean 配置系统message的资源 --> <bean id="messageSource" class="org.springframework.context.support.ReloadableResourceBundleMessageSource"> <!-- 国际化信息所在的文件名,加载messages 目录下,所有以message开头的priperties 资源文件 --> <property name="basename" value="classpath:messages" /> <!-- 默认编码字符集 --> <property name="defaultEncoding" value="UTF-8" /> <!-- 如果国际化资源文件中找不到对应代码的信息,则使用默认资源文件,即:message.properties --> <property name="useCodeAsDefaultMessage" value="true" /> </bean> <!-- 用于提取请求包含的区域语言的拦截器 --> <mvc:interceptors> <bean class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor"> <property name="paramName" value="lang"></property> </bean> </mvc:interceptors></beans>
4.两个国际化资资源文件的配置(“zh”是 中文,”en” 是 英文)
messages_en_US.properties
app=shixun.onlineusername= user namepassword=passwordlogin=loginwelcome=welcome
messages_zh_CN.properties
app=\u8F7B\u5B9E\u8BADusername=\u7528\u6237\u540Dpassword=\u5BC6\u7801login=\u767B\u5F55welcome=\u6B22\u8FCE
注意:“乱码”是经过Unicode编码的,例如“\u6B22\u8FCE”的中文是“欢迎”
5.springMVC控制跳转配置
LoginController.java
package online.shixun.springi18n.controllers;import java.util.Locale;import org.springframework.stereotype.Controller;import org.springframework.ui.Model;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RequestMethod;import org.springframework.web.bind.annotation.RequestParam;import org.springframework.web.servlet.ModelAndView;@Controllerpublic class LoginController { /** * 判断springMVC是否连接成功 * @return */ @RequestMapping(value = "login", method = RequestMethod.GET) public ModelAndView login() { System.out.println("222355"); return new ModelAndView("welcome"); }}
6. login.jsp和welcome.jsp页面的主要body配置
welcome.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%><%@taglib prefix="spring" uri="http://www.springframework.org/tags" %><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>欢迎</title></head><body> <spring:message code="welcome"/>:${username }</body></html>
login.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%><%@taglib prefix="spring" uri="http://www.springframework.org/tags" %><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>登陆</title></head><body> <div style="text-align: center;"> <h2> <spring:message code="app" /> </h2> <form action="${pageContext.request.contextPath }/springmvc/welcome" method="post"> <input name="username" style="width: 200px;" type="text" placeholder='<spring:message code="username"/>'> <br> <br> <input style="width: 200px;" type="text" placeholder='<spring:message code="password"/>'> <br> <br> <input style="width: 80px;" type="submit" value='<spring:message code="login"/>'> </form> <br> <a href="${pageContext.request.contextPath }/springmvc/loginPage?lang=zh_CN">中文</a>/<a href="${pageContext.request.contextPath }/springmvc/loginPage?lang=en_US">Englist</a> </div></body></html>
错误分析:
翻译:没有发现WebApplicationContext:不是在DispatcherServlet请求中,也不存在已注册的ContextLoaderListener ? (是有道翻译)
web容器在加载web.xml的时候,初始化页面是web.xml配置中的login.jsp页面,login需要引用国际化(i18n)的文件并没有被WebApplicationContext加载。
解决思路:通过SpringmMVC 的 Controller视图跳转,来加载WebApplicationContext。然而该Context存在了,会自动加载国际化文件。
总结:初始化页面是,引用了未创建WebApplicationContext中的国际化文件,是不合法的,必须先创建好了Contxt容器了,才可以引用容器的资源。
- 笔者是编程小白,初次写博客还存在许多不足之处,希望能够得到批评和指正。
调试成功后的运行结果:
- 中文国际化
- 英文国际化
- No WebApplicationContext found
- No WebApplicationContext found: no ContextLoaderListener registered?
- No WebApplicationContext found: no ContextLoaderListener registered异常
- No WebApplicationContext found: no ContextLoaderListener registered?
- No WebApplicationContext found: no ContextLoaderListener registered?
- No WebApplicationContext found: no ContextLoaderListener registered
- No WebApplicationContext found: no ContextLoaderListener registered?
- No WebApplicationContext found: no ContextLoaderListener registered?
- No WebApplicationContext found: no ContextLoaderListener registered错误
- Error creating bean ...No WebApplicationContext found
- Spring 出现No WebApplicationContext found解决方法
- No WebApplicationContext found: no ContextLoaderListener registered的解决方法
- No WebApplicationContext found: no ContextLoaderListener registered的解决方法
- java.lang.IllegalStateException: No WebApplicationContext found: no ContextLoaderListener registered?
- No WebApplicationContext found: no ContextLoaderListener registered的解决方法
- No WebApplicationContext found: no ContextLoaderListener registered 错误解决
- java.lang.IllegalStateException: No WebApplicationContext found: no ContextLoaderListener registered
- 异常备忘:No WebApplicationContext found: no ContextLoaderListener registered
- visual assist trial
- 动态语言和静态语言的比较
- 构造d3关系图前后台实现
- 搭建本地服务器激活IDEA、Jrebel(热部署插件)
- CreateProcess主进程与子进程管道通信的封装
- No WebApplicationContext found
- 为上传到服务器的图片添加水印
- VRP基本操作
- Spring Framework 5.0:注解的方式加载Bean之包扫描、@Autowired
- Android学习笔记之图形图像处理技术
- 1033. 旧键盘打字(20)
- 谷歌AI助NASA发现第二个"太阳系";传快手完成新一轮融资;摩拜起诉小广告公司丨价值早报
- Anaconda 安装OpenCV
- 创投日报:12月14日收录投融资项目24起