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
[html]  view plain  copy
  1. <span style="color:#000000;"><?xml version="1.0" encoding="UTF-8"?>  
  2. <web-app version="3.0"   
  3.     xmlns="http://java.sun.com/xml/ns/javaee"   
  4.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"   
  5.     xsi:schemaLocation="http://java.sun.com/xml/ns/javaee   
  6.     http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">  
  7.   <display-name></display-name>   
  8.   <!-- 架构一个Spring,需要配置一个监听器,配置文件位置及名称若想自己取,则需配置ContextConfigLocation参数 -->  
  9.   <context-param>  
  10.     <param-name>contextConfigLocation</param-name>  
  11.     <param-value>  
  12.         classpath:beans.xml  
  13.     </param-value>  
  14.   </context-param>  
  15.   <listener>  
  16.     <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>  
  17.   </listener>  
  18.     
  19.   <!-- 架SpringMVC还需再配一个DispatcherServlet -->  
  20.   <servlet>  
  21.     <servlet-name>hncu</servlet-name>  
  22.     <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>  
  23.     <!-- 读取类似struts框架的配置文件struts.xml,该配置文件在springmvc的默认命名规则为:servlet的名字+" -servlet.xml "   
  24.         如想自己制定springmvc的配置文件,则应进行以下配置:  
  25.     -->  
  26.     <init-param>  
  27.         <param-name>namespace</param-name>  
  28.         <param-value>hncu-servlet</param-value>  
  29.     </init-param>  
  30.       
  31.     <!-- 项目一启动就加载SpringMVC的分发器 -->  
  32.     <load-on-startup>1</load-on-startup>  
  33.   </servlet>  
  34.   <servlet-mapping>  
  35.     <servlet-name>hncu</servlet-name>  
  36.     <url-pattern>/sp/*</url-pattern>  
  37.   </servlet-mapping>  
  38.   <welcome-file-list>  
  39.     <welcome-file>index.jsp</welcome-file>  
  40.   </welcome-file-list>  
  41. </web-app>  
  42. </span>  

 
进入servlet后会读取配置文件hncu-servlet.xml
[html]  view plain  copy
  1. <span style="color:#000000;"><?xml version="1.0" encoding="UTF-8"?>  
  2. <beans xmlns="http://www.springframework.org/schema/beans"  
  3.         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
  4.         xmlns:context="http://www.springframework.org/schema/context"  
  5.         xmlns:tx="http://www.springframework.org/schema/tx"  
  6.         xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.3.xsd  
  7.                 http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd  
  8.                 http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.3.xsd">  
  9.     <!-- controller 的bean 可以用id或name标识,但id不能用"/",而name可以("/hello"标明访问路径) -->  
  10.     <bean name="/hello" class="cn.hncu.one.HelloWorldController"></bean>  
  11.     <!-- 为了把前段的url请求转换成访问对应的bean,要配如下这个类() spring4以后则可省略-->  
  12.     <bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"></bean>  
  13.       
  14.     <!-- 以转发形式显示的view必须配置下面这个的类以进行解析 -->  
  15.     <bean class="org.springframework.web.servlet.view.ResourceBundleViewResolver">  
  16.         <property name="basenames">  
  17.             <list>  
  18.                 <value>hncu</value><!-- 资源配置文件在classpath下:hncu.properties -->  
  19.             </list>  
  20.         </property>  
  21.         <property name="defaultParentView" value="hncu"></property><!-- 配置默认父View -->  
  22.     </bean>  
  23.       
  24.     <!-- 配置方法动态调用核心类 -->  
  25.     <bean id="MethodResolver" class="org.springframework.web.servlet.mvc.multiaction.ParameterMethodNameResolver">  
  26.         <!-- 默认执行的方法名 -->  
  27.         <property name="defaultMethodName" value="execute"></property>  
  28.         <property name="paramName" value="method"></property>  
  29.     </bean>  
  30.     <!-- 第2个Controller,演示多方法动态调用核心类 -->  
  31.     <bean name="/muliti" class="cn.hncu.one.MulitiMethodController">  
  32.         <property name="methodNameResolver" ref="MethodResolver"></property>  
  33.     </bean>  
  34.       
  35. </beans></span>  

第一个controller-----HelloWorldController.java    访问方式:
[java]  view plain  copy
  1. <span style="color:#000000;">package cn.hncu.one;  
  2.   
  3. import javax.servlet.http.HttpServletRequest;  
  4. import javax.servlet.http.HttpServletResponse;  
  5.   
  6. import org.springframework.web.servlet.ModelAndView;  
  7. import org.springframework.web.servlet.View;  
  8. import org.springframework.web.servlet.mvc.Controller;  
  9. import org.springframework.web.servlet.view.RedirectView;  
  10.   
  11. //springmvc中的控制器要实现Controller接口,类似struts的action要实现Action接口一样  
  12. public class HelloWorldController implements Controller{  
  13. /*  版本1 
  14.     @Override 
  15.     public ModelAndView handleRequest(HttpServletRequest request, 
  16.             HttpServletResponse response) throws Exception { 
  17.         System.out.println("Hello  Contorller......"); 
  18.         return null;//没有导向结果页面 
  19.     } 
  20. */  
  21. /*  版本2导向一个重定向的结果页面 
  22.     @Override 
  23.     public ModelAndView handleRequest(HttpServletRequest request, 
  24.             HttpServletResponse response) throws Exception { 
  25.         System.out.println("Hello  Contorller......RedirectView"); 
  26.          
  27.         //让控制器返回一个 重定向view 
  28.         View view=new RedirectView("/jsps/hello.jsp",true);//参数true表示访问时带项目名 
  29.         ModelAndView mv=new ModelAndView();//空参 
  30.         mv.setView(view); 
  31.         return mv; 
  32.     } 
  33. */  
  34.     //版本3 导向一个转发的结果页面-----需要在配置文件中加载ResourceBundleViewResolver类  
  35.     @Override  
  36.     public ModelAndView handleRequest(HttpServletRequest request,  
  37.             HttpServletResponse response) throws Exception {  
  38.         System.out.println("Hello  Contorller.....转发 ");  
  39.         //让我们的控制器返回一个 转发View  
  40.         ModelAndView mv=new ModelAndView("send","name","我的大城院");//导向 send 所对应的资源视图,并且封装参数:name="我的大城院"  
  41.         return mv;  
  42.     }  
  43. }  
  44. </span>  

 

 

方法动态调用核心类需要一个properties的配置文件
[plain]  view plain  copy
  1. <span style="color:#000000;">hncu.(class)=org.springframework.web.servlet.view.JstlView  
  2. hncu.url=/jsps/hello.jsp  
  3. send.url=/jsps/one.jsp  
  4. one.url=/jsps/one.jsp  
  5. two.url=/jsps/two.jsp  
  6. three.url=/jsps/three.jsp  
  7. four.url=/jsps/four.jsp</span>  

MulitiMethodController.java
[java]  view plain  copy
  1. <span style="color:#000000;">package cn.hncu.one;  
  2.   
  3. import javax.servlet.http.HttpServletRequest;  
  4. import javax.servlet.http.HttpServletResponse;  
  5.   
  6. import org.springframework.web.servlet.ModelAndView;  
  7. import org.springframework.web.servlet.mvc.multiaction.MultiActionController;  
  8.   
  9. import cn.hncu.domain.User;  
  10.   
  11. public class MulitiMethodController extends MultiActionController{  
  12.     //反模式:这种不带req和resp两个参数的方法不能被访问(要求至少要两个参数,多个也可以)  
  13.     public void one(){  
  14.         System.out.println("该方法访问不到.......");  
  15.     }  
  16.     public String execute(HttpServletRequest req,HttpServletResponse resp){  
  17.         System.out.println("这是一个默认方法,可以被访问到。。。。");  
  18.         return "one";  
  19.     }  
  20.     public String two(HttpServletRequest req,HttpServletResponse resp){  
  21.         System.out.println("two这个方法,可以被访问到。。。。");  
  22.         return "two";  
  23.     }  
  24.     public ModelAndView three(HttpServletRequest req,HttpServletResponse resp){  
  25.         System.out.println("three这个方法,可以被访问到。。。。");  
  26.         String name =req.getParameter("name");  
  27.         return new ModelAndView("three""name", name);  
  28.     }  
  29.     //学习如何封装复杂数据  
  30.     public ModelAndView four(HttpServletRequest req,HttpServletResponse resp,User user){  
  31.         System.out.println("four这个方法,可以被访问到。。。。");  
  32.         ModelAndView mv=new ModelAndView();  
  33.         mv.setViewName("four");  
  34.         mv.addObject(user);  
  35.         return mv;  
  36.     }  
  37. }  
  38. </span>  

 

方法名为"four"的访问路径为:http://localhost:8080/canSpringmvc/sp/muliti?method=four&name=Tom&age=21   Spring会帮我们封装对象

 

User.java值对象
[java]  view plain  copy
  1. <span style="color:#000000;">package cn.hncu.domain;  
  2.   
  3. public class User {  
  4.     private String name;  
  5.     private Integer age;  
  6.     public String getName() {  
  7.         return name;  
  8.     }  
  9.     public void setName(String name) {  
  10.         this.name = name;  
  11.     }  
  12.     public Integer getAge() {  
  13.         return age;  
  14.     }  
  15.     public void setAge(Integer age) {  
  16.         this.age = age;  
  17.     }  
  18.     @Override  
  19.     public String toString() {  
  20.         return "User [name=" + name + ", age=" + age + "]";  
  21.     }  
  22.       
  23. }  
  24. </span>  
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值