环境搭建
1、导入jar包
spring-aop.jar
spring-bean.jar
spring-context.jar
spring-core.jar
spring-web.jar
spring-webmvc.jar
commons-logging.jar
报错NoClassDefFoundError:缺少jar
2、springmvc配置文件 springmvc.xml
选中常用的命名空间:beans aop context mvc
普通的servlet流程:请求-url-pattern -交给对应的servlet去处理
先通过以下配置,拦截所有请求,交给SpringMVC处理:
index.jsp -> Controller(@RequsetMapping(“a”)) ->succes.jsp
web.xml
<servlet>
<servlet-name>springDispatcherServlet</servlet-name>
<!-- 配置springmvc自带的servlet -->
<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>
<!-- tomcat启动时以第一身份自启动 -->
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>springDispatcherServlet</servlet-name>
<!-- 拦截所有请求到springmvc自带的servlet -->
<url-pattern>/</url-pattern>
</servlet-mapping>
指定springmvc配置文件的路径,如果要省略,必须放到默认路径:
/WEB-INF/(servlet-name)-servlet.xml
springmvc.xml
<!--此配置是SpringMVC的基础配置,很功能都需要通过该注解来协调 -->
<mvc:annotation-driven></mvc:annotation-driven>
<!-- 扫描 有注解的包 -->
<context:component-scan base-package="org.lanqiao.handler"></context:component-scan>
<!--配置视图解析器(InternalResourceViewResolver) -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/views/"></property>
<property name="suffix" value=".jsp"></property>
</bean>
<!-- 要用SpringMVC实现:index.jsp -> succes.jsp -->
<mvc:view-controller path="a" view-name="success" />
以上注解 ,会让所有的请求 转入mvc:..中匹配映射地址,而会忽略调@RequsetMapping();
如果想让 @RequsetMapping(“a”) 和mvc:..共存,则需要加入一个注解:mvc:annotation-driven</mvc:annotation-driven>
SpringMVCHandler.java
@Controller
@RequestMapping(value="handler") //映射
public class SpringMVCHandler {
//设定拦截的方式和内容,拦截welcome url,name为zs,age不为23或没有,没有height
@RequestMapping(value="welcome",method=RequestMethod.POST,params= {"name=zs","age!=23","!height"})
public String welcome() {
return "success" ;// views/success.jsp,默认使用了 请求转发的 跳转方式
}
//headers为请求头信息
@RequestMapping(value="welcome2",headers= {"Accept=text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8","Accept-Encoding=gzip, deflate"})
public String welcome2() {
return "success" ;// views/success.jsp,默认使用了 请求转发的 跳转方式
}
//ant风格的请求路径 ?单字符 *任意个字符)xyz... **任意目录xyz/abcz/...
@RequestMapping(value="welcome3/**/test")
public String welcome3() {
return "success" ;// views/success.jsp,默认使用了 请求转发的 跳转方式
}
@RequestMapping(value="welcome4/a?c/test")
public String welcome4() {
return "success" ;// views/success.jsp,默认使用了 请求转发的 跳转方式
}
//获取头信息
@RequestMapping(value="testRequestHeader")
public String testRequestHeader(@RequestHeader("Accept-Language") String al) {
System.out.println( al);
return "success" ;// views/success.jsp,默认使用了 请求转发的 跳转方式
}
//获取cookie信息
@RequestMapping(value="testCookieValue")
public String testCookieValue(@CookieValue("JSESSIONID") String jsessionId) {
System.out.println( jsessionId);
return "success" ;// views/success.jsp,默认使用了 请求转发的 跳转方式
}
//servelet原生态方法直接用
@RequestMapping(value="testServletAPI")
public String testServletAPI(HttpServletRequest request,HttpServletResponse response) {
request.getParameter("uname") ;
System.out.println(request);
return "success" ;
}
}
@RequestParam(“uname”):接受前台传递的值,等价于request.getParameter(“uname”);
required=false:该属性 不是必须的。
defaultValue=“23”:默认值23
index.jsp
<a href="handler/welcome3/xyz/abcz/asb/test">33333333get - welcome</a>
<br/>
<a href="handler/welcome4/abc/test">4444444get - welcome</a>
<br/>
<a href="handler/welcome5/zs">555welcome</a>
<form action="handler/testObjectProperties" method="post">
id:<input name="id" type="text" />
name:<input name="name" type="text" />
家庭地址:<input name="address.homeAddress" type="text" />
学校地址:<input name="address.schoolAddress" type="text" />
<input type="submit" value="查">
</form>