SpringMVC 方法名稱解析器和視圖解析器
1,前端控制器DispatcherServlet(不需要程序員開發)
作用是接收請求,響應結果,相當于轉發器
2,處理器映射器HandlerMapping(不需要程序員開發)
作用:根據請求的url查找handler
3,處理器適配器HandleAdapter
作用:按照特定規則去執行Handler
注意:編寫Handler時要按照HandlerAdapter的要求去做 ,這樣適配器才可以去正確執行Handler
4,視圖解析器View resolver(不需要程序員開發)
作用:進行視圖解析,根據邏輯視圖名解析真正的視圖(view)
5、視圖View(需要程序員開發jsp)
View是一個接口,實現類型支持不同的view類型(jsp,freemarker,pdf,excel等)
6、處理器Handler(重點:需要程序員開發)
springmvc和struts2的區別:
1,springmvc是基于方法開發的,struts2是基于類開發的
2、springmvc可以支持單例開發(通過形參的方式接收數據,每個方法的形參都有自己的獨立的內存空間,多線程安全的),建議使用單例開發,方法結束,形參數據銷毀。struts2只能多例開發(通過成員變量來接收數據的傳遞,成員變量是共享的,多線程不安全的)。
3、經過實際測試,struts2速度慢,在于它使用了struts標簽,建議使用jstl
案例:
架構:
首先我們看一下web.xml
這里我們配置一個前端控制器,我們還有連接一個對應的xml,還有一個防止無法訪問靜態變量的節點。
<!DOCTYPE web-app PUBLIC
"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd" >
<web-app>
<display-name>Archetype Created Web Application</display-name>
<servlet>
<servlet-name>springmvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:springmvc03Mutil.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
<!--<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>*.jpg</url-pattern>
</servlet-mapping>-->
</web-app>
這里面我們繼承一個MultiActionController并寫出豐富doFirst 我們的返回值是ModelAndView
我們返回的是對應bean節點的id我們這個是連接的京東的網站。
然后我們配置一個contrllro層 用來編寫代碼
package cn.happy.springmvc03;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.Controller;
import org.springframework.web.servlet.mvc.multiaction.MultiActionController;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* Created by linlin on 2017/8/14.
*/
public class MutilController extends MultiActionController {
public ModelAndView doFirst(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws Exception {
ModelAndView mv=new ModelAndView();
mv.setViewName("jd");
return mv;
}
}
然后我們配置一下xml 我的這個是引用外部視圖 所有一會我在發一個引用的xml
這里面我們需要配置視圖解析器和方法名稱解析器,我們們在頁面上訪問的是
我們這里面的SimpleUrlHandlerMapping是別的測試,在這里我們不需要關注。
這里我們有引用視圖對象,引用我們下面的xml里面放的是視圖。
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd
http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd">
<!--圖片顯示-->
<!--<mvc:default-servlet-handler/>-->
<mvc:resources location="/img/" mapping="/img/**"></mvc:resources>
<bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
<property name="urlMap">
<map>
<entry key="/doFirst.do" value="MutilController"></entry>
</map>
</property>
</bean>
<!--視圖解析器-->
<!-- <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/"></property>
<property name="suffix" value=".jsp"></property>
</bean>-->
<!--引入視圖對象-->
<bean class="org.springframework.web.servlet.view.XmlViewResolver">
<property name="location" value="classpath:viewjd.xml"></property>
</bean>
<bean id="beanNameResout" class="org.springframework.web.servlet.view.BeanNameViewResolver"/>
<bean id="paramMehod" class="org.springframework.web.servlet.mvc.multiaction.PropertiesMethodNameResolver">
<property name="mappings">
<props>
<prop key="/first1.do">doFirst</prop>
</props>
</property>
</bean>
<bean id="paramMehod2" class="org.springframework.web.servlet.mvc.multiaction.ParameterMethodNameResolver">
<property name="paramName" value="actionName"></property>
</bean>
<bean id="MutilController" class="cn.happy.springmvc03.MutilController">
<property name="methodNameResolver" ref="paramMehod2"></property>
</bean>
</beans>
這里我們用的是ParameterMethodNameResolver這個類
里面的actionName是我們在頁面上的一個判斷,判斷他是不是我們用 的方法名 如果actionName=方法名,我們就會進入界面
外部xml,這里面的id是我們在contrllor里面的返回的set.ViewName("jd")
這里面一個是連我的項目內的頁面,一個是連接的京東的官網。
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<!--內部視圖-->
<bean id="internal" class="org.springframework.web.servlet.view.JstlView">
<property name="url" value="/WEB-INF/doFirst.jsp"></property>
</bean>
<!--外部視圖-->
<bean id="jd" class="org.springframework.web.servlet.view.RedirectView">
<property name="url" value="https://www.jd.com/"></property>
</bean>
</beans>
智能推薦
springmvc配置視圖解析器和重定向
為什么需要配置視圖解析器 看圖 配置步驟 第一步:需要在springmvc.xml配置 第二步:配置視圖解析器后的controller代碼 Controller方法返回字符串表示邏輯視圖名,通過視圖解析器解析為物理視圖地址。 此時默認的物理視圖地址為:視圖前綴+返回值+視圖后綴 解決配置視圖解析器帶來的問題 如果直接使用視圖解析器的配置開發,那么必須保證視圖解析器前綴目錄下面有對應的頁面文件才能跳...
SpringMVC MultiActionController 默認方法名解析器
MultiActionController默認方法名解析器 是指在請求的地址中加入指定方法名稱 MultiActionController類具有一個屬性methodNameResolver,方法名解析器:其具有默認值InternalPathMethodNameResolver,該解析器將方法名作為資源名稱進行解析,那就意味著,我們提交請求時,要將方法名作為資源名稱出現。 方法名解析器...
SpringMVC 視圖解析器及攔截器
視圖解析器 跳轉方式(設置返回值字符串內容) ①默認請求轉發 forward:資源路徑,forward可省略 ②重定向 redirect:資源路徑 自定義視圖解析器 SpringMVC會提供默認的視圖解析器: 可使用<bean>加載org.springframework.web.servlet.view.InternalResourceViewResolver 來自定義視圖解析器,默認...
【SpringMVC】6.SpringMVC的視圖和視圖解析器
注意!!! 此文章需要配置了SpringDispatcherServlet和InternalResourceViewResolver才能夠使用,如果不會配置,請翻看我【SpringMVC】系列的第一篇文章《【SpringMVC】1. SpringMVC的第一個程序——HelloWorld》。 一、視圖和視圖解析器 1.什么是視圖 視圖的作用是渲染模型數據,將模型里的數據以某...
猜你喜歡
freemarker + ItextRender 根據模板生成PDF文件
1. 制作模板 2. 獲取模板,并將所獲取的數據加載生成html文件 2. 生成PDF文件 其中由兩個地方需要注意,都是關于獲取文件路徑的問題,由于項目部署的時候是打包成jar包形式,所以在開發過程中時直接安照傳統的獲取方法沒有一點文件,但是當打包后部署,總是出錯。于是參考網上文章,先將文件讀出來到項目的臨時目錄下,然后再按正常方式加載該臨時文件; 還有一個問題至今沒有解決,就是關于生成PDF文件...
電腦空間不夠了?教你一個小秒招快速清理 Docker 占用的磁盤空間!
Docker 很占用空間,每當我們運行容器、拉取鏡像、部署應用、構建自己的鏡像時,我們的磁盤空間會被大量占用。 如果你也被這個問題所困擾,咱們就一起看一下 Docker 是如何使用磁盤空間的,以及如何回收。 docker 占用的空間可以通過下面的命令查看: TYPE 列出了docker 使用磁盤的 4 種類型: Images:所有鏡像占用的空間,包括拉取下來的鏡像,和本地構建的。 Con...
requests實現全自動PPT模板
http://www.1ppt.com/moban/ 可以免費的下載PPT模板,當然如果要人工一個個下,還是挺麻煩的,我們可以利用requests輕松下載 訪問這個主頁,我們可以看到下面的樣式 點每一個PPT模板的圖片,我們可以進入到詳細的信息頁面,翻到下面,我們可以看到對應的下載地址 點擊這個下載的按鈕,我們便可以下載對應的PPT壓縮包 那我們就開始做吧 首先,查看網頁的源代碼,我們可以看到每一...
Linux C系統編程-線程互斥鎖(四)
互斥鎖 互斥鎖也是屬于線程之間處理同步互斥方式,有上鎖/解鎖兩種狀態。 互斥鎖函數接口 1)初始化互斥鎖 pthread_mutex_init() man 3 pthread_mutex_init (找不到的情況下首先 sudo apt-get install glibc-doc sudo apt-get install manpages-posix-dev) 動態初始化 int pthread_...