1. 程式人生 > >SpringMVC幾個核心類(控制器核心類,載入配置檔案核心類,處理url影射核心類,處理檢視資源核心類,方法動態呼叫核心類)

SpringMVC幾個核心類(控制器核心類,載入配置檔案核心類,處理url影射核心類,處理檢視資源核心類,方法動態呼叫核心類)

核心類

制器核心類: •org.springframework.web.servlet.DispatcherServlet  - 配置web.xml 載入配置檔案核心類: •org.springframework.web.context.ContextLoaderListener – spring的配置檔案 處理url影射核心類: •org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping-根據bean的名稱請求一個bean. spring的配置檔案- /abc 處理檢視資源核心類: •org.springframework.web.servlet.view.ResourceBundleViewResolver
•return hello – 決定返回的字串由哪一個頁面來顯示。 •<context:component-scan package=“cn.hncu”/>用於替代上面的類。 方法動態呼叫核心類 •org.springframework.web.servlet.mvc.multiaction.ParameterMethodNameResolver 用Spring處理Web請求-Spring的MVC DispatcherServlet是SpringMVC的核心類,它就是一個Servlet.此類預設讀取WEB-INF/[servlet-name]-servlet.xml配置檔案。
重要說明:DispatcherServlet可以多次配置到web.xml中,它們將會讀取自己的配置檔案,但不會共享Bean.如果希望設定一些共享的Bean應該配置ContextLoaderListener來讀取Spring的配置檔案。

canSpringmvc

web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.0" 
	xmlns="http://java.sun.com/xml/ns/javaee" 
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
	http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
  <display-name></display-name>	
  <!-- 架構一個Spring,需要配置一個監聽器,配置檔案位置及名稱若想自己取,則需配置ContextConfigLocation引數 -->
  <context-param>
  	<param-name>contextConfigLocation</param-name>
  	<param-value>
  		classpath:beans.xml
  	</param-value>
  </context-param>
  <listener>
  	<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
  </listener>
  
  <!-- 架SpringMVC還需再配一個DispatcherServlet -->
  <servlet>
  	<servlet-name>hncu</servlet-name>
  	<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
  	<!-- 讀取類似struts框架的配置檔案struts.xml,該配置檔案在springmvc的預設命名規則為:servlet的名字+" -servlet.xml " 
  		如想自己制定springmvc的配置檔案,則應進行以下配置:
  	-->
  	<init-param>
  		<param-name>namespace</param-name>
  		<param-value>hncu-servlet</param-value>
  	</init-param>
  	
  	<!-- 專案一啟動就載入SpringMVC的分發器 -->
  	<load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
  	<servlet-name>hncu</servlet-name>
  	<url-pattern>/sp/*</url-pattern>
  </servlet-mapping>
  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>
</web-app>
進入servlet後會讀取配置檔案hncu-servlet.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
		xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
		xmlns:context="http://www.springframework.org/schema/context"
		xmlns:tx="http://www.springframework.org/schema/tx"
		xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.3.xsd
				http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd
				http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.3.xsd">
	<!-- controller 的bean 可以用id或name標識,但id不能用"/",而name可以("/hello"標明訪問路徑) -->
	<bean name="/hello" class="cn.hncu.one.HelloWorldController"></bean>
	<!-- 為了把前段的url請求轉換成訪問對應的bean,要配如下這個類() spring4以後則可省略-->
	<bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"></bean>
	
	<!-- 以轉發形式顯示的view必須配置下面這個的類以進行解析 -->
	<bean class="org.springframework.web.servlet.view.ResourceBundleViewResolver">
		<property name="basenames">
			<list>
				<value>hncu</value><!-- 資源配置檔案在classpath下:hncu.properties -->
			</list>
		</property>
		<property name="defaultParentView" value="hncu"></property><!-- 配置預設父View -->
	</bean>
	
	<!-- 配置方法動態呼叫核心類 -->
	<bean id="MethodResolver" class="org.springframework.web.servlet.mvc.multiaction.ParameterMethodNameResolver">
		<!-- 預設執行的方法名 -->
		<property name="defaultMethodName" value="execute"></property>
		<property name="paramName" value="method"></property>
	</bean>
	<!-- 第2個Controller,演示多方法動態呼叫核心類 -->
	<bean name="/muliti" class="cn.hncu.one.MulitiMethodController">
		<property name="methodNameResolver" ref="MethodResolver"></property>
	</bean>
	
</beans>

第一個controller-----HelloWorldController.java    訪問方式:
package cn.hncu.one;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.View;
import org.springframework.web.servlet.mvc.Controller;
import org.springframework.web.servlet.view.RedirectView;

//springmvc中的控制器要實現Controller介面,類似struts的action要實現Action介面一樣
public class HelloWorldController implements Controller{
/*	版本1
	@Override
	public ModelAndView handleRequest(HttpServletRequest request,
			HttpServletResponse response) throws Exception {
		System.out.println("Hello  Contorller......");
		return null;//沒有導向結果頁面
	}
*/
/*	版本2導向一個重定向的結果頁面
	@Override
	public ModelAndView handleRequest(HttpServletRequest request,
			HttpServletResponse response) throws Exception {
		System.out.println("Hello  Contorller......RedirectView");
		
		//讓控制器返回一個 重定向view
		View view=new RedirectView("/jsps/hello.jsp",true);//引數true表示訪問時帶專案名
		ModelAndView mv=new ModelAndView();//空參
		mv.setView(view);
		return mv;
	}
*/
	//版本3 導向一個轉發的結果頁面-----需要在配置檔案中載入ResourceBundleViewResolver類
	@Override
	public ModelAndView handleRequest(HttpServletRequest request,
			HttpServletResponse response) throws Exception {
		System.out.println("Hello  Contorller.....轉發 ");
		//讓我們的控制器返回一個 轉發View
		ModelAndView mv=new ModelAndView("send","name","我的大城院");//導向 send 所對應的資源檢視,並且封裝引數:name="我的大城院"
		return mv;
	}
}

方法動態呼叫核心類需要一個properties的配置檔案
hncu.(class)=org.springframework.web.servlet.view.JstlView
hncu.url=/jsps/hello.jsp
send.url=/jsps/one.jsp
one.url=/jsps/one.jsp
two.url=/jsps/two.jsp
three.url=/jsps/three.jsp
four.url=/jsps/four.jsp

MulitiMethodController.java
package cn.hncu.one;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.multiaction.MultiActionController;

import cn.hncu.domain.User;

public class MulitiMethodController extends MultiActionController{
	//反模式:這種不帶req和resp兩個引數的方法不能被訪問(要求至少要兩個引數,多個也可以)
	public void one(){
		System.out.println("該方法訪問不到.......");
	}
	public String execute(HttpServletRequest req,HttpServletResponse resp){
		System.out.println("這是一個預設方法,可以被訪問到。。。。");
		return "one";
	}
	public String two(HttpServletRequest req,HttpServletResponse resp){
		System.out.println("two這個方法,可以被訪問到。。。。");
		return "two";
	}
	public ModelAndView three(HttpServletRequest req,HttpServletResponse resp){
		System.out.println("three這個方法,可以被訪問到。。。。");
		String name =req.getParameter("name");
		return new ModelAndView("three", "name", name);
	}
	//學習如何封裝複雜資料
	public ModelAndView four(HttpServletRequest req,HttpServletResponse resp,User user){
		System.out.println("four這個方法,可以被訪問到。。。。");
		ModelAndView mv=new ModelAndView();
		mv.setViewName("four");
		mv.addObject(user);
		return mv;
	}
}

User.java值物件
package cn.hncu.domain;

public class User {
	private String name;
	private Integer age;
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public Integer getAge() {
		return age;
	}
	public void setAge(Integer age) {
		this.age = age;
	}
	@Override
	public String toString() {
		return "User [name=" + name + ", age=" + age + "]";
	}
	
}

還有幾個jsp頁面,沒有什麼內容,主要是供顯示用一下,這裡不再貼了。

相關推薦

SpringMVC核心(控制器核心,載入配置檔案核心,處理url影射核心,處理檢視資源核心,方法動態呼叫核心)

核心類 制器核心類: •org.springframework.web.servlet.DispatcherServlet  - 配置web.xml 載入配置檔案核心類: •org.springfr

【轉載】Spark學習——spark中的概念的理解及參數配置

program submit man 聯眾 tail 進行 orb 數據源 work 首先是一張Spark的部署圖: 節點類型有: 1. master 節點: 常駐master進程,負責管理全部worker節點。2. worker 節點: 常駐worker進程,負責管理

springboot按profile載入配置檔案放入靜態

import java.util.HashMap; import java.util.Map; import java.util.Properties; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.spri

重寫父方法,重寫父方法呼叫方法

class Animal: def eat(self): print("-----吃-----") def drink(self): print("-----喝-----") class Dog(Animal): def bark(self): print("-----汪汪

【Config】庫讀取自己的配置檔案配置檔案的擴充套件

    我們在專案中一般都是使用統一的專案檔案配置,所有的配置和自定義的欄位都寫在一個web.config或者App.config檔案中。一般平時我們也沒有發現問題,確實這麼寫沒有問題,但是就是如果寫的多了就看著很臃腫。 並且假如你其他地方不是主專案的配置也寫在這裡,多了是不是很亂,有時候自己都不知道這個是

繼承:在子構造方法呼叫的構造方法

  abstract class Pet { private String name; private String sex; public Pet(String name,String sex) { this.nam

內的方法呼叫之間的方法呼叫

A類 {        a公開方法 {        b()√        c()√ }        b私有

路徑讀取(載入)配置檔案

載入資原始檔時路徑問題 案例1:        不管是java專案還是web專案,用類路徑讀取配置檔案通用性大,移植性好。如下: InputStream in =JdbcUtil.cla

SpringMVC之一簡單的helloworld專案(從配置資訊到請求處理

首先:建立專案,在使用SpringMVC之前,我們照例需要先匯入springframework的jar包:除了上述的二十個jar包之外,我們還需要一個名為一個如下的jar包:如果不新增這個jar包,執行專案則會出現java.lang.NoClassDefFoundError:

idea的好用快捷鍵、常用配置(包括git)、jdk和javaSE和javaEE、建立一個SE工程、debug、建立一個Web工程、打war包

幾個好用的快捷鍵 Ctrl+F12,可以顯示當前檔案的結構樹 Ctrl+H ,顯示繼承關係樹 Ctrl+E,最近的檔案 Ctrl+Alt+T,可以把程式碼包在一個塊內,例如:try/catch Alt+Insert,可以生成構造器/Getter/Setter等 Ctrl+Alt+V,可以

使用Properties讀取專案外的配置檔案

最近公司要在一套伺服器上搭建兩個環境,為了節約成本,用到了阿里的docker,運維主管建議我們將配置檔案分離出來,基本可以結束上線即通宵的生活了。 這裡是工具類,有用到的大兄弟可以根據自己的需求改一下。 import org.apache.commons.c

繼承父,重寫父方法,運用多型時呼叫重寫的方法呼叫的還是呼叫的?

package 第五天; public class Person { public void say() { System.out.println("我是Person的say方法"); } } 子類Student如下: package 第五天; publ

Spring通過方法載入配置檔案

通過呼叫某個類中的方法通過流的方式獲取到配置檔案 public static Properties getRedisResourcePath(){ String filePath = Confi

Java Properties載入配置檔案轉義問題

場景: 配置檔案config.properties 配置項cfg.regexp=\d+\t 載入配置檔案程式碼 InputStream ins = PropManager.class.getResourceAsStream("/config.prope

利用C#的反射機制動態呼叫DLL

1、使用Assembly類定義和載入程式集,載入在程式集清單中列出模組,以及從此程式集中查詢型別並建立該型別的例項。 2、使用MethodInfo瞭解方法的名稱、返回型別、引數、訪問修飾符(如pulic 或private)和實現詳細資訊(如abstract或virtual)

springMVC-spring-Hibernate 開發學生管理系統簡單案例-配置檔案說明(三)

三、配置檔案說明 原始檔:https://download.csdn.net/download/flyingshadower/10628472 (1)在pom.xml寫入需要的各類依賴,自動下載依賴包。 <?xml version="1.0" encoding="UTF-8"?&g

Spring+SpringMVC重複載入配置檔案問題

sping+springmvc的框架中,IOC容器的載入過程 http://my.oschina.net/xianggao/blog/596476 基本上是先載入ContextLoaderListener,然後生成一個ioc容器。 然後再例項化DispatchServlet

Spring+SpringMVC+MyBatis深入學習及搭建(三)——MyBatis全域性配置檔案解析

MyBatis的全域性配置檔案SqlMapConfig.xml,配置內容和順序如下: properties(屬性) setting(全域性配置引數) typeAliases(類名別名) typeHandlers(類名處理器) objectFactory(物件工廠) plugins(外掛) environm

8G記憶體 eclipse的eclipse.ini配置檔案設定

-vm D:/soft/jdk1.7.0_79/jre/bin -startup plugins/org.eclipse.equinox.launcher_1.3.100.v20150511-1540.jar --launcher.library plugins/org.ec

(四)activiti的核心

先來一張圖: 在前幾篇文章匯中已經整合好了activiti,最後我們獲取到的是activiti對外提供的7個核心服務,所有針對activiti的操作都是使用這7個核心服務來執行的。這7個服務中有些