SpringMVC相關的面試題


1.什么是springMVC

  springmvc是spirng框架的一個模塊,是一個基於MVC框架的web框架

2.springmvc的流程

  a.客戶端發送請求

  b.前端控制器DispatcherServlet 接收請求,並調用處理映射器HandlerMapping(可以根據xml配置、注解進行查找)

  c.處理映射器找到具體的處理器進行處理,生成處理器對象Handler以及處理攔截器HandlerInterceptor(如果有則生成)返回到前端控制器

  d.DispatcherServlet 調用處理適配器HandlerAdapter

  e.處理適配器通過調用具體的處理器,處理器執行后生成ModelAndView,返回給處理適配器ModelAndView對象

  f.處理適配器向DispatcherServlet 返回ModelAndView (ModelAndView是springmvc框架的一個底層對象,包括 Model和view)

  g.DispatcherServlet 將ModelAndView 傳遞給視圖解析器 ViewReslover

  h.視圖解析器解析后返回具體的view(根據邏輯視圖名解析成真正的視圖(jsp)

  i.DispatcherServlet 根據View進行渲染視圖(視圖渲染將模型數據(在ModelAndView對象中)填充到request域)。 

  j.前端控制器向用戶響應結果

3.如何解決POST請求中文亂碼問題,GET的又如何處理呢?

1、針對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");

2、針對Get方式的亂碼問題,

由於參數是通過URL傳遞的,所以上面通過request設置的編碼格式是不起作用的,

此時可以在每次發生請求之前對URL進行編碼:例如:Location.href="/encodeURI"("http://localhost/test/s?name=中文&sex=女");

當然也有更簡便的方法,那就是在服務器端配置URL編碼格式

修改tomcat的配置文件server.xml:
             <ConnectorURIEncoding="UTF-8" 
                 port="8080"   maxHttpHeaderSize="8192"
               maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
               connectionTimeout="20000" disableUploadTimeout="true" />

只需增加 URIEncoding="UTF-8"  這一句,然后重啟tomcat即可。

 4.SpringMVC與Struts2的主要區別?

 
1.springmvc的入口是一個servlet即前端控制器,而struts2入口是一個filter過濾器
2.springmvc是基於方法開發,傳遞參數是通過方法形參,可以設計為單例或多例(建議單例),
   struts2是基於類開發,傳遞參數是通過類的屬性,只能設計為多例。 
3.Struts采用值棧存儲請求和響應的數據,通過OGNL存取數據
  springmvc通過參數解析器是將request對象內容進行解析成方法形參,將響應數據和頁面封裝成ModelAndView對象,
最后又將模型數據通過request對象傳輸到頁面。 Jsp視圖解析器默認使用jstl。
4.性能上Struts1>SpringMvc>Struts2 開發速度上SpringMvc和Struts2差不多,比Struts1要高
 
5.SpringMvc的控制器是不是單例模式,如果是,有什么問題,怎么解決

是單例模式,所以在多線程訪問的時候有線程安全問題,不要用同步,會影響性能的,解決方案是在控制器里面不能寫字段

6.SpringMVC怎么樣設定重定向和轉發的

在返回值前面加"forward:"就可以讓結果轉發,譬如"forward:user.do?name=method4"

在返回值前面加"redirect:"就可以讓返回值重定向,譬如"redirect:http://www.baidu.com"

7.SpingMvc中的控制器的注解一般用那個,有沒有別的注解可以替代

一般用@Conntroller注解,表示是表現層,不能用用別的注解代替.

8.springMVC常用注解標簽詳情
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM