在这里我将第一个Spring MVC实例的结构完善得漂亮一点,这样工程看起来会更舒服,也更加方便维护。
View Resolver
我们看到在两个Controller类里,返回一个ModeAndView后者View时,参数里的View显得冗长:
InputUserController.java:
return new ModelAndView("/WEB-INF/jsp/UserForm.jsp");
SaveUserController.java:
return new ModelAndView("/WEB-INF/jsp/UserDetails.jsp", "user", user);
View部分唯一不同的就是视图名,如果能够将其他相同的部分省略或简要替代,那代码的颜值会不会上升呢?
颜值上升的方法
Spring MVC 中的视图解析器负责解析视图。可以通过在配置文件中定义一个ViewResolver来配置视图解析器。
springmvc-servlet.xml:
<beans xmlns="http://www.springframework.org/schema/beans"
......
...... >
<bean id="viewResolver"
class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/jsp/"></property>
<property name="suffix" value=".jsp"></property>
</bean>
......
......
</beans>
这样一来,view路径将缩短,仅需要提供视图名,而不必再设置视图路径为/WEB-INF/jsp/试图名.jsp,视图解析器将会自动增加前缀和后缀。
相应的Controller类代码也要修改,如下所示:
InputUserController.java:
// return new ModelAndView("/WEB-INF/jsp/UserForm.jsp");
return new ModelAndView("UserForm");
SaveUserController.java:
// return new ModelAndView("/WEB-INF/jsp/UserDetails.jsp", "user", user);
return new ModelAndView("UserDetails", "user", user);
config文件夹
代码是漂亮了一点,工程结构也得同步提升。
Spring MVC的配置文件springmvc-servlet.xml在默认文件(lib)下,如今需要更名为springmvc-config.xml,且移步到/WEB-INF/config/路径下:
在WEB-INF下新建config文件夹,如图所示:
如果这里就结束了,那么项目运行得报错了,找不到DispatcherServlet。
springmvc-config.xml是由web.xml中标签<init-param>加载的,当springmvc-config.xml处于默认文件时,<init-param>不需要额外(不用声明)定义,否则得显示地定义,如下所示:
web.xml
<servlet>
<servlet-name>springmvc</servlet-name>
<servlet-class>
org.springframework.web.servlet.DispatcherServlet
</servlet-class>
<!-- 为配置文件springmvc-config.xml声明相对路径 -->
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/config/springmvc-config.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
以上所有如果不做,对工程的正确运行也没有丝毫影响。