spring MVC詳解,springmvc詳解

來源:互聯網
上載者:User

spring MVC詳解,springmvc詳解
1:Spring中的核心類:
DispathcerServlet -  對應的就是 PreparedAndExecuteFilter

Controller     -    Action (介面) <action name=”xxx”/>
<reslut name=”success”>/aaa.jsp</result>
MultiActionController    - ActionSupport

   HandlerInterceptor        Interceptor

   HandlerMapping  - 映射請求的url

ViewResolver – 處理處理完成以後,決定顯示哪一個頁面。

2:快速入門

第一步:建立一個web項目,導spring包
 
第二步:在web.xml中配置核心Servlet - DispatcherSerlvet
DispatcherSerlvet – 
<servlet>
<servlet-name>kunx</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!-- 可選的配置一個初始化參數,設定初始時讀取的設定檔,
預設的讀取的:web-inf:/<serlvet-name>-servlet.xml
-->
<init-param>
<param-name>namespace</param-name>
<param-value>spring-servlet</param-value> 
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>kunx</servlet-name>
<!-- 所有以spring/*url都會訪問DispatcherSevlet -->
<url-pattern>/spring/*</url-pattern>
</servlet-mapping>


第三步:在web-inf目錄下建立一個spring-sevlet.xml
(略)

第四步:配置HandlerMapping
作用就是用來解析url的,哪一個url對應哪一個Action。
 
配置SimpleUrlHandlerMapping:
<bean id="handlerMapping"
 class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
<!-- 哪一個url對應哪一個Action(Controller) -->
<property name="mappings">
<props>
<!-- key是指url,http://local:8080/spring1/spring/one -->
<prop key="/one">oneAction</prop>
</props>
</property>
</bean>

第五步:實現一個Controller
建立一個類:
public class OneAction implements Controller{
public Model AndView  handleRequest(HttpServletRequest request,
HttpServletResponse response) throws Exception {
System.err.println("Hello這是第一個測試。。。。");
return null;
}
}

將上面的類在spring-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"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd">
<!-- 配置url映射 
id是可以省略
-->
<bean id="handlerMapping"
 class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
<!-- 哪一個url對應哪一個Action(Controller) -->

</bean>

<!-- 配置自己的第一個Action -->
<bean id="oneAction" class="cn.kunx.actions.OneAction"/>
</beans>

第六步:設定ViewResolver – 解析訪問Action成功以後返回到哪一個頁面
 
InternalResourceViewResolver
根據一個路徑,確定一個資源的名稱:
<!-- 配置解析視圖資源的解析器 -->
<bean id="viewResolver" 
class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<!-- 頁面的路徑首碼 -->
<property name="prefix" value="/WEB-INF/jsps/"></property>
<property name="suffix" value=".jsp"></property>
</bean>

總結:
DispatcherServlet – web.xml
Handlermapping – SimpleUrlHandlerMapping – beans.xml
ViewResolver – InternalResourceViewResolver – beanx.xml
我們自己的Action(Controller)

3、ModelAndView封裝資料
功能:1:通過一個[字串,轉到某個特定的頁面。new ModelAndView("succ"); - /WEB-INF/jsps/succ.jsp
2:向request中封裝資料。
Map<String,Object> mm = new HashMap<String, Object>();
mm.put("name","Jack");//req.setAttributre(name,jack);
mm.put("addr", "中國北京");

//request.setAttribute("name", "jack");
ModelAndView mv = new ModelAndView("succ","mm",mm);

4、動態方法引動過程 
http://localhost:8080/project/some!one.action
<action name=”some!*” method=”${1}” class=”xxxx”>
</action>

自己實現的Controller類,必須要繼承MultiActionController
第一步:繼承了MultiActionController的類可以是以下方法:
public (ModelAndView | Map | String | void)  actionName(HttpServletRequest request, HttpServletResponse response, [,HttpSession] [,AnyObject] );

第二步:Spring通過一個類解析方法:
MethodNameResolver - 
 
用ParamenterMethodNameResolver – 在ur後面的參數,決定了執行某個方法:

第三步:建立一個類實現MultiActionController


public class TwoAction extends MultiActionController {
//沒有返回值,也會指向一個頁面
public void abc(HttpServletRequest req,HttpServletResponse resp){
System.err.println("abc...."+req);
}

public String a2(HttpServletRequest req,HttpServletResponse resp,
  HttpSession s){
System.err.println("A2......"+req);
return "succ";
}

public String a3(HttpServletRequest req,HttpServletResponse resp,
  HttpSession s,User u){
System.err.println("a3...."+u);
return "succ";
}
}
第四步:配置方法動態解析類
MethodNameResolver
<!-- 配置方法名解析 -->
<bean id="methodResolver" class="org.springframework.web.servlet.mvc.multiaction.ParameterMethodNameResolver">
<property name="defaultMethodName" value="execute "></property>
<!-- ?cmd=xxxx -->
<property name="paramName" value="cmd"> </property>
</bean>
第五步:在spring-servlet.xml中配置twoAction
<bean id="twoAction" class="cn.kunx.actions.TwoAction">
<!-- 注入方法解析器 -->
<property name="methodNameResolver" ref="methodResolver"></property> 
</bean>

第六步:在handlermapping中配置twoAction
<bean 
 class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
<!-- 哪一個url對應哪一個Action(Controller) -->
<property name="mappings">
<props>
<!-- key是指url,http://local:8080/spring1/spring/one -->
<prop key="/one">oneAction</prop>
<prop key="/two">twoAction</prop> 
</props>
</property>
</bean>

5、深入研究轉寄處理器-HandlerMapping
<bean 
 class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
<!-- 哪一個url對應哪一個Action(Controller) -->
<property name="mappings ">
<props>
<!-- key是指url,http://local:8080/spring1/spring/one -->
<prop key="/one ">oneAction </prop>
<prop key="/two">twoAction</prop>
</props>
</property>
<property name="urlMap"> 
<map>
<entry key="/a" value-ref="oneAction"/>
<entry key="/b" value-ref="twoAction"/>
</map>
</property>
</bean>

6、BeanNameUrlHandlerMapping
根據bean的name屬性,決定執行哪一個Controller。
<bean name=”/abc” class=”someController”/>

http://loclahost:8080/project/spring/abc

載入多個設定檔:建議使用ContextLoaderListener實現:
<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>

第一步:在建立一個新的beans.xml
   
<bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping">
</bean>

第二步:書寫一個Controller
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.multiaction.MultiActionController;
public class ThreeAction extends MultiActionController{
public ModelAndView a1(HttpServletRequest request,
HttpServletResponse response) throws Exception {
System.err.println("Threee a1.....");
return new ModelAndView("succ");
}

public ModelAndView a2(HttpServletRequest request,
HttpServletResponse response) throws Exception {
System.err.println("Threee a2.....");
return new ModelAndView("succ");
}
}

第三步:配置name屬性
<bean name="/three" class="cn.kunx.actions.ThreeAction">
<property name="methodNameResolver" ref="methodResolver"></property>
</bean>
http://localhost:8080/project/spring/three?cmd=a1就可以訪問了;

7、用ResourceBundleViewResolver通過讀取一個資源檔,確定一個視圖頁面

第一步:在beans.xml中配置ResourceBundleViewResolver
<!-- 配置一個新的viewResolver -->
<bean class="org.springframework.web.servlet.view.ResourceBundleViewResolver">
<property name="basenames">
<array>
<value>views</value> 
</array>
</property>
</bean>


第二步:在classpath下建立一個views.properties
#設定一個預設的url,及處理類
default.(class)=org.springframework.web.servlet.view.JstlView
default.url=/jsps/a.jsp

page1.url=/jsps/b.jsp

7、最好的組合

第一步:
 
第二步:
在src目錄下,建立一個公用的設定檔:beans.xml
配置
BeanNameUrlHandlerMapping
ResourceBundlerViewResolver
ParameterMethodNameResolver
 
<bean id="viewResolver" class="org.springframework.web.servlet.view.ResourceBundleViewResolver">
<property name="basenames">
<list>
<value>views</value>
</list>
</property>
<property name=”defaultParentView” value=”kunx”/> 
</bean>
<bean id="handlerMapping" class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"/>
<bean id="methodNameResolver"
 class="org.springframework.web.servlet.mvc.multiaction.ParameterMethodNameResolver">
<property name="defaultMethodName" value="execute"/>
<!-- ?method=someMethod -->
<property name="paramName" value="method"></property>
</bean>


第三步:在web.xml中配置上面的base.xml
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
/WEB-INF/conf/base.xml, 
classpath:beans*.xml
</param-value>
</context-param>




第四步:建立views.properties
kunx.(class)=org.springframework.web.servlet.view.JstlView
kunx.url=/jsps/kunx.jsp

a.url=/jsps/a.jsp

b.(class)=org.springframework.web.servlet.view.RedirectView
b.contextRelative=true
b.url=/jsps/b.jsp

第五步:書寫自訂類
public class OneController extends MultiActionController{
public ModelAndView execute(HttpServletRequest request, 
HttpServletResponse response) throws Exception {
System.err.println("execute....");
return null;
}
public String a(HttpServletRequest request,
HttpServletResponse response){
System.err.println("aaaaaaaaaaaa");
return "a";
}
public String b(HttpServletRequest request,
HttpServletResponse response){
System.err.println("bbbbbbb");
return "b";
}
}

第六步:在beans.xml中配置
<bean name="/one" class="cn.kunx.controller.OneController">
<property name="methodNameResolver" ref="methodNameResolver"></property> 
</bean>

第七步:運行測試:
http://localhost:8080/project/spring/one?cmd=a
7、通過註解實現SpringMVC
   @Controller – 加在POJO上,讓一個類變成一個Controller。
   <context:component-scan packge=”xxx”/> -
@ReqeustMapping - 設定訪問的路徑
   @RequestParam - 參數
   @PathVariable – 在路徑中的參數 -RESTful – 靜態地址轉換。 - http:///project/person/Jack/90;
  









聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.