1. 在Web-INF下,创建web.xml. 加入如下两段代码:
(1) load-on-startup 参数用来表示是否需要容器在应用初始化时候就启动这个servlet. 当值>=0的时候就会启动。当值<0的时候,该servlet被选中才会加载。当value值越小,加载顺序越靠前。
<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:spring-mvc.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>
2. 在src下,创建spring-mvc.xml文件。
(1) 需要加载beans
<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"
xmlns:util="http://www.springframework.org/schema/util"
xsi:schemaLocation="http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc-3.1.xsd
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/util
http://www.springframework.org/schema/util/spring-util-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.1.xsd">
3. 在spring-mvc中,增加一些常用的配置项
(1) 让哪些包可以识别spring的标注. 可以指定具体包名。spring的标注比如有Control/Services.
<context:component-scan base-package="*"></context:component-scan>
(2) 视图解释器, spring-mvc在处理视图做页面跳转时候分为 逻辑视图、物理视图。物理视图真实存在于系统中的文件(JSP/HTML5).class类名是当前项目内部资源。里面会有两个属性,property表示当你把逻辑视图转为物理视图时候,需要在逻辑视图前面加一个前缀,后面加一个后缀。当逻辑视图为hello的时候,会解析成/hello.jsp。能够转发。
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/"></property>
<property name="suffix" value=".jsp"></property>
</bean>
4. 在src下选择某个包,创建一个class类。例如HelloWorldHandler. 刚创建的时候该类是一个普通的java类,是@Controller来标注。
@Controller
public class HelloWorldHandler {
}
5. 在该类下,定义方法如下,其中return返回值是逻辑视图,配置视图解释器,包装成/success.jsp.
public String hello(){
System.out.println("hello world !");
return "success";
}
6. 前端如何去call Handler类?在方法上使用标签,注明访问地址。RequestMapping除了可以修饰方法,还可以修饰类。用在类属性上等于用来寻找对应的类
@Controller
@RequestMapping("/springmvc")
public class HelloWorldHandler {
@RequestMapping(value="/hello")
public String hello(){
System.out.println("hello world !");
return "success";
}
}
(1) 如果想更精确的映射请求,可以增加method.如下,如果前端请求为get,那不支持。
@RequestMapping(value="/hello",method=RequestMethod.POST)
(2) 还可以增加params。表示请求中必须包含name属性,如果不包含那直接抛出异常。params可以使用数组。同时还有!params,表示需要不包含某些属性。
@RequestMapping(value="/hello",method=RequestMethod.GET,params={"name"})
(3) params还可以更加灵活,指定具体的value值。
@RequestMapping(value="/hello",method=RequestMethod.GET,params={"name=Tom","age"}
(4)还可以增加header参数。指明请求报头,如果不是该报头,无法进入该方法。
@RequestMapping(value="/hello",method=RequestMethod.GET,params={"name=Tom","age"},headers=["accept=text/html"])
(5) 还可以支持ANT风格。 使用*任意一个占位符,**表示0个或者多个占位符,?表示单一字符。
(6) 关于传参,简单做法,在path里使用{}来获取参数,形参中用@PathVariable来得到参数。
@RequestMapping(value="/hello/{id}",method=RequestMethod.GET,params={"name=Tom","age"})
public String hello(@PathVariable int id){
System.out.println("hello world !"+id);
return "success";
}