SpringMVC 笔记

Sproing MVC 面试笔记

  • 一、基础知识
  • 二、注解
  • 三、其他
  • 四、Struts2与SpringMVC的对比
  • 五、参考

一、基础知识

1、Spring MVC是一个基于Java的实现了MVC设计模式的请求驱动类型的轻量级Web框架

2、MVC设计模式:MVC是Model-View-Controller(模型-视图-控制器)

  • Model:实体类以及实体类上面的逻辑操作 (dao层和service层)
  • view:用户试图
  • Controller:控制器作用于模型和视图上,控制上面两个模块的交互 (Controller层,调用service层)

3、Spring的MVC框架是围绕DispatcherServlet来设计的,它用来处理所有的HTTP请求和响应(筛选,分发)

4、Spring MVC的控制器是单例模式,在多线程访问的时候有线程安全问题,不要用同步,会影响性能的,解决方案是在控制器里面不能写字段

5、工作流程(来源见水印)【重点】
SpringMVC 笔记_第1张图片

  • 2、3、4步:使用 URL 匹配一个控制器
  • 5、6、7、8步:调用Controller,返回试图
  • 9、10、11、12步:对View进行渲染视图(即将模型数据填充至视图中)

二、注解

开启注解扫描
1、 @RequestMapping:用来处理请求地址映射的注解(六个属性value、method等)

  • value: 指定请求的实际地址:一般我们只写这一个参数
  • method,指定请求类型:GET、POST、PUT、DELETE

2、 @Controller注解:

  • 用于处理DispatcherServlet分发小来的请求,返回一个 Model 或 json

3、@RestController注解 == @ResponseBody + @Controller

  • 与Controller相比只返回一个json的字符串,不返回试图,不会被视图层解析

4、@ResponseBody

  • 使用时机:返回的数据不是html标签的页面,而是其他某种格式的数据时(如json、xml等)使用
  • 不经过试图解析器

5、@PathVariable 和 @RequestParam

  • @PathVariable获取 URL 路径上的参数
    • 如 http://localhost:8989/test/index/7 中的 7 :使用
    public String edit(@PathVariable("id") Integer id)
    
  • @RequestParam获取携带的参数
    • 如 http://localhost:8989/test/index?pageNo=2 中的pageNo的值 2:使用
     public String list(@RequestParam(value="pageNo",required=false,  defaultValue="1")String pageNoStr)
    
    • 三个参数
      • value:前端传递过来的名字
      • required:是否必须
      • defaultValue:默认值

三、其他

1、SpringMVC设置转发重定向

  • 转发:在返回值前加上“forward”(转发是服务器自己去获取目标页面并返回,客户端只发一个请求,不知道真实的地址)
  • 重定向:在返回值前加上“redirect ”(重定向是服务器回一个消息给客户端,然后客户端重新发送一个请求)

2、在方法的形参中声明request,Spring MVC就自动把request对象传入

3、WebApplicationContext 继承了ApplicationContext 并增加了一些WEB应用必备的特有功能,它不同于一般的ApplicationContext ,因为它能处理主题,并找到被关联的servlet。

4、SpringMVC的返回值:可以有很多类型,有String, ModelAndView。ModelAndView类把视图和数据都合并的一起的,但一般用String比较好。

5、SpringMVC 后台向前台传递数据的方式:model、request、map,然后返回试图名;或者放在ModelAndView中,返回该对象(详细参考3)


@RequestMapping(value="/test.do",method = RequestMethod.POST)
	public String checknameIsExist(@RequestParam("sid") String sid,Model model,HttpServletRequest request,Map map) {
     
		Student stu = studentService.getStudent(sid);
		if(stu != null){
     
			System.out.println(stu.getSname());
		}
		//1.放在model里 建议使用
   		model.addAttribute("mode", "modeValue");
		//2.放在request里
		request.setAttribute("request", "requestValue");
		//3.放在map里
		map.put("map", "mapvalue"); 	
		List<String> list = new ArrayList<String>();
		list.add("1");
		list.add("2");
		list.add("3");
		map.put("listmap", list); 
		return "user";

// 另一种方式
	@RequestMapping(value="/test2.do",method = RequestMethod.POST)
	public ModelAndView checknameIsExist2(@RequestParam("sid") String sid,Model model,HttpServletRequest request) {
     
		ModelAndView mav = new ModelAndView("user");
		mav.addObject("ModelAndView", "ModelAndViewValue");
		mav.setViewName("user");
		return mav;
	}

6、前台向后台传输数据

  • 直接在形参里面声明这个参数就可以,但必须名字和传过来的参数一样。
  • 前台有很多个参数传入,并且这些参数都是一个对象的,直接在方法中声明这个对象,Spring MVC就自动会把属性赋值到这个对象里面

四、Struts2与SpringMVC的对比

1、相同点:都是基于mvc的表现层框架,都用于web项目的开发
2、不同点:

  • 前端控制器不同:Spring MVC的前端控制器是servlet:DispatcherServlet;struts2的前端控制器是filter:StrutsPreparedAndExcutorFilter。
  • 请求参数的接收方式不一样。Spring MVC是使用方法的形参接收请求的参数,基于方法的开发,线程安全,可以设计为单例或者多例的开发,推荐和默认使用单例模式的开发(执行效率更高)。struts2是通过类的成员变量接收请求的参数,是基于类的开发,线程不安全,只能设计为多例的开发。
  • Struts采用值栈存储请求和响应的数据;Spring MVC通过参数解析器将request请求内容解析。

五、参考

1、Spring MVC 面试题
2、SpringMVC常用注解
3、SpringMVC后台向前台传数据
4、Struts2-值栈

你可能感兴趣的:(Java,java,spring)