更新時間:2021-06-11 15:47:33 來源:動力節點 瀏覽1118次
SpringMVC默認就是以轉發的形式響應JSP,也就是說直接返回視圖名稱的方式就是轉發
重定向:需要使用redirect:+視圖路徑,當然也可以重定向到指定url再次進行處理,比如:redirect:/user/list
需要注意的是業務方法中,設置重定向不能像轉發一樣寫邏輯視圖,必須寫明目標資源的物理路徑,如"redirect:/index.jsp"
@RequestMapping("redirectTest")
public String redirectTest(){
return "redirect:/index.jsp";
}
中文亂碼配置
如果是get請求帶中文參數,后臺接收到亂碼,需要修改tomcat的配置(或者Maven項目中修改tomcat插件配置)
<!-- 1.tomcat 修改配置文件server.xml,添加URIEncoding -->
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" URIEncoding ="UTF-8"/>
<!-- Maven項目中修改tomcat插件編碼 -->
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.2</version>
<configuration>
<uriEncoding>UTF-8</uriEncoding>
</configuration>
</plugin>
如果請求中接收到參數沒有亂碼,但是返回json字符串時候亂碼了,可以添加produce解決
每個方法加produce解決未免過于麻煩,那么可以修改轉換器的編碼處理,這里處理String的轉換器為StringHttpMessageConverter,查看源碼發現默認的編碼是ISO-8859-1
所以在springmvc配置文件中統一修改
<!-- 注解驅動 -->
<mvc:annotation-driven>
<!-- 處理請求返回json字符串的中文亂碼問題 -->
<mvc:message-converters>
<bean class="org.springframework.http.converter.StringHttpMessageConverter">
<constructor-arg value="UTF-8" />
</bean>
</mvc:message-converters>
</mvc:annotation-driven>
針對POST表單提交,我們還需要配置過濾器進行統一編碼處理(最好都配上),該過濾器就是springmvc自帶CharacterEncodingFilter,查看源碼可知,配置forceEncoding將會強制使用這里配置的編碼,而不管請求響應有沒有設置編碼
<filter>
<filter-name>encodingFilter</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> <!--強制使用Encoding設置的編碼格式-->
<param-name>forceEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>encodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
加入Spring的配置
真正的應用肯定少不了Spring,所以這里將spring配置加上
<!-- spring應用上下文 -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/configs/spring/applicationContext*.xml</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
springmvc的上下文層級,理解層次化的ApplicationContext
帶小s的loaderlistener所加載形成的上下文,可以有多個,為我們提供了所有應用公共所使用的組件和服務,如sevice、dao,這些服務應該被整個應用所共享,而不應該被局限在某個dispatcherServlet上下文之中
不帶小s的,就是與我們的dispatcherServlet相關的上下文。dispatcherservlet可以有多個,因為在現在的互聯網中,一個應用可能需要提供多種服務,而讓dispatcherservlet針對不同的服務請求去分發。因為有些服務是完全不同于其他服務的,所以需要作區分,根據配置的url-pattern進行攔截。
spring配置文件
<context:component-scan base-package="com.rxy.mvcdemo">
<!-- 不需要管理controller -->
<context:exclude-filter type="annotation"
expression="org.springframework.stereotype.Controller" />
</context:component-scan>
<MVC:annotation-driven/>
該配置作用是注冊RequestMappingHandlerMapping與RequestMappingHandlerAdapter兩個Bean,這是Spring MVC為 Controller分發請求所必需的,并且提供了數據綁定支持, NumberFormatannotation支持, DateTimeFormat支持, Valid支持讀寫XML的支持(JAXB)和讀寫JSON的支持(默認Jackson)等功能
靜態資源映射
location:指location指定的目錄不要攔截,直接請求
mapping:指在static目錄下的所有文件(**代表所有文件)
cache-period:設置靜態資源在客戶端瀏覽器中的緩存有效時間
該配置意思就是在根目錄下static的所有文件不會被DispatcherServlet攔截,直接訪問,當做靜態資源交給Servlet處理
<!-- 靜態資源映射 -->
<mvc:resources mapping="/static/**" location="/static/" cache-period="31536000"/>
配置ViewResolver
可以配置多個ViewResolver。使用order屬性排序。InternalResourceViewResolver需要放在最后。
<bean
class="org.springframework.web.servlet.view.ContentNegotiatingViewResolver">
<property name="order" value="1" />
<property name="mediaTypes">
<map>
<entry key="json" value="application/json" />
<entry key="xml" value="application/xml" />
<entry key="htm" value="text/html" />
</map>
</property>
<property name="defaultViews">
<list>
<!-- JSON View -->
<bean
class="org.springframework.web.servlet.view.json.MappingJackson2JsonView">
</bean>
</list>
</property>
<property name="ignoreAcceptHeader" value="true" />
</bean>
<bean
class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="viewClass"
value="org.springframework.web.servlet.view.JstlView" />
<property name="prefix" value="/WEB-INF/jsps/" />
<property name="suffix" value=".jsp" />
</bean>
如果想在方法中直接使用HttpServletRequest
、HttpServletResponse
、HttpSession
等對象,需要引入servlet的依賴包
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.5</version>
<!-- 編譯測試有效,必須設置,否則運行tomcat容器會報錯 -->
<scope>provided</scope>
</dependency>
以上就是動力節點小編介紹的"配置SpringMVC的講解",希望對大家有幫助,如有疑問,請在線咨詢,有專業老師隨時為您服務。
0基礎 0學費 15天面授
有基礎 直達就業
業余時間 高薪轉行
工作1~3年,加薪神器
工作3~5年,晉升架構
提交申請后,顧問老師會電話與您溝通安排學習