web.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_3_0.xsd" version="3.0" metadata-complete="true"> <display-name>lion web app</display-name> <context-param> <param-name>contextConfigLocation</param-name> <param-value> classpath:applicationContext-web.xml </param-value> </context-param> <!-- Bootsrtap the root application context as usual using ContextLoaderListener --> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> <filter> <filter-name>encodingFilter</filter-name> <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> <init-param> <param-name>encoding</param-name> <param-value>UTF-8</param-value> </init-param> <init-param> <param-name>forceEncoding</param-name> <param-value>true</param-value> </init-param> </filter> <filter-mapping> <filter-name>encodingFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <servlet> <servlet-name>dispatcher</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextClass</param-name> <param-value> org.springframework.web.context.support.AnnotationConfigWebApplicationContext </param-value> </init-param> <init-param> <param-name>contextConfigLocation</param-name> <param-value> com.nexusy.lion.web.config.WebConfig com.nexusy.lion.web.config.FreeMarkerConfig </param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>dispatcher</servlet-name> <url-pattern>/*</url-pattern> </servlet-mapping> <session-config> <session-timeout>30</session-timeout> </session-config> </web-app>
控制器
@Controller public class ExampleController { @RequestMapping("/index") public String welcome() { return "index"; } }
测试基类:
@WebAppConfiguration @ContextConfiguration(classes={WebConfig.class, FreeMarkerConfig.class}) public class WebAppTests { @Autowired protected WebApplicationContext wac; }
测试类:
@RunWith(SpringJUnit4ClassRunner.class) public class ExampleControllerTests extends WebAppTests { private MockMvc mockMvc; @Before public void setUp() throws Exception { this.mockMvc = MockMvcBuilders.webAppContextSetup(wac).build(); } @Test public void testIndex() throws Exception { this.mockMvc.perform(get("/index")).andExpect(status().isOk()); } }
爆异常:
javax.servlet.ServletException: Could not resolve view with name 'index' in servlet with name '' at org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1190) at org.springframework.test.web.servlet.TestDispatcherServlet.render(TestDispatcherServlet.java:112) at org.springframework.web.servlet.DispatcherServlet.processDispatchResult(DispatcherServlet.java:992) at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:939) at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:856) at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:936) at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:827) at javax.servlet.http.HttpServlet.service(HttpServlet.java:621) at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:812) at org.springframework.test.web.servlet.TestDispatcherServlet.service(TestDispatcherServlet.java:66) at javax.servlet.http.HttpServlet.service(HttpServlet.java:728) at org.springframework.mock.web.MockFilterChain$ServletFilterProxy.doFilter(MockFilterChain.java:168) at org.springframework.mock.web.MockFilterChain.doFilter(MockFilterChain.java:136) at org.springframework.test.web.servlet.MockMvc.perform(MockMvc.java:134) at com.nexusy.lion.web.controller.ExampleControllerTests.testIndex(ExampleControllerTests.java:32) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:47) at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12) at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:44) at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17) at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26) at org.springframework.test.context.junit4.statements.RunBeforeTestMethodCallbacks.evaluate(RunBeforeTestMethodCallbacks.java:74) at org.springframework.test.context.junit4.statements.RunAfterTestMethodCallbacks.evaluate(RunAfterTestMethodCallbacks.java:83) at org.springframework.test.context.junit4.statements.SpringRepeat.evaluate(SpringRepeat.java:72) at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:231) at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:88) at org.junit.runners.ParentRunner$3.run(ParentRunner.java:238) at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:63) at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:236) at org.junit.runners.ParentRunner.access$000(ParentRunner.java:53) at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:229) at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61) at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:71) at org.junit.runners.ParentRunner.run(ParentRunner.java:309) at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:174) at org.junit.runner.JUnitCore.run(JUnitCore.java:160) at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:77) at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:195) at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:63) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) at com.intellij.rt.execution.application.AppMain.main(AppMain.java:120)
如果视图改成jsp则可通过测试,Spring MVC Test Framework不支持freemarker吗?
相关推荐
4. **View**:视图负责数据的展示,Spring MVC支持多种视图技术,如JSP、Thymeleaf、FreeMarker等。 5. **ModelAndView**:这是Spring MVC提供的一个类,用于同时封装模型数据和视图名称,便于在控制器方法中返回。...
- spring-test 和 mockito 等库用于编写单元测试和集成测试,确保 Spring MVC 应用的功能正确性。 以上这些 jar 包组合在一起,构成了一个完整的 Spring MVC 开发环境,涵盖了从请求处理到视图渲染,再到数据持久...
1. **Spring Framework**: 这是Spring MVC的基础,包含了IoC(Inversion of Control,控制反转)容器、AOP(Aspect Oriented Programming,面向切面编程)支持、数据访问/集成、MVC框架等。Spring的核心库提供了一个...
非注解测试在Spring MVC中是指不依赖于Java注解如`@Test`,`@Controller`等进行的测试,而是通过XML配置文件来定义组件和它们之间的关系。这种方式虽然比注解方式繁琐,但有助于理解Spring MVC的工作原理。 首先,...
12. **视图技术**:Spring MVC 支持多种视图技术,比如 JSP、Freemarker、Thymeleaf 等。 #### 二、基本理论与概念 - **Spring MVC 的工作流程**: 1. 用户通过浏览器向服务器发送请求。 2. DispatcherServlet ...
其次,Spring MVC是Spring Framework的重要组成部分,用于构建Web应用程序。在5.0.11.RELEASE版本中,Spring MVC引入了更多现代Web开发特性,如支持WebSocket、RESTful API设计,以及对HTTP/2协议的支持,提升了Web...
- **视图技术**:Spring MVC可以与多种视图技术结合,如JSP、Thymeleaf、FreeMarker等,这需要额外的jar包支持。 - **测试**:对于单元测试和集成测试,Spring MVC提供`spring-test.jar`,配合Mockito、JUnit等工具...
标题"myMVC.rar_spring_springframework"暗示了我们正在处理一个与Spring相关的项目,可能是一个简单的MVC Java应用,其中使用了Spring Framework。描述进一步确认了这一点,表明这是一个关于Spring Framework的实例...
- **Web MVC增强**:增加了对RESTful风格的支持,增强了模板引擎的集成,如FreeMarker、Velocity等。 - **WebSocket支持**:引入WebSocket API,为实时通信提供了新的解决方案。 - **性能优化**:在内存使用和...
3.2.3.RELEASE版本中,Spring MVC引入了更多模板引擎的支持,如FreeMarker、Thymeleaf,同时增强了RESTful服务的支持。 4. **数据访问集成**:Spring提供了对各种数据库的集成,包括JDBC、ORM(如Hibernate、...
Spring框架自2003年由Rod Johnson创立以来,一直是企业级Java应用开发领域中不可或缺的一部分。它通过提供一种轻量级的控制反转(IoC)容器,解决了传统企业应用开发中的复杂性问题。具体来说,Spring通过以下几个方面...
实际上,Spring MVC 支持更复杂的应用场景,如拦截器、异常处理、数据绑定、国际化、模板引擎(如 Thymeleaf 或 FreeMarker)等。要深入理解 Spring MVC,建议学习以下主题: - AOP(面向切面编程)在 Spring MVC ...
同时,Spring MVC还提供了视图解析器,如JSP和FreeMarker,以及ModelAndView对象,用于在控制器和视图之间传递数据。 事务管理是企业级应用的核心部分,Spring 2.5.5提供了声明式和编程式的事务管理。声明式事务...
Spring MVC还支持多种视图技术,如JSP、FreeMarker等。 4. **数据访问**:Spring框架提供了一整套与数据访问相关的支持,包括JDBC抽象层、ORM(Object-Relational Mapping)集成,如Hibernate和MyBatis,以及对...
综上所述,"spring-framework-4.2.4.RELEASE"是一个包含Spring框架核心特性的开发包,它为Java开发者提供了全面的工具集,支持企业级应用的开发,包括但不限于IoC、AOP、数据访问、Web开发、事务管理、测试、安全...
Spring MVC 是Spring Framework中的Web模块,提供了一种模型-视图-控制器的架构模式,用于构建RESTful的Web应用程序。它支持多种视图技术,如JSP、Thymeleaf、FreeMarker等。 5. **数据访问** Spring Data访问...
9. **Spring Test**:提供了一套全面的测试支持,包括单元测试和集成测试,使得测试 Spring 应用变得更加容易。 10. **WebSocket支持**:Spring 4.x 引入了对 WebSocket 协议的支持,允许开发实时双向通信应用。 ...
- **URL 表达式**:Spring MVC 提供了灵活的 URL 表达式支持,例如 `/user/*/createUser` 可以匹配 `/user/aaa/createUser` 和 `/user/bbb/createUser` 等路径。 以上是关于 Spring MVC 的详细介绍,涵盖了其基础...
4.3.2版本中,MVC框架引入了更高效的DispatcherServlet,支持RESTful风格的URL映射,以及模板引擎(如Thymeleaf、FreeMarker)的集成,简化了视图层的开发。 5. **数据访问/集成**: Spring提供了对JDBC、ORM...