核心类

制器核心类:
•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 plaincopy
  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. <!-- 架SpringMVC还需再配一个DispatcherServlet -->
  19. <servlet>
  20. <servlet-name>hncu</servlet-name>
  21. <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
  22. <!-- 读取类似struts框架的配置文件struts.xml,该配置文件在springmvc的默认命名规则为:servlet的名字+" -servlet.xml "
  23. 如想自己制定springmvc的配置文件,则应进行以下配置:
  24. -->
  25. <init-param>
  26. <param-name>namespace</param-name>
  27. <param-value>hncu-servlet</param-value>
  28. </init-param>
  29. <!-- 项目一启动就加载SpringMVC的分发器 -->
  30. <load-on-startup>1</load-on-startup>
  31. </servlet>
  32. <servlet-mapping>
  33. <servlet-name>hncu</servlet-name>
  34. <url-pattern>/sp/*</url-pattern>
  35. </servlet-mapping>
  36. <welcome-file-list>
  37. <welcome-file>index.jsp</welcome-file>
  38. </welcome-file-list>
  39. </web-app>
  40. </span>

 
进入servlet后会读取配置文件hncu-servlet.xml
[html] view plaincopy
  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. <!-- 以转发形式显示的view必须配置下面这个的类以进行解析 -->
  14. <bean class="org.springframework.web.servlet.view.ResourceBundleViewResolver">
  15. <property name="basenames">
  16. <list>
  17. <value>hncu</value><!-- 资源配置文件在classpath下:hncu.properties -->
  18. </list>
  19. </property>
  20. <property name="defaultParentView" value="hncu"></property><!-- 配置默认父View -->
  21. </bean>
  22. <!-- 配置方法动态调用核心类 -->
  23. <bean id="MethodResolver" class="org.springframework.web.servlet.mvc.multiaction.ParameterMethodNameResolver">
  24. <!-- 默认执行的方法名 -->
  25. <property name="defaultMethodName" value="execute"></property>
  26. <property name="paramName" value="method"></property>
  27. </bean>
  28. <!-- 第2个Controller,演示多方法动态调用核心类 -->
  29. <bean name="/muliti" class="cn.hncu.one.MulitiMethodController">
  30. <property name="methodNameResolver" ref="MethodResolver"></property>
  31. </bean>
  32. </beans></span>

第一个controller-----HelloWorldController.java    访问方式:

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

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

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

User.java值对象
[java] view plaincopy
  1. <span style="color:#000000;">package cn.hncu.domain;
  2. public class User {
  3. private String name;
  4. private Integer age;
  5. public String getName() {
  6. return name;
  7. }
  8. public void setName(String name) {
  9. this.name = name;
  10. }
  11. public Integer getAge() {
  12. return age;
  13. }
  14. public void setAge(Integer age) {
  15. this.age = age;
  16. }
  17. @Override
  18. public String toString() {
  19. return "User [name=" + name + ", age=" + age + "]";
  20. }
  21. }
  22. </span>

SpringMVC几个核心类(控制器核心类,加载配置文件核心类,处理url影射核心类,处理视图资源核心类,方法动态调用核心类)相关推荐

  1. Java 类中各成分加载顺序和内存中的存放位置

    一.什么时候会加载类? 使用到类中的内容时加载:有三种情况 1.创建对象:new StaticCode(); 2.使用类中的静态成员:StaticCode.num=9; StaticCode.show ...

  2. Angular项目中核心模块core Module只加载一次的实现

    核心模块CoreModule在整个系统中只加载一次,如何实现? 创建core Modele:ng g m core 既然CoreModule是类,就有构造函数,在构造函数中进行依赖注入. export ...

  3. 你知道 Java 类是如何被加载的吗?

    一:前言 最近给一个非Java方向的朋友讲了下双亲委派模型,朋友让我写篇文章深度研究下JVM的ClassLoader,我确实也好久没写JVM相关的文章了,有点手痒痒,涂了皮炎平也抑制不住. 我在向朋友 ...

  4. java配置文件工具类,java项目加载配置文件的工具类

    java项目加载配置文件的工具类 package com.loadproperties; import java.io.IOException; import java.io.InputStream; ...

  5. java使用哪个类,怎么知道 java类从哪个jar 加载

    如何知道 java类从哪个jar 加载 Java的类装载器使用的是优先策略,类加载器加载类的时候先找到哪个就加载哪个 从JSP页面就行测试 JBuilder Generated JSP if(claN ...

  6. 懒加载和预加载的区别_类的动态创建(ro,rw)amp; 懒加载类和非懒加载类底层加载的区别 amp; 类和分类的搭配分析...

    黑客技术点击右侧关注,了解黑客的世界! Java开发进阶点击右侧关注,掌握进阶之路! Python开发点击右侧关注,探讨技术话题!作者丨OSMin链接:https://juejin.im/post/5 ...

  7. 面试官:你真的知道 Java 类是如何被加载的吗?

    来自:https://yq.aliyun.com/articles/710407 一:前言 最近给一个非Java方向的朋友讲了下双亲委派模型,朋友让我写篇文章深度研究下JVM的ClassLoader, ...

  8. java重写源码类不生效(自己重写的类没有被jvm加载)

    背景 很多情况下我们需要调试源码或者修改源码以满足我们的开发需求 我们会项目的java目录下创建一个类,目录和类名都与源码的一致,然后将源码中的代码全部拷贝到我们自己创建的类中,再加入一些我们自己的逻 ...

  9. iOS开发之控制器创建与加载(生命周期)

    1.如何创建一个控制器 控制器常见的创建方式有以下几种: (1)通过storyboard创建 (2)直接创建 MJViewController *mj = [[MJViewController all ...

最新文章

  1. Go 学习笔记(40)— Go 标准库之 log
  2. 利用 createTrackbar 进行二值化
  3. graphviz绘制决策树
  4. 1135 Is It A Red-Black Tree (30 分)【难度: 难 / 知识点: 红黑树 未完成】
  5. 集团化后的挚文还有很多“新故事”可以讲
  6. SpringBatch 读取JSON(JsonItemReader)用法(十一)
  7. flink sql的datastream与dataset初始化代码汇总
  8. SmartFoxServer资料
  9. [react] 在react中遍历的方法有哪些?它们有什么区别呢?
  10. php 中文截断,PHP中实现中文字串截取无乱码的解决方法
  11. win7 oracle数据库删除用户名,win7操作系统、 oracle10g 数据库创建、卸载 用户名的创建 、删除...
  12. RxSwift中Observable的各种创建方法
  13. js原生继承几种方式
  14. Undefined index: submit in的错误处理
  15. Tomcat日志配置,可结合log4j
  16. speedoffice如何根据身份证号码提取出性别
  17. 控制/ 状态寄存器(RCC_CSR) 复位
  18. html中设置粗斜体,HTML基础 b i 字体加粗 斜体
  19. 睡眠健康与肠道健康之间的双向联系
  20. 拼多多关键词搜索采集商品数据接口,拼多多分类ID搜索采集商品销量接口,拼多多上货接口

热门文章

  1. 唯品会、滴滴、沪江架构师,关于微服务粒度、高可用、持续交互的实践分享交流(下)...
  2. 爬取药智网的中药材基本信息库
  3. 安全防护 守好家门 也谈端口的开关
  4. 华为路由器 静态路由
  5. 一入爬虫深似海,从此“节操”是路人!熬夜总结的python爬虫资料
  6. Adobe软件安装错误127替代方案
  7. Ray 分布式简单教程(2)
  8. 全志 H6 芯片分析
  9. 【linux基础】18、进程管理工具
  10. 产业护航 湾区共振!11月30日飞桨携手生态伙伴带来企业智能化升级的新思路...