Spring MVC总结

  1. Springmvc 工作原理是什么?
    客户端发送请求到 DispatcherServlet
    DispatcherServlet 查询 handlerMapping 找到处理请求的 Controller
    Controller 调用业务逻辑后,返回 ModelAndView
    DispatcherServlet 查询 ModelAndView,找到指定视图
    视图将结果返回到客户端
  2. Springmvc 执行流程是什么?
    用户发送请求至前端控制器DispatcherServlet;
    DispatcherServlet收到请求后,调用HandlerMapping处理器映射器,请求获取Handle;
    处理器映射器根据请求url找到具体的处理器,生成处理器对象及处理器拦截器(如果有则生成)一并返回给DispatcherServlet;
    DispatcherServlet 调用 HandlerAdapter处理器适配器;
    HandlerAdapter 经过适配调用 具体处理器(Handler,也叫后端控制器);
    Handler执行完成返回ModelAndView;
    HandlerAdapter将Handler执行结果ModelAndView返回给DispatcherServlet;
    DispatcherServlet将ModelAndView传给ViewResolver视图解析器进行解析;
    ViewResolver解析后返回具体View;
    DispatcherServlet对View进行渲染视图(即将模型数据填充至视图中)
    DispatcherServlet响应用户。
  1. Springmvc 中如何解决 GET | POST请求中文乱码问题?
    GET方式:

每次发生请求之前对URL进行编码:

例如:Location.href="/encodeURI"(“http://localhost/test/s?name=中文&sex=女”);

更简便的方法,在服务器端配置URL编码格式:修改tomcat的配置文件server.xml:

只需增加 URIEncoding=“UTF-8” 这一句,然后重启tomcat即可。

<ConnectorURIEncoding="UTF-8"
port="8080" maxHttpHeaderSize="8192" maxThreads="150"
minSpareThreads="25" maxSpareThreads="75"connectionTimeout="20000"
disableUploadTimeout="true" URIEncoding="UTF-8" />

POST方式:

可以每次在request解析数据时设置编码格式:request.setCharacterEncoding(“utf-8”);

也可以使用编码过滤器来解决,最常用的方法是使用Spring提供的编码过滤器:

在Web.xml中增加如下配置(要注意的是它的位置一定要是第一个执行的过滤器):

<filter>
<filter-name>charsetFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
<init-param>
<param-name>forceEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>

该过滤器要做的其实就是强制为所有请求和响应设置编码格式:

request.setCharacterEncoding(“utf-8”);
response.setCharacterEncoding(“utf-8”);

  1. Springmvc 怎么样设定重定向和转发的?
    在返回值前面加"forward:“就可以让结果转发,譬如"forward:user.do?name=method4”
    在返回值前面加"redirect:“就可以让返回值重定向,譬如"redirect:http://www.baidu.com
  2. Springmvc 怎么和AJAX相互调用的?
    通过Jackson框架就可以把Java里面的对象直接转化成Js可以识别的Json对象。具体步骤如下 :

加入Jackson.jar
在配置文件中配置json的映射
在接受Ajax方法里面可以直接返回Object,List等,但方法前面要加上@ResponseBody注解。

  1. Springmvc 如何做异常处理 ?
    可以将异常抛给Spring框架,由Spring框架来处理;自定义实现spring的全局异常解析器HandlerExceptionResolver,在异常处理器中添视图页面即可。

  2. Springmvc 的控制器是不是单例模式,如果是,有什么问题,怎么解决?
    是单例模式,所以在多线程访问的时候有线程安全问题,不要用同步,会影响性能的,解决方案是在控制器里面不能写字段。

  3. Springmvc 中 如果拦截get方式提交的方法,怎么配置?
    可以在@RequestMapping注解里面加上method=RequestMethod.GET

  4. Springmvc 怎么样把ModelMap里面的数据放入Session里面?
    可以在类上面加上@SessionAttributes注解,里面包含的字符串就是要放入session里面的key。

  5. Springmvc 中系统如何分层 ?
    系统分为表现层(UI):数据的展现,操作页面,请求转发。
    业务层(服务层):封装业务处理逻辑
    持久层(数据访问层):封装数据访问逻辑

各层之间的关系: 表示层通过接口调用业务层,业务层通过接口调用持久层,这样,当下一层发生变化改变,不影响上一层的数据。 MVC是一种表现层的架构

  1. Springmvc 和struts2的区别有哪些?
    springmvc的入口是一个servlet即前端控制器(DispatchServlet),而struts2入口是一个filter过虑器(StrutsPrepareAndExecuteFilter)。
    springmvc是基于方法开发(一个url对应一个方法),请求参数传递到方法的形参,可以设计为单例或多例(建议单例),struts2是基于类开发,传递参数是通过类的属性,只能设计为多例。
    Struts采用值栈存储请求和响应的数据,通过OGNL存取数据,springmvc通过参数解析器是将request请求内容解析,并给方法形参赋值,将数据和视图封装成ModelAndView对象,最后又将ModelAndView中的模型数据通过reques域传输到页面。Jsp视图解析器默认使用jstl。

  2. Springmvc 用什么对象从后台向前台传递数据的?
    答:通过ModelMap对象,可以在这个对象里面用put方法,把对象加到里面,前台就可以通过el表达式拿到。

  3. springmvc 中当一个方法向AJAX返回特殊对象,譬如Object,List等,需要做什么处理?
    要加上@ResponseBody注解。

  4. Springmvc 中对于文件的上传有哪些需要注意
    在页面form中提交enctype="multipart/form-data"的数据时,需要springmvc对multipart类型的数据进行解析。
    在springmvc.xml中配置multipart类型解析器。
    方法中使用:MultipartFile attach (单个文件上传) 或者 MultipartFile[] attachs (多个文件上传)

  5. Springmvc 中拦截器如何使用
    定义拦截器,实现HandlerInterceptor接口。接口中提供三个方法。
    preHandle :进入 Handler方法之前执行,用于身份认证、身份授权,比如身份认证,如果认证通过表示当前用户没有登陆,需要此方法拦截不再向下执行
    postHandle:进入Handler方法之后,返回modelAndView之前执行,应用场景从modelAndView出发:将公用的模型数据(比如菜单导航)在这里传到视图,也可以在这里统一指定视图
    afterCompletion:执行Handler完成执行此方法,应用场景:统一异常处理,统一日志处理
    拦截器配置:
    针对HandlerMapping配置(不推荐):springmvc拦截器针对HandlerMapping进行拦截设置,如果在某个HandlerMapping中配置拦截,经过该 HandlerMapping映射成功的handler最终使用该 拦截器。(一般不推荐使用)
    类似全局的拦截器:springmvc配置类似全局的拦截器,springmvc框架将配置的类似全局的拦截器注入到每个HandlerMapping中

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,874评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,102评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,676评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,911评论 1 290
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,937评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,935评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,860评论 3 416
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,660评论 0 271
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,113评论 1 308
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,363评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,506评论 1 346
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,238评论 5 341
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,861评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,486评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,674评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,513评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,426评论 2 352

推荐阅读更多精彩内容

  • 1.Spring背景 1.1.Spring四大原则: 使用POJO进行轻量级和最侵入式开发; 通过依赖注入和基于借...
    嗷大彬彬阅读 787评论 0 2
  • MVC设计思想: 基于java的web 应用系统采用的mvc架构模式,即model(模型),view(视图),co...
    刘小刀tina阅读 629评论 0 1
  • 前言 Spring MVC框架是一个MVC框架,通过实现Model-View-Controller模式来很好地将数...
    niaoge2016阅读 2,626评论 0 1
  • SpringMVC介绍 Spring web mvc 和Struts2都属于表现层的框架,它是Spring框架的一...
    day_Sunny阅读 748评论 0 0
  • 对于java中的思考的方向,1必须要看前端的页面,对于前端的页面基本的逻辑,如果能理解最好,不理解也要知道几点。 ...
    神尤鲁道夫阅读 812评论 0 0