- 基础
- Spring MVC的简介:
Spring MVC是一个基于MVC架构的用来简化web应用程序开发的应用开发框架,它是Spring的一部分,它和Struts2一样都属于表现层的框架。
MVC(Model模型 View 视图 Controller 控制器):这是一种软件架构思想,是一种开发模式,将软件划分为三种不同类型的模块,分别是模型,视图,和控制器。
模型:用于封装业务逻辑处理(java类);
视图:用于数据展现和操作界面(Servlet);
控制器:用于协调视图和模型(jsp)
- 处理流程:视图将请求发送给控制器,由控制器选择对应的模型来处理;模型将处理结果交给控制器,控制器选择合适的视图来展现处理结果;
- Spring MVC的优点
和Spring框架的无缝集成,采用IOC便于测试
典型的纯MVC架构,Struts是不完全基于MVC框架的,Struts值栈与jsp关联密切。
- Spring MVC的五大组键 ?
前端控制器 (DispatcherServlet)
映射处理器(HandlerMapping)
处理器(Controller)
模型和视图(ModelAndView)
视图解析器(ViewResolver)
- springMVC的运行原理
- 客户端请求提交到DispatcherServlet
- 由DispatcherServlet控制器查询一个或多个HandlerMapping,找到处理请求的Controller
- DispatcherServlet将请求提交到Controller
- Controller调用业务逻辑处理后,返回ModelAndView
- DispatcherServlet查询一个或多个ViewResoler视图解析器,找到ModelAndView指定的视图
- 视图负责将结果显示到客户
- 如果你也用过struts2.简单介绍下springMVC和struts2的区别有哪些?
- springmvc的入口是一个servlet即前端控制器,而struts2入口是一个filter过滤器。
- springmvc是基于方法开发(一个url对应一个方法),请求参数传递到方法的形参,可以设计为单例或多例(建议单例)
struts2是基于类开发,传递参数是通过类的属性,只能设计为多例。 - Struts采用值栈存储请求和响应的数据,通过OGNL存取数据
springmvc通过参数解析器是将request请求内容解析,并给方法形参赋值,将数据和视图封装成ModelAndView对象,最后又将ModelAndView中的模型数据通过reques域传输到页面。Jsp视图解析器默认使用jstl。
- 讲下SpringMvc的核心入口类是什么Struts2的分别是什么
SpringMvc的是DispatchServlet,Struts2的是StrutsPrepareAndExecuteFilter - SpringMvc的控制器是不是单例模式,如果是,有什么问题,怎么解决
是单例模式,所以在多线程访问的时候有线程安全问题,不要用同步,会影响性能的,解决方案是在控制器里面不能写字段 - SpingMvc中的控制器的注解一般用那个,有没有别的注解可以替代
一般用@Controller注解,表示是表现层,不能用用别的注解代替. - @RequestMapping注解用在类上面有什么作用(spring mvc中表单提交的action路径问题)
注解 @RequestMapping 可以用在类定义处和方法定义处- 定义处:规定初步的请求映射,表示类中的所有响应请求的方法都是以该地址作为父路径。
- 方法定义处:进一步细分请求映射,相对于类定义处的URL。如果类定义处没有使用该注解,则方法标记的URL相对于根目录而言
- @PathVariable 和 @RequestParam的区别及使用方法
PathVariable:路径变量,顾名思义,就是要获取一个url 地址中的一部分值
RequestParam是获取请求参数的 - 怎么样把某个请求映射到特定的方法上面
直接在方法上面加上注解@RequestMapping,并且在这个注解里面写上要拦截的路径 - 如果在拦截请求中,我想拦截get方式提交的方法,怎么配置
可以在@RequestMapping注解里面加上method=RequestMethod.GET - 如果在拦截请求中,我想拦截提交参数中包含”type=test”字符串,怎么配置
可以在@RequestMapping注解里面加上params=”type=test” - 我想在拦截的方法里面得到从前台传入的参数,怎么得到
直接在形参里面声明这个参数就可以,但必须名字和传过来的参数一样 - 如果前台有很多个参数传入,并且这些参数都是一个对象的,那么怎么样快速得到这个对象
直接在方法中声明这个对象,SpringMVC就自动会把属性赋值到这个对象里面 - 怎么样在方法里面得到Request,或者Session
直接在方法的形参中声明request,SpringMvc就自动把request对象传入 - SpringMVC中函数的返回值是什么.
返回值可以有很多类型,有String, ModelAndView,当一般用String比较好 - SpringMvc怎么处理返回值的
根据视图定位。SpringMvc根据配置文件中InternalResourceViewResolver的前缀和后缀,用前缀+返回值+后缀组成完整的返回值 - SpringMVC怎么样设定重定向和转发的
在返回值前面加”forward:”就可以让结果转发,譬如”forward:user.do?name=method4”
在返回值前面加”redirect:”就可以让返回值重定向,譬如”redirect:http://www.baidu.com” - SpringMVC中有个类把视图和数据都合并的一起的,叫什么
ModelAndView - 怎么样把ModelMap里面的数据放入Session里面
第一种:直接使用servlet原生API:request.getSession().setAttribute("test", "hello spring mvc!");
第二种:可以在类上面加上@SessionAttributes注解,里面包含的字符串就是要放入session里面的key - SpringMVC如何读取请求参数值 ?
方式1:通过request
方式2:通过@RequestParam
方式3:通过Javabean - Spring MVC如何向页面传值 ?
方式1: 绑定数据到request
方式2: 返回ModelandView
方式3:绑定数据到ModelMap
方式4:绑定数据到Session - 扩展
- SpringMVC怎么和AJAX相互调用的
通过Jackson框架就可以把Java里面的对象直接转化成Js可以识别的Json对象
具体步骤如下- 加入Jackson.jar
- 在web.xml 配置文件中配置json的映射
- 在接受Ajax方法里面可以直接返回Object,List等,但方法前面要加上@ResponseBody注解(如果前后端分离开发,前后端之间的数据交互就应该全部是通过json,spring mvc中能够直接把前端传过来的json数据通过@requestBody注解转化成你需要的数据类型,同时@responseBody也能把你后端的数据类型转化成json数据传到前端)
- Spring MVC如何解决中文乱码问题 ?
可以使用SpringMVC提供的过滤器(CharacterEncodingFilter)来解决;只需要配置该过滤器就可以,需要注意的是:
过滤器的编码设置应该与jsp页面保存一致
表单的提交方式设置为post
- SpringMVC如何写一个拦截器:
- 写一个java类,实现HandlerInterceptor接口;
- 在接口方法当中,实现处理逻辑。
- 配置拦截器
<!-- 只针对部分请求拦截 -->
<mvc:interceptor>
<mvc:mapping path="/modelMap.do" />
<bean class="com.et.action.MyHandlerInterceptorAdapter" />
</mvc:interceptor> - 拦截器还可以设置优先级:依据配置的顺序来执行
- spring mvc拦截器、过滤器
- 过滤器依赖于servlet容器。在实现上基于函数回调,可以对几乎所有请求进行过滤,但是缺点是一个过滤器实例只能在容器初始化时调用一次。使用过滤器的目的是用来做一些过滤操作,获取我们想要获取的数据,比如:在过滤器中修改字符编码;在过滤器中修改HttpServletRequest的一些参数,包括:过滤低俗文字、危险字符等
- 拦截器依赖于web框架,在SpringMVC中就是依赖于SpringMVC框架。在实现上基于Java的反射机制,属于面向切面编程(AOP)的一种运用。由于拦截器是基于web框架的调用,因此可以使用Spring的依赖注入(DI)进行一些业务操作,同时一个拦截器实例在一个controller生命周期之内可以多次调用。但是缺点是只能对controller请求进行拦截,对其他的一些比如直接访问静态资源的请求则没办法进行拦截处理
- 多个过滤器与拦截器的代码执行顺序
- 过滤器在系统启动的时候会实例化,仅此一次
- 拦截器主要看其在spring mvc配置文件中的先后顺序
- springmvc配置文件中是<url-pattern>/*</url-pattern>改成<url-pattern>/</url-pattern>的区别?
通常配置过滤器的时候,使用<url-pattern>/*</url-pattern>,过滤所有的请求
而配置<url-pattern>/</url-pattern>的时候,通常用来处理 HTTP 缓存请求、媒体 (音频/视频) 流和文件下载恢复等。 - 上传文件的步骤
- 步骤 1 : 配置web.xml允许访问*.jpg
步骤 2 : 配置springmvc-servlet.xml
步骤 3 : upload.jsp 上传页面
步骤 4 : 准备UploadedImageFile
步骤 5 : UploadController 上传控制器
步骤 6 : showUploadedFile.jsp 显示图片的页面
- 步骤 1 : 配置web.xml允许访问*.jpg
10-07
10-07