一、概念
MVC: model,view,controller
springMVC: 是一个MVC框架,能够将数据,业务和展现分离
二、原理图
三、xml配置方式实现
代码地址:https://github.com/xiangqian19831224/springmvc01.git
1、创建工程
2、在web.xml中配置前端控制器 DispatcherServlet
配置DispatcherServlet
配置映射规则
3、web-inf下创建spring的mvc配置文件
文件名称为[servlet-name]-servlet.xml
[servlet-name]就是web中配置的servlet-name
4、在[servlet-name]-servlet.xml中配置 HandlerMapping,controller
动作名字->controller
hello.do->com.xx.HelloController
参看最小面的图
5、创建jsp页面,需要发出请求的页面
动作名字->发送命令
与4结合看,名字对应的消息,会传送到对应的controller
6、创建controller继承AbastractController,重写handleRequestInternal函数
//返回數據和頁面
ModelAndView mav = newModelAndView("index");
mav.addObject("helloworld", "hello " +hello);
7、在[servlet-name]-servlet.xml中配置 视图解析器
四、注解实现
代码地址:https://github.com/xiangqian19831224/springmvc02.git
1、controller注解
@Controller
public classHelloController {
@RequestMapping(value="/hello.do")
public String hello(String userName, Model model){
System.out.println(userName);
model.addAttribute("helloworld", userName);
return "";
}
}
2、配置
web.xml: 配置dispatcherServlet 不变
hello.jsp: 参数name="userName" 与controller中的参数命名一样
[servlet-name]-servlet.xml:
![](https://i-blog.csdnimg.cn/blog_migrate/be0ae3e8fef2363e50e6a4ba85c6e982.jpeg)
五、访问controller的方式
1、通过beanname的方式
2、通过类型的方式
注: controller命令为, [name]Controller, jsp中,类型为[name].do就可以<假设servlet urlPatern为*.do>
3、通过简单url方式,我再spring4.0上面没有测试通过,3.0支持
1
4、源码地址:
https://github.com/xiangqian19831224/springmvc03.git
六、访问多个页面
1、controller添加路径信息进行区分
返回的是页面路径
@Controller
@RequestMapping("user")
public class UserController {
@RequestMapping(value="list")
publicString list(){
System.out.println("--------查询用户信息----------");
return"userinfo/user_list";
}
@RequestMapping(value="add.do")
publicString add(){
System.out.println("--------用戶信息添加----------");
return"userinfo/user_add";
}
}
2、jsp页面
href值为对应的动作路径
![](https://i-blog.csdnimg.cn/blog_migrate/590d0ef681e2336192e397054efa7717.jpeg)
3、源码地址:https://github.com/xiangqian19831224/springmvc04.git
七、参数传递方法
1、通过设置HttpServletRequest request来获取参数
publicString add1(HttpServletRequest request){
String userNum = request.getParameter("userNumber");
String password =request.getParameter("password");
System.out.println("userNumber:" + userNum + " password:" + password);
return "user_add1";
}
2、通过设置同名参数
@RequestMapping(value="/add2.do")
publicString add2(String userNumber, int password){
System.out.println("userNumber:" + userNumber + " password:" + password);
return"user_add2";
}
3、通过@RequestParam限定赋值参数
@RequestMapping(value="/add3.do")
publicString add3(@RequestParam("userNumber") StringuserNumber, @RequestParam("password") int password){
System.out.println("userNumber:" + userNumber + " password:" + password);
return"user_add3";
}
4、通过类传参数
@RequestMapping(value="/add4.do")
publicString add4(UserInfo user){
System.out.println(user.toString());
return"user_add4";
}
5、时间参数传递
注意: importjava.util.Date;
@RequestMapping(value="/add5.do")
publicString add5(Integer userId,Date userTime){
System.out.println(userId);
System.out.println(userTime);
return"user_add5";
}
@InitBinder
public voidinitBinder(ServletRequestDataBinder bin){
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-ddHH:mm:ss");
CustomDateEditor cust = new CustomDateEditor(sdf, true);
bin.registerCustomEditor(Date.class,cust);
}
参考代码:
https://github.com/xiangqian19831224/springmvc05.git
八、返回页面数据
1. HttpServletRequest request直接使用 request.setAttribute("user", str);
@RequestMapping(value="/add1.do")
publicString add1(HttpServletRequest request){
StringuserNum = request.getParameter("userNumber");
Stringpassword = request.getParameter("password");
System.out.println("userNumber:" + userNum + " password:" + password);
String str ="userNumber:" + userNum + " password:" + password;
request.setAttribute("user", str);
return"user_add1";
}
2. 使用ModelAndView
@RequestMapping(value="/add2.do")
publicModelAndView add2(){
ModelAndViewmodelAndView = new ModelAndView("user_add2");
modelAndView.addObject("userId", 1001);
modelAndView.addObject("userName", "张三");
returnmodelAndView;
}
3. 使用Model model
@RequestMapping(value="/add3.do")
publicString add3(Model model){
model.addAttribute("personId", 1233);
model.addAttribute("personName", "唐伯虎");
return"user_add3";
}
4. 使用Map
@RequestMapping(value="/add5.do")
publicString add5(Integer personId,String personName,Map map){
System.out.println(personId);
System.out.println(personName);
map.put("personId", 9527);
map.put("personName", "唐伯虎");
return"user_add5";
}
参考代码:https://github.com/xiangqian19831224/springmvc06.git
九、SpringMVC AJAX
1、通过HttpServletResponse直接返回结果
@RequestMapping("/ajaxUser.do")
public voiduserNumber(String userNumber, HttpServletResponse response) {
System.out.println(userNumber);
try {
response.setContentType("text/html");
response.setCharacterEncoding("utf-8");
PrintWriterout = response.getWriter();
if("liu".equals(userNumber)) {
out.println("对不起,请从新输入账号");
} else{
out.println("恭喜你,账号可以使用");
}
out.flush();
out.close();
} catch(Exception e) {
e.printStackTrace();
}
}
2、通过json格式返回
@RequestMapping("ajaxUser2.do")
public@ResponseBody UserInfo ajaxUser(Integer userId) {
System.out.println("编号:" + userId);
UserInfouserInfo = new UserInfo();
userInfo.setUserId(userId);
userInfo.setUserName("张三");
userInfo.setUserSex("男");
returnuserInfo;
}
springmvc-servlet.xml配置
![](https://i-blog.csdnimg.cn/blog_migrate/ac5aceeacd7843aeefa84526dc3898a5.jpeg)
参考代码:
https://github.com/xiangqian19831224/springmvcajax.git
MVC: model,view,controller
springMVC: 是一个MVC框架,能够将数据,业务和展现分离
二、原理图
![](https://i-blog.csdnimg.cn/blog_migrate/ea8e4cc85e705d057296cf538f10b2e8.jpeg)
三、xml配置方式实现
代码地址:https://github.com/xiangqian19831224/springmvc01.git
1、创建工程
2、在web.xml中配置前端控制器 DispatcherServlet
配置DispatcherServlet
配置映射规则
![](https://i-blog.csdnimg.cn/blog_migrate/3d7b7e38ebfcad990281d422f741d01a.jpeg)
3、web-inf下创建spring的mvc配置文件
文件名称为[servlet-name]-servlet.xml
[servlet-name]就是web中配置的servlet-name
4、在[servlet-name]-servlet.xml中配置 HandlerMapping,controller
动作名字->controller
hello.do->com.xx.HelloController
参看最小面的图
5、创建jsp页面,需要发出请求的页面
动作名字->发送命令
与4结合看,名字对应的消息,会传送到对应的controller
![](https://i-blog.csdnimg.cn/blog_migrate/2bc709b482eae3a45f8c46b749060d09.jpeg)
6、创建controller继承AbastractController,重写handleRequestInternal函数
//返回數據和頁面
ModelAndView mav = newModelAndView("index");
mav.addObject("helloworld", "hello " +hello);
7、在[servlet-name]-servlet.xml中配置 视图解析器
![](https://i-blog.csdnimg.cn/blog_migrate/37c00b8d3dda155cdee22078c59a9937.jpeg)
四、注解实现
代码地址:https://github.com/xiangqian19831224/springmvc02.git
1、controller注解
@Controller
public classHelloController {
@RequestMapping(value="/hello.do")
public String hello(String userName, Model model){
System.out.println(userName);
model.addAttribute("helloworld", userName);
return "";
}
}
2、配置
web.xml: 配置dispatcherServlet 不变
hello.jsp: 参数name="userName" 与controller中的参数命名一样
[servlet-name]-servlet.xml:
![](https://i-blog.csdnimg.cn/blog_migrate/be0ae3e8fef2363e50e6a4ba85c6e982.jpeg)
五、访问controller的方式
1、通过beanname的方式
2、通过类型的方式
注: controller命令为, [name]Controller, jsp中,类型为[name].do就可以<假设servlet urlPatern为*.do>
3、通过简单url方式,我再spring4.0上面没有测试通过,3.0支持
1
4、源码地址:
https://github.com/xiangqian19831224/springmvc03.git
六、访问多个页面
1、controller添加路径信息进行区分
返回的是页面路径
@Controller
@RequestMapping("user")
public class UserController {
@RequestMapping(value="list")
publicString list(){
System.out.println("--------查询用户信息----------");
return"userinfo/user_list";
}
@RequestMapping(value="add.do")
publicString add(){
System.out.println("--------用戶信息添加----------");
return"userinfo/user_add";
}
}
2、jsp页面
href值为对应的动作路径
![](https://i-blog.csdnimg.cn/blog_migrate/590d0ef681e2336192e397054efa7717.jpeg)
3、源码地址:https://github.com/xiangqian19831224/springmvc04.git
七、参数传递方法
1、通过设置HttpServletRequest request来获取参数
publicString add1(HttpServletRequest request){
String userNum = request.getParameter("userNumber");
String password =request.getParameter("password");
System.out.println("userNumber:" + userNum + " password:" + password);
return "user_add1";
}
2、通过设置同名参数
@RequestMapping(value="/add2.do")
publicString add2(String userNumber, int password){
System.out.println("userNumber:" + userNumber + " password:" + password);
return"user_add2";
}
3、通过@RequestParam限定赋值参数
@RequestMapping(value="/add3.do")
publicString add3(@RequestParam("userNumber") StringuserNumber, @RequestParam("password") int password){
System.out.println("userNumber:" + userNumber + " password:" + password);
return"user_add3";
}
4、通过类传参数
@RequestMapping(value="/add4.do")
publicString add4(UserInfo user){
System.out.println(user.toString());
return"user_add4";
}
5、时间参数传递
注意: importjava.util.Date;
@RequestMapping(value="/add5.do")
publicString add5(Integer userId,Date userTime){
System.out.println(userId);
System.out.println(userTime);
return"user_add5";
}
@InitBinder
public voidinitBinder(ServletRequestDataBinder bin){
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-ddHH:mm:ss");
CustomDateEditor cust = new CustomDateEditor(sdf, true);
bin.registerCustomEditor(Date.class,cust);
}
参考代码:
https://github.com/xiangqian19831224/springmvc05.git
八、返回页面数据
1. HttpServletRequest request直接使用 request.setAttribute("user", str);
@RequestMapping(value="/add1.do")
publicString add1(HttpServletRequest request){
StringuserNum = request.getParameter("userNumber");
Stringpassword = request.getParameter("password");
System.out.println("userNumber:" + userNum + " password:" + password);
String str ="userNumber:" + userNum + " password:" + password;
request.setAttribute("user", str);
return"user_add1";
}
2. 使用ModelAndView
@RequestMapping(value="/add2.do")
publicModelAndView add2(){
ModelAndViewmodelAndView = new ModelAndView("user_add2");
modelAndView.addObject("userId", 1001);
modelAndView.addObject("userName", "张三");
returnmodelAndView;
}
3. 使用Model model
@RequestMapping(value="/add3.do")
publicString add3(Model model){
model.addAttribute("personId", 1233);
model.addAttribute("personName", "唐伯虎");
return"user_add3";
}
4. 使用Map
@RequestMapping(value="/add5.do")
publicString add5(Integer personId,String personName,Map map){
System.out.println(personId);
System.out.println(personName);
map.put("personId", 9527);
map.put("personName", "唐伯虎");
return"user_add5";
}
参考代码:https://github.com/xiangqian19831224/springmvc06.git
九、SpringMVC AJAX
1、通过HttpServletResponse直接返回结果
@RequestMapping("/ajaxUser.do")
public voiduserNumber(String userNumber, HttpServletResponse response) {
System.out.println(userNumber);
try {
response.setContentType("text/html");
response.setCharacterEncoding("utf-8");
PrintWriterout = response.getWriter();
if("liu".equals(userNumber)) {
out.println("对不起,请从新输入账号");
} else{
out.println("恭喜你,账号可以使用");
}
out.flush();
out.close();
} catch(Exception e) {
e.printStackTrace();
}
}
2、通过json格式返回
@RequestMapping("ajaxUser2.do")
public@ResponseBody UserInfo ajaxUser(Integer userId) {
System.out.println("编号:" + userId);
UserInfouserInfo = new UserInfo();
userInfo.setUserId(userId);
userInfo.setUserName("张三");
userInfo.setUserSex("男");
returnuserInfo;
}
springmvc-servlet.xml配置
![](https://i-blog.csdnimg.cn/blog_migrate/ac5aceeacd7843aeefa84526dc3898a5.jpeg)
参考代码:
https://github.com/xiangqian19831224/springmvcajax.git