注解:
@Controller //表明该类是一个controller
@Scope("prototype") 设置为prototype是必要的singleton有线程安全问题
@RequestMapping
- @RequestMapping({"/xxx.do","xxxx.do"})
- @RequestMapping("/**/xxx.do") //表示xxx.do前面有多级/
- @RequestMapping("/forth*.do")
@RequestParam("pname") //加在形参前
1.简单的注解式SpringMVC工程
1.1.导包
- com.springsource.com.mchange.v2.c3p0-0.9.1.2.jar
- com.springsource.org.aopalliance-1.0.0.jar
- com.springsource.org.apache.commons.logging-1.1.1.jar
- com.springsource.org.apache.log4j-1.2.15.jar
- com.springsource.org.aspectj.weaver-1.6.8.RELEASE.jar
- junit-4.9.jar
- mysql-connector-java-5.1.30.jar
- spring-aop-4.1.6.RELEASE.jar
- spring-aspects-4.1.6.RELEASE.jar
- spring-beans-4.1.6.RELEASE.jar
- spring-context-4.1.6.RELEASE.jar
- spring-context-support-4.1.6.RELEASE.jar
- spring-core-4.1.6.RELEASE.jar
- spring-expression-4.1.6.RELEASE.jar
- spring-jdbc-4.1.6.RELEASE.jar
- spring-orm-4.1.6.RELEASE.jar
- spring-tx-4.1.6.RELEASE.jar
- spring-web-4.1.6.RELEASE.jar
- spring-webmvc-4.1.6.RELEASE.jar
1.2.配置web.xml - 配置DispatcherServlet
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
<display-name>01-SpringMVC</display-name>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>
<!-- 配置springMVC中央调度器 -->
<servlet>
<servlet-name>victor</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!-- 指定springmvc配置文件的路径及名称 -->
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:springmvc.xml</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>victor</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
</web-app>
1.3.新建xxx.handlers.MyController
package com.bjsxt.handlers;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;
//后端控制器
@Controller //表明该类是一个controller
@Scope("prototype")
public class MyController{
@RequestMapping({"/my.do","some.do"})
public ModelAndView first(HttpServletRequest request, HttpServletResponse response){
ModelAndView mv = new ModelAndView();
mv.addObject("message","Hello SpringMVC World!");
mv.setViewName("/WEB-INF/jsp/welcome.jsp");
return mv;
}
@RequestMapping("/second.do")
public ModelAndView second(HttpServletRequest request, HttpServletResponse response){
ModelAndView mv = new ModelAndView();
mv.addObject("message","Hello!");
mv.setViewName("/WEB-INF/jsp/welcome.jsp");
return mv;
}
}
1.4.在springmvc.xml中注册组件扫描器
需要注意的是springmvc.xml名称和路径需要与web.xml中配置的参数一致
<?xml version="1.0" encoding="UTF-8"?>
<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:tx="http://www.springframework.org/schema/tx"
xmlns:aop="http://www.springframework.org/schema/aop"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd">
<!-- 注册组件扫描器 -->
<context:component-scan base-package="com.bjsxt.handlers"/>
</beans>
2.@RequestMapping
2.1 加在类名前表示命名空间
2.2 加在方法名前表示地址映射
2.3 value值是一个字符串数组
例子:
package com.bjsxt.handlers;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;
//后端控制器
@Controller //表明该类是一个controller
@Scope("prototype")
@RequestMapping("/xxx/kkk") //命名空间
public class MyController{
@RequestMapping({"/my.do","some.do"})
public ModelAndView first(HttpServletRequest request, HttpServletResponse response){
ModelAndView mv = new ModelAndView();
mv.addObject("message","Hello SpringMVC World!");
mv.setViewName("/WEB-INF/jsp/welcome.jsp");
return mv;
}
@RequestMapping("/second.do")
public ModelAndView second(HttpServletRequest request, HttpServletResponse response){
ModelAndView mv = new ModelAndView();
mv.addObject("message","Hello!");
mv.setViewName("/WEB-INF/jsp/welcome.jsp");
return mv;
}
// /**表示有多级/
@RequestMapping("/**/third.do")
public ModelAndView third(HttpServletRequest request, HttpServletResponse response){
ModelAndView mv = new ModelAndView();
mv.addObject("message","Hello third!");
mv.setViewName("/WEB-INF/jsp/welcome.jsp");
return mv;
}
@RequestMapping("/forth*.do")
public ModelAndView forth(HttpServletRequest request, HttpServletResponse response){
ModelAndView mv = new ModelAndView();
mv.addObject("message","Hello forth!");
mv.setViewName("/WEB-INF/jsp/welcome.jsp");
return mv;
}
}
3.接收请求参数
3.0 接收参数乱码问题
此时需要在web.xml中注册字符编码过滤器
forceEndoding:true 是值在设置编码时一同设置response的编码
<!-- 注册字符编码过滤器 -->
<filter>
<filter-name>CharacterEncodingFilter</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>CharacterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
3.1逐个接收 (涉及注解@RequestParam)
form:
<form action="${pageContext.request.contextPath}/test/my.do" method="post">
<input type="text" name="pname"><br>
<input type="text" name="age"><br>
<input type="submit">
</form>
controller:
package com.bjsxt.handlers;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.servlet.ModelAndView;
//后端控制器
@Controller //表明该类是一个controller
@Scope("prototype")
@RequestMapping("/test") //命名空间
public class MyController{
//逐个接收前台数据
@RequestMapping("/my.do")
//当表单中的name与形参不同时可以试用@RequestParam("xxx")来映射
public ModelAndView first(@RequestParam("pname") String name,int age){
ModelAndView mv = new ModelAndView();
System.out.println(name);
//mv.addObject("name",name).addObject("age",age);
mv.addObject("name",name);
mv.addObject("age",age);
mv.setViewName("/WEB-INF/jsp/welcome.jsp");
return mv;
}
}
3.2以对象形式整体接收
from表单的name属性与形参中的对象属性名保持一致即可
如表单:
<form action="${pageContext.request.contextPath}/test/my.do" method="post">
<input type="text" name="sname"><br>
<input type="text" name="age"><br>
<input type="submit">
</form>
对应
public ModelAndView first(Student student){};
其中student的两个属性应为saname,age
3.3域属性参数的接收
当接收参数为对象,对象中还有对象时,
如Student中还有School对象时
只需要在form表单中的name中加上对象名即可
<form action="${pageContext.request.contextPath}/test/my.do" method="post">
姓名:<input type="text" name="sname"><br>
年龄:<input type="text" name="age"><br>
学校:<input type="text" name="school.name"><br>
地址:<input type="text" name="school.addr"><br>
<input type="submit">
</form>
3.4数组参数的接收
示例:
<form action="${pageContext.request.contextPath}/test/my.do" method="post">
<input type="checkbox" name="interest" value="a1">a1<br>
<input type="checkbox" name="interest" value="a2">a2<br>
<input type="checkbox" name="interest" value="a3">a3<br>
<input type="checkbox" name="interest" value="a4">a4<br>
<input type="submit">
</form>
package com.bjsxt.handlers;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.servlet.ModelAndView;
import com.bjsxt.pojo.Student;
//后端控制器
@Controller //表明该类是一个controller
@Scope("prototype")
@RequestMapping("/test") //命名空间
public class MyController{
//逐个接收前台数据
@RequestMapping("/my.do")
public ModelAndView first(String[] interest){
ModelAndView mv = new ModelAndView();
mv.addObject("interest",interest);
for (String string : interest) {
System.out.println(string);
}
mv.setViewName("/WEB-INF/jsp/welcome.jsp");
return mv;
}
}
3.5restfull风格传参(涉及注解@ PathVariable)
3.6接收json(涉及注解@RequestBody)