博客
关于我
SpringMVC
阅读量:595 次
发布时间:2019-03-11

本文共 7917 字,大约阅读时间需要 26 分钟。

SpringMVC

一、SpringMVC介绍

SpringMVC是一个基于MVC模式的WEB框架,可以与Spring无缝集成

(1) MVC框架[model View Controller]

mode实体类—封装数据

view:视图html jsp

Controller:

​ 1. Servlet----UserServlet

​ 2.struts-----UserAction

​ 3. Controller----UserController

​ 表现

​ 业务层

​ 持久层-----Dao

(2) Spring项目管理专家

二、SpringMV入门

SpringMVC以Spring为核心,而Spring最核心的模块是IOC(控制反转)/DI(依赖注入)容器,所以使用SpringMVC必须

让项目拥有Spring的运行环境。无需单独下载,因为SpringMVC是作为Spring中的一个模块存在

1.导入jar包

导入Spring 相关的包:

com.springsource.org.apache.commons.logging-1.1.1.jar

spring-beans-4.1.2.RELEASE.jar

spring-context-4.1.2.RELEASE.jar

spring-core-4.1.2.RELEASE.jar

spring-expression-4.1.2.RELEASE.jar

spring-aop-4.1.2.RELEASE.jar

SpringMVC相关的包:

spring-web-4.1.2.RELEASE.jar

spring-webmvc-4.1.2.RELEASE.jar

2.配置applicationConctext.xm

3.在web.xml配置核心控制器

SpringMVCsmvc
org.springframework.web.servlet.DispatcherServlet
SpringMVCsmvc
/

4.新建Controller控制器

把我们写的MyController交给Spring管理

5.添加处理请求代码

报错在这里插入图片描述

原因:根据你的web.xml中配置的核心控制器的名字springmvc默认的位置去找到对应的/WEB-INF/springmvc-servlet.xml

是想在这里面找Controller,但是我们写到applicationContext.xml

解决办法:1.可以把配置文件更名为springmvc-servlet.xml,然后拷贝到WEB-INF中

​ 2.通过web.xml配置告诉SpringMVC我们的配置文件路径

contextConfigLocation
classpath:applicationContext.xml

三、Controller控制器实现方式

1.实现Controller接口

public class MyController1 implements Controller{   	@Override	public ModelAndView handleRequest(HttpServletRequest req, HttpServletResponse resp) throws Exception {   		System.out.println("实现Controller接口");		return null;	}}

2.实现HttpRequestHandler接口

public class MyController2 implements HttpRequestHandler{   	@Override	public void handleRequest(HttpServletRequest arg0, HttpServletResponse arg1) throws ServletException, IOException {   		System.out.println("实现HttpRequestHandler接口");	}}

3.普通类和注解

@RequestMapping("/user")public class MyController3{   	@RequestMapping("/add")	public void add(){   		System.out.println("普通类和注解");	}}

4.普通类和全注解

@Controllerpublic class MyController4{   	@RequestMapping("/add")	public void add(){   		System.out.println("普通类和全注解");	}}

@RequestMapping是配置访问路径

@Controller让spring管理这个bean即可

四、视图解析器及静态静态资源放行

配置视图解析器:响应之前走视图解析器解析

五、SpringMVC返回JSON

导入jar包:

在这里插入图片描述

(一)概念

1.返回数据:页面+数据这种方式,数据量过大了

2.表现一个对象 new Student(“猪猪”,18) Arrays.asList(stu1,stu2,stu3)

JSON js里面的对象【格式】

​ var stu = {“name”:“猪猪”,“age”:18}

​ stu.name

​ [{“name”:“猪猪”,“age”:18},{“name”:“猪猪”,“age”:18},{“name”:“猪猪”,“age”:18}]

(二)处理有乱码的问题

text/html;charset=UTF-8

(三)状态异常

400【值类型不匹配】

500【代码级别的错误】

404【资源路劲找不到】

(四)对日期格式的特殊处理

1.从后台向前台

在日期get属性字段上添加一个格式化注解

@JsonFormat(pattern="yyyy-MM-dd",timezone="GMT+8")
2.从前台向后台

在日期set属性字段上添加一个注解

@DateTimeFormat(pattern="yyyy-MM-dd")

(五)JsonController

@Controllerpublic class JsonController {   	@RequestMapping("/json1")	@ResponseBody	public String json1(){   //普通的值不是JSON格式,直接展示		return "xxx";	}		@RequestMapping("/json2")	@ResponseBody	public User json2(User user){   		System.out.println(user);		return new User("猪皮",2,new Date());	}		@RequestMapping("/json3")	@ResponseBody	public List
json3(){ List
list = Arrays.asList(new User("李白",2),new User("猪皮",2),new User("杜甫",1)); return list; } @RequestMapping("/json4") @ResponseBody public String[] json4(){ return new String[] { "A", "B", "C" }; }}

六、 接收参数

1.普通数据接收

@RequestMapping("/param1")	public void param1(String name,Integer age){   		System.out.println("name = " + name);		System.out.println("age = " + age);	}

2.形参名称与传递参数不一致

@RequestMapping("/param2")	public void param2(@RequestParam("name")String username,Integer age){   		System.out.println("username = " + username);		System.out.println("age = " + age);	}

3.给name一个默认值,前台没传参数时不会报空指针异常

@RequestMapping("/param3")	public void param3(@RequestParam(defaultValue="")String name,Integer age){   		System.out.println("name = " + name);		System.out.println("age = " + age);	}

4.使用对象接收参数

@RequestMapping("/param4")	public void param4(User user){   		System.out.println(user);	}

5.HttpServletRequset接收参数

@RequestMapping("/param5")	public void param5(HttpServletRequest req){   		System.out.println(req.getParameter("name"));		System.out.println(req.getParameter("age"));	}

6.URL地址提取数据

http://localhost/param6/123

@RequestMapping("/param6/{id}")	public void param6(@PathVariable("id")Integer id){   		System.out.println(id);//123	}

七、传递数据

(一)传递参数

1.通过model对象进行数据传递
@RequestMapping("/return1")	public String return1(Model model){   		model.addAttribute("name", "猪皮");		model.addAttribute("age", 2);		User user = new User("猪猪",3);		model.addAttribute("user", user);		return "xxx";	}
2.通用ModelAndView模型和视图方式
@RequestMapping("/return2")	public ModelAndView return2(){   		ModelAndView mv = new ModelAndView();		//设置数据到前台		mv.addObject("name", "猪皮");		mv.addObject("age", 2);		User user = new User("猪猪",3);		//添加模型数据,key的值为对象的类型首字母小写		mv.addObject("user", user);		//视图路径		mv.setViewName("xxx");		return mv;	}
3.通过request对象进行数据传递
@RequestMapping("/return3")	public void return3(HttpServletRequest req,HttpServletResponse resp) throws Exception{   		req.setAttribute("name", "豆豆");		req.getRequestDispatcher("/WEB-INF/jsps/xxx.jsp").forward(req, resp);	}
4.通过返回值传递数据
@RequestMapping("/return4")	public User return4(){   		User user = new User("皮皮",12);		return user;	}

(二)跳转方式

请求转发(forward) 重定向(redirect)
访问WEB-INF X
request传参 X
全新请求(URL变化) X
访问外网 X
1.请求转发
@RequestMapping("/for")	public String forward(){   		return "forward:/WEB-INF/jsps/xxx.jsp";	}
2.重定向
@RequestMapping("/red")	public String redirect(){   		return "redirect:/user.jsp";	}

八、文件上传

@RequestMapping("/upload")	public String upload(String name,int age,MultipartFile fileImg) throws IOException{   		//方法		System.out.println(fileImg.getContentType());		System.out.println(fileImg.getName());		System.out.println(fileImg.getOriginalFilename());		System.out.println(FilenameUtils.getExtension(fileImg.getOriginalFilename()));		System.out.println(fileImg.getSize());		System.out.println(fileImg.getBytes());		//解析封装图片的对象fileImg		InputStream is = fileImg.getInputStream();		FileOutputStream fos = new FileOutputStream("D:/eclipseWorkSpace/Day11.8_SpringMVC/webapp/img/1.jpg");		IOUtils.copy(is, fos);		fos.close();		is.close();		return "redirect:/index.jsp";	}

九、文件下载

@RequestMapping("/download")	public void downLod(HttpServletRequest req,HttpServletResponse resp) throws FileNotFoundException, IOException{   		//设置建议的下载文件名		resp.setHeader("Content-Disposition", "filename=2.jpg");		resp.setHeader("Content-Type", "application/octet-stream");		String filename = req.getParameter("filename");		//文件在服务器的真实路径下载		String filerealPath = req.getServletContext().getRealPath("/img/"+filename);		IOUtils.copy(new FileInputStream(filerealPath), resp.getOutputStream());	}

十、SpringMVC拦截器

(一)创建拦截器

public class MyHandlerInterceptor implements HandlerInterceptor{       //在DispatcherServlet完全处理完请求后被调用  	@Override	public void afterCompletion(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, Exception arg3)			throws Exception {   		System.out.println("afterCompletion");	}    //方法在业务处理器处理请求之后被调用 	@Override	public void postHandle(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, ModelAndView arg3)			throws Exception {   		System.out.println("postHandle");	}    //方法在业务处理器处理请求之前被调用 	@Override	public boolean preHandle(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2) throws Exception {   		System.out.println("preHandle");		return false;//决定放行问题	}}

(二)配置拦截器

十一、SpringMVC工作流程描述

在这里插入图片描述

  1. 客户端请求提交到DispatcherServlet
  2. 由DispatcherServlet控制器查询一个或多个HandlerMapping,找到处理请求的Controller。
  3. DispatcherServlet将请求转发给到Controller。
  4. Controller调用业务逻辑处理后,返回ModelAndView
  5. DispatcherServlet查询一个或多个ViewResoler视图解析器,找到ModelAndView指定的视图。
  6. 视图负责将结果显示到客户端

转载地址:http://mystz.baihongyu.com/

你可能感兴趣的文章
视频课程:CMOS模拟集成电路设计--已上线
查看>>
fragment懒加载
查看>>
砂原良徳创作的“日本媒体艺术分散式博物馆”主题曲《Nihon no Sugata》在官网发布
查看>>
环太平洋大学协会启动全球首个大学Esports MetaGame Conference和电竞人才培育项目
查看>>
GSMA最新研究报告:运营商必须扩展连接以外的功能,以抢占价值1.1万亿美元的物联网收入商机
查看>>
实习复习--mysql视图17
查看>>
MyBatis缓存
查看>>
数据结构与算法【Java版】:第一课
查看>>
Kotlin泛型中何时该用类型形参约束?
查看>>
天载免息股票钢铁股掀涨停潮
查看>>
树莓派SSH 连接不上:socket error Event:32 Error:10053
查看>>
wxPython的使用
查看>>
红黑树(1):B-树
查看>>
安装APEX
查看>>
站长常用Shell脚本整理分享(全)
查看>>
linux 内核提权总结(demo+exp分析) -- 任意读写(二)
查看>>
2020年电工(初级)考试题及电工(初级)考试题库
查看>>
2020年电气试验考试技巧及电气试验模拟试题
查看>>
2021年电工(中级)考试报名及电工(中级)模拟试题
查看>>
直接插入排序
查看>>