SpringMVC-1-(简介及HelloWord)
首先我们来看一下servlet的处理请求的方式:
一:SpringMVC简介:
一)SpringMVC中的几个重要组件
1.DispatchServlet:
前端控制器,mvc模式中的c,是整个流程的控制中心,由他来调用其他组件来处理用户的请求,它的存在降低了组件之间的耦合性(组件可以随意的替换和自定义),
接受所有的请求(配置成 / 不包含jsp)
2.HandlerMapping:
解析请求格式,判断具体要去调用哪个Controller,他回去提取请求地址中的一些字段这个字段就是我的controller名字(比如:localhost:8080/hello,提取到hello)
有多种映射方式:配置文件方式,实现接口方式,注解方式等等(下边的HelloWord中实现了两种方式:实现接口的方式和接口的方式)
3.Handler:后端处理器;也就是我们定义的controller类
4.HanelerAdapter:负责调用具体的Controller,其实是他来执行调用controller
5.ViewResovler:视图解析器,解析结果,准备跳转到那个具体的物理视图
SpringMVC流程图:
二)SpringMVC容器
是Spring容器的子类,他可以获取Spring容器中的内容,Spring容器中不能获取SpringMVC中的内容,
他是在Dispatcher初始化的时候就完成创建。也可以通过下边代码来设置在tomcat启动的时候就创建
- <load-on-startup>1</load-on-startup>
三)HelloWord实现:
1.web.xml
2.springmvc.xml
3.controller
4.pom.xml
web.xml文件(无论xml方式还是注解方式web.xml都一样)
- <!--配置springmvc中的DispatcherServlet组件-->
- <servlet>
- <servlet-name>springmvc</servlet-name>
- <!--这个DidpatcherServlet相当于我们servlet中的写的那个类,去拦截处理请求的作用-->
- <!--创建他的时候他会创建一个自己的SpringMVC的一个容器ConfigurableApplicationContext-->
- <!--<servlet-name>springmvc</servlet-name>-->
- <!--中的name是springmvc。其实系统默认去找的配置文件名称也是这个+servlet.xml-->
- <!--spring-servlet.xml-->
- <!--但是他有会默认在src下去找-->
- <!--在这里我们修改他的默认路径和名称-->
- <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
- <init-param>
- <param-name>contextConfigLocation</param-name>
- <param-value>classpath:springmvc.xml</param-value>
- </init-param>
- </servlet>
- <servlet-mapping>
- <servlet-name>springmvc</servlet-name>
- <!--拦截处理jsp之外的资源-->
- <url-pattern>/</url-pattern>
- </servlet-mapping>
(一)xml方式配置(不常用,但是更完整表达mvc组建的使用)这种方式一个controllerl类里边只能写一个请求
一)方式一:映射器和处理器为(BeanNameUrlHandlerMapping 和 SimpleControllerHandlerAdapter)
- <!--将controller配置到springMVC容器中-->
- <bean class="com.xpl.controller.HelloController" id="/hello"/>--------------注意:hello前边的/
- <!--配置handlerMapping-->
- <bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"/>
- <!--配置处理器HandlerAdapter-->
- <bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter" />
- <!--配置视图解析器viewResolver-->
- <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" id="viewResolver">
- <property name="prefix" value="/WEB-INF/jsp/"/>
- <property name="suffix" value=".jsp"/>
- </bean>
- public class HelloController implements Controller {
- public ModelAndView handleRequest(HttpServletRequest req, HttpServletResponse spn) throws Exception {
- System.out.println("hello springMVC控制器");
- //也可以通过构造器来给视图命名
- //ModelAndView hello = new ModelAndView();
- ModelAndView hello = new ModelAndView("main");
- hello.setViewName("main");
- return hello; }
- }
二)方式二:映射器和处理器为(SimpleUrlHandlerMapping 和 SimpleControllerHandlerAdapter)
- <!--将controller配置到springMVC容器中-->
- <bean class="com.xpl.controller.HelloController" id="helloController"/>
- <!--配置handlerMapping-->
方式一和方式二区别在于property中的参数不一样一个是mappings一个是urlMap
方式一:- <!--<bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping" >-->
- <!--<property name="urlMap">-->
- <!--<map>-->
- <!--key是解析出来的控制器逻辑名 value-ref是上边配置的controller就是要调用的controller-->
- <!--<entry key="hello" value-ref="helloController"/>-->
- <!--</map>-->
- <!--</property>-->
- <!--</bean>-->
方式二:- <bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
- <property name="mappings">
- <props>
- <!--key表示请求参数名 value表示上边配置进来的Bean-->
- <prop key="hello">helloController</prop>
- </props>
- </property>
- </bean>
- <!--配置处理器HandlerAdapter-->
- <bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter" />
- <!--配置视图解析器viewResolver-->
- <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" id="viewResolver">
- <property name="prefix" value="/WEB-INF/jsp/"/>
- <property name="suffix" value=".jsp"/>
- </bean>
- public class HelloController implements Controller {
- public ModelAndView handleRequest(HttpServletRequest req, HttpServletResponse spn) throws Exception {
- System.out.println("hello springMVC控制器");
- //也可以通过构造器来给视图命名
- //ModelAndView hello = new ModelAndView();
- ModelAndView hello = new ModelAndView("main");
- hello.setViewName("main");
- return hello; }
- }
(二)注解方式配置映射器和处理器为(RequestMappingHandlerMapping 和 RequestMappingHandlerAdapter)
- <!--包扫描-->
- <context:component-scan base-package="com.xpl" use-default-filters="false">
- <context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
- </context:component-scan>
- <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping"/>
- <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"/>
- <!--配置视图解析器viewResolver-->
- <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" id="viewResolver">
- <property name="prefix" value="/WEB-INF/jsp/"/>
- <property name="suffix" value=".jsp"/>
- </bean>
- @Controller
- public class HelloController {
- @RequestMapping("/hello")
- public ModelAndView Hello(HttpServletRequest Request, HttpServletResponse Response) throws Exception {
- System.out.println("hello springMVC控制器");
- ModelAndView hello = new ModelAndView("main");
- return hello;
- }
- }
注意:
使用xml方式实现的时候controller必须实现Controller类,并重写其中的方法HandlerRequest();
使用注解的方式无需实现任何类,但是要在类上添加@Controller注解,方法上添加@RequestMapping("/hello")
pom.xml文件
- <dependency>
- <groupId>org.springframework</groupId>
- <artifactId>spring-webmvc</artifactId>
- <version>4.0.3.RELEASE</version>
- </dependency>
四)简化配置
将HandlerMapping 和 HandlerAdapter 两句合成一句
- <!--注意:是mvc那一个-->
- <mvc:annotation-driven/>
五):静态资源访问
- <!--location:静态资源路径-->
- <!--mapping:表示访问的url格式-->
- <!--访问 http://8080/err/err.html-->
- <mvc:resources mapping="/js/**" location="/WEB-INF/js/"/>
- <mvc:resources mapping="/css/**" location="/WEB-INF/css/"/>
- <mvc:resources mapping="/images/**" location="/WEB-INF/images/"/>
- <mvc:resources mapping="/err/**" location="/WEB-INF/err/"/>
六):乱码问题解决(web.xml中配置字符编码过滤器)
- <filter>
- <filter-name>encodingFilter</filter-name>
- <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
- <init-param>
- <param-name>encoding</param-name>
- <param-value>utf-8</param-value>
- </init-param>
- <init-param>
- <param-name>forceRequestEncoding</param-name>
- <param-value>true</param-value>
- </init-param>
- <init-param>
- <param-name>forceResponseEncoding</param-name>
- <param-value>true</param-value>
- </init-param>
- </filter>
- <filter-mapping>
- <filter-name>encodingFilter</filter-name>
- <url-pattern>/*</url-pattern>
- </filter-mapping>
SpringMVC-1-(简介及HelloWord)的更多相关文章
- 1.SpringMVC的简介和环境搭建
SpringMVC的简介: SpringMVC 和 Struts一样是一个MVC框架,和Spring无缝连接,和struts2类似, Spring MVC属于SpringFrameWork的后续产品, ...
- SpringMVC系列(一)SpringMVC概述和搭建SpringMVC的第一个helloWord入门程序
一.SpringMVC 概述 • Spring为展现层提供的基于MVC设计理念的优秀的Web框架,是目前最主流的MVC框架之一 • Spring3.0 后全面超越 Struts2,成为最优秀的 MVC ...
- [原创]java WEB学习笔记96:Spring学习---Spring简介及HelloWord
本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...
- SpringMVC框架简介
1.简介 SpringMVC也叫Spring Web mvc,属于表现层的框架.Spring MVC是Spring框架的一部分,是在Spring3.0后发布的 01.Spring mvc的优缺点 M ...
- springMvc架构简介
什么是spring 关于spring的定义无论是从官方还是市面上已经很多能够清晰明了的做出解释了.我姑且简单定义它为一个轻量级的控制反转(IoC)和面向切面(AOP)的容器,Java 开发框架,至于控 ...
- SpringMVC的简介和工作流程
一.简介 Spring MVC属于SpringFrameWork的后续产品,已经融合在Spring Web Flow里面.Spring 框架提供了构建 Web 应用程序的全功能 MVC 模块.Spri ...
- Spring-1-(简介及HelloWord)
一:Spring简介 Spring 框架宗旨:不重新发明技术,让原有技术使用起来更加方便. Spring核心功能: 1.AOP:面向切面编程 2.Ioc/Di:控制反转/依赖注入 3.声明式事务 Sp ...
- springMVC容器简介和执行流程
先来看一下,初始化的大体流程: 然后,我们再来看一下,我们的控制器DispatcherServlet的类图及继承关系. 系统启动的时候根据配置文件创建spring的容器, 首先是发送http请求到 ...
- [SpringMVC-初始] 初始SpringMVC
关于SpringMVC的简介 A.SpringMVC概述 作用: SpringMVC框架是SpringFramWork中实现了MVC架构模式的轻量级子框架 用于将WEB层进行职责解耦,松散的耦合可插拔 ...
随机推荐
- GoLand使用
# 不定期更新 什么是GoLand GoLand是JetBrains出品的一个Go语言IDE,JB的IDE有多好用我想很多程序员都知道,个人感觉唯一的缺点就是比较大(因为功能多) 希望大家多多支持正版 ...
- LuoGu P1006 传纸条
题目传送门 这题嘛...方格取数和这题一样一样的 只不过这题是从左上到右下再回去罢了(来回一趟和来两趟有区别么?没有,那么这题和上题用一样的转移和状态就行了 没什么好说的,说一下我的错误好了: 人家图 ...
- Java_oracle超出打开游标的最大数的原因和解决方案
第一步:核查Oracle数据库 的游标的最大数 处理超出打开游标的最大数异常(ORA-01000: maximum open cursors exceeded) ORA-01000_maximum_o ...
- Confluence 6 手动备份
Confluence 的 Attachment Storage Configuration 可以配置 Confluence 将附件存储在 home directory,或者是存储在数据库中. Dat ...
- 高性能JavaScript读后感
这本书让lz对js性能优化有了更深刻的理解,现在因为我们通常用第三方构建工具webpack.gulp等诸如此类,之前总是听说什么dom操作影响性能呢,对这个概念总是有点模糊,但看完这本书之后后,相对而 ...
- PHP 命名空间与自动加载机制
include 和 require 是PHP中引入文件的两个基本方法.在小规模开发中直接使用 include 和 require 没哟什么不妥,但在大型项目中会造成大量的 include 和 requ ...
- 批量杀掉多个pid文件中记录的pid进程, 并集成到shell脚本中
head_files=`find ./fmsConf/ -name "*.pid"` for file in $head_files do cat $file | awk rm - ...
- docker批量删除none镜像
1.直接用docker images | grep none | awk ‘{print $3}’ |xgars docker rmi 通过关键字搜索,得到docker id,进行删除
- K8s-Pod
一:Pod-资源对象概述 Pod是k8s系统中可以创建和管理的最小单元,是资源对象模型中由用户创建或部署的最小资源对象模型,也是在k8s上运行容器化应用的资源对象,其他的资源对象都是用来支撑或者扩展P ...
- @ResponseBody//该注解会将返回值转为json格式并放到响应体中返回到前台