有两种配置springmvc的方式。首先新建一个Maven项目:
建好之后,打开pom.xml添加spring等需要的依赖包。
建好项目,打开webapp/WEB-INF/web.xml,添加内容。
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd" > <web-app> <display-name>Archetype Created Web Application</display-name> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> <context-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:applicationContext.xml</param-value> </context-param> <servlet> <servlet-name>springDispatcherServlet</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:springmvc.xml</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>springDispatcherServlet</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping> </web-app>稍作解释: (1)
<listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> <context-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:applicationContext.xml</param-value> </context-param>这是建立了spring的上下文监听器,它的作用之一是初始化bean,装配应用的上下文。
(2)
<servlet> <servlet-name>springDispatcherServlet</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:springmvc.xml</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet>定义了一个servlet,这个DispatcherServlet是关键。任何请求的第一步是经过spring的DispatcherServlet,注意是任何请求,一言蔽之,DispatcherServlet就是用来分发请求的意思了。DispatcherServlet的作用是将请求发送给Spring MVC控制器(controller),我在上一篇博客有FirstSpringMvc这个controller的源代码:
@Controller public class FirstSpringMvc { @Autowired UserService userService; @RequestMapping(value = "req1" , method = RequestMethod.GET) public String req1() { LinkedList<User> userList = (LinkedList<User>)userService.queryUsers(); for(User user: userList) { System.out.println(user.getName() + "\t身高:" + user.getHeight() + "cm\t体重:" + user.getWeight() + "kg\t国籍/所在地:" + user.getAddress()); } return "success"; } //……… }DispatcherServlet怎么知道发送给哪一个控制器呢?所以会遍历的查系统中的处理映射器(handler mapping),来确定到底这个请求是“/req1“还是“/req2”还是其他。处理映射器(handler mapping)是根据请求的URL来确定的,这个好理解。一旦找到了合适的控制器,DispatcherServlet会将请求发送给选中的cotroller,然后处理此次请求的参数,转入处理方法执行。执行完毕之后,返回了view 和 model这是controller做的最后一件事了,接下来会将请求连同模型和视图名称再转给DispatcherServlet,DispatcherServlet调用视图的解析器(view resolver),来找到那个相匹配的视图渲染输出到页面(html、jsp等)。
如果没找到合适的控制器,浏览器会返回华丽的404!我会找个时间讨论如何处理404问题。
这里:
<context:component-scan base-package="io.demo"></context:component-scan>是说要扫描io.demo包中的所有注解,那些@Bean、@Controller之类
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix" value="/WEB-INF/views/"></property> <property name="suffix" value=".jsp"></property> </bean>这定义了视图解析器InternalResourceViewResolver,里面的prefix、suffix分别是前缀和后缀。
这里是定义beans的,定义好了交给spring的应用上下文。
建好项目,
自己起个好些的项目名。 在pom.xml中引入jar包,有三个java文件是关键:
下面说这个。
它是spring容器的配置类。 注意io.com.demo.noxml.web.controller是要扫描controller注解的地方。@Configuration表示它本身是个配置类。@EnableWebMvc则注明了允许使用springmvc。里面的代码: @Bean public ViewResolver viewResolver(){………} 定义了视图解析器前后缀。下面的addResourceHandlers是定义了静态资源,我这边测试用的。这里是和springmvc.xml等效的。
这个是spring容器的配置类。
这是来初始化的。这里需要Servlet 3.0的支持呦。
不多做解释了,是跟上面的xml配置方式相对应的。把<bean id=”” ……>变成了@Bean的意思,哪个好哪个坏呢?我也不知道。看个人喜好吧。
