博客
关于我
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/

你可能感兴趣的文章
《我的世界》Python编程入门(5) 租金游戏
查看>>
《我的世界》Python编程入门(7) 使用Python中的for循环语句放置多个方块
查看>>
顺序建表
查看>>
多余元素删除之移位算法
查看>>
linux -----创建用户 ,群组,权限
查看>>
Linux自学之旅-基础命令(管道符 | )
查看>>
Linux自学之旅-基础命令(系统痕迹之who命令)
查看>>
HCIA(计算机网络概念、网络协议模型意义)
查看>>
HCIA(OSI七层参考模型详解)
查看>>
设计模式一(工厂模式)
查看>>
CentOS安装java开发环境(输入javac无反应及解决办法)
查看>>
node.js手写http服务器连接mysql数据库
查看>>
css 设置背景图片铺满固定不动
查看>>
laravel server error 服务器内部错误
查看>>
yum 404
查看>>
漫谈Java理念的转变与JVM的五大优势
查看>>
编码的奥秘:手电筒剖析
查看>>
实习记录-1
查看>>
【图像去噪】基于全变分算法图像去噪matlab源码
查看>>
【TSP】基于混合粒子群求解TSP问题matlab源码
查看>>