springmvc带你学:带你入门

springmvc带你学:带你入门

好好学java 点击上方“好好学java”,选择“置顶公众号”
优秀学习资源、干货第一时间送达!
springmvc带你学:带你入门 - 图1
java实战练习项目教程

2018微服务资源springboot、springcloud、docker、dubbo实战等倾心分享

2018年java架构师全套学习教程

最新大数据培训完整视频教程
2018年java最新全套培训学习教程
SprigMVC—理解MVC及快速入门
传统MVC——>JSPModel2——>Front Controller + Application Controller + Page Controller + Context 三种模式是JavaWeb设计模式的逐渐适配和演进。本文分别讲述了这三种模式,作为了解即可。SpringMVC正是采用了第三种设计模式。
传统MVC:
MVC是Xerox PARC在20世纪80年代为编程语言SmallTalk发明的一种软件设计模式。
MVC是一种设计模式,它强制性地把应用程序的数据展示、数据处理和流程控制分开。
MVC将应用程序分成3个核心模块:模型、视图、控制器,他们相互联结又分别担当不同的任务,如图示所示。
springmvc带你学:带你入门 - 图2

JSPModel2:

在早期的Web应用中,JSP负责处理业务逻辑、控制网页流程并创建HTML页面。基本上JSP包揽的所有的模块,这无疑造成了不少的困扰:
比如:
    ☐可维护性差
    ☐调试困难
    ☐ HTML与Java程序代码强耦合在一起
    ☐ 内嵌的流程控制逻辑,要理解应用程序的逻辑必须浏览所有的JSP页面。

为了解决这些问题,SUN公司先后制定了两种设计模式,分别为Model1和Model2。虽然Model1在一定程序上实现了MVC中的视图和模型,但是他的运用并不理想,知道Model2的出现才改变了这种局面。

Model2中用JSP技术实现了视图的功能、用Servlet技术实现了控制器的功能、用JavaBean技术实现了模型的功能。
springmvc带你学:带你入门 - 图3

Front Controller + Application Controller + Page Controller + Context:

前端控制器+应用控制器+页面控制器(也有称其为动作)+上下文,也是一种WebMVC模型,只是责任更加明确,SpringMVC正是这种模式。
springmvc带你学:带你入门 - 图4

职责
Front Controller:前端控制器,负责为表现层提供统一访问点,从而避免Model2中出现的重复的控制逻辑(由前端控制器统一回调相应的功能方法,如前边的根据submitFlag=login转调login方法);并且可以为多个请求提供共用的逻辑(如准备上下文等等),将选择具体视图和具体的功能处理(如login里边封装请求参数到模型,并调用业务逻辑对象)分离。

Application Controller:应用控制器,前端控制器分离选择具体视图和具体的功能处理之后,需要有人来管理,应用控制器就是用来选择具体视图技术(视图的管理)和具体的功能处理(页面控制器/命令对象/动作管理),一种策略设计模式的应用,可以很容易的切换视图/页面控制器,相互不产生影响。

Page Controller(Command):页面控制器/动作/处理器:功能处理代码,收集参数、封装参数到模型,转调业务对象处理模型,返回逻辑视图名交给前端控制器(和具体的视图技术解耦),由前端控制器委托给应用控制器选择具体的视图来展示,可以是命令设计模式的实现。页面控制器也被称为处理器或动作。

Context:上下文,还记得Model2中为视图准备要展示的模型数据吗,我们直接放在request中(Servlet API相关),有了上下文之后,我们就可以将相关数据放置在上下文,从而与协议无关(如Servlet API)的访问/设置模型数据,一般通过ThreadLocal模式实现。
实例:
0.项目结构
springmvc带你学:带你入门 - 图5

1.加入Jar包(Maven)

  1. <dependency> <groupId>org.springframeworkgroupId> <artifactId>spring-webmvcartifactId> <version>4.3.14.RELEASEversion> dependency> <dependency> <groupId>org.springframeworkgroupId> <artifactId>spring-webartifactId> <version>4.3.14.RELEASEversion> dependency>

2.配置Web.xml文件

  1. xml version="1.0" encoding="UTF-8"?><web-appxmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" version="3.1"> <servlet> <servlet-name>dispatcherServletservlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServletservlet-class> <init-param> <param-name>contextConfigLocationparam-name> <param-value>classpath:dispatcherServlet-servlet.xmlparam-value> init-param> <load-on-startup>1load-on-startup> servlet> <servlet-mapping> <servlet-name>dispatcherServletservlet-name> <url-pattern>/url-pattern> servlet-mapping>web-app>

请求处理流程:
springmvc带你学:带你入门 - 图6

3.配置dispatcherServlet-servlet.xml文件

  1. xml version="1.0" encoding="UTF-8"?><beansxmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xmlns:mvc="http://www.springframework.org/schema/mvc"xmlns:mac="http://www.springframework.org/schema/mvc" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd"> <context:component-scanbase-package="com.ray"/> <beanclass="org.springframework.web.servlet.view.InternalResourceViewResolver"> <propertyname="prefix"value="/WEB-INF/views/"/> <propertyname="suffix"value=".jsp"/> bean>beans>

4.创建请求处理器类(helloworld.class)

  1. package com.ray; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; /** * Created by Ray on 2018/4/17 0017. */ @Controller public class helloworld { /** * 1. 使用 @RequestMapping 注解来映射请求的URL(相当于web.xml中的servlet-mapping元素的url-pattern) * 2. 返回值会通过视图解析器解析为实际的物理视图,具体看第三步中的InternalResourceViewResolver配置信息 */ @RequestMapping("/helloworld") public String hello(){ System.out.println("控制台输出:hello world"); return "success"; } }

说明

这里我们使用了注解@Controller ,可以表明了该类作为一个控制器,而不需要你扩展任何控制器基类或者引用ServletAPI。当然,如果需要还是可以引用特定Servlet功能。注解@Controller的基本目标是担任所注解的类的原型的角色,指明它的职责。

所注解的控制器Bean可以被显示定义。@Controller也允许自动侦测。要实现队所注解的控制器的自动侦测,必须要像配置中加入组件扫描的部分的语句。

  1. <context:component-scanbase-package="com.ray"/>

5.编写JSP页面(success.jsp) /WEB-INF/views/success.jsp``` <%@pagelanguage=”java”contentType=”text/html; charset=UTF-8” pageEncoding=”UTF-8” %><% Stringpath = request.getContextPath(); StringbasePath = request.getScheme() + “://“ + request.getServerName() + “:” + request.getServerPort() + path + “/“; %> "> SpringMVC:学习笔记(1)——理解MVC及快速入门title> <metahttp-equiv="pragma"content="no-cache"> <metahttp-equiv="cache-control"content="no-cache"> <metahttp-equiv="expires"content="0"> <metahttp-equiv="keywords"content="keyword1,keyword2,keyword3"> <metahttp-equiv="description"content="This is my page">head><body> Hello,worldbody>html></p> <pre><code>6.简单测试 http://localhost:8080/StringMVC/helloworld 控制器return返回了视图的名称,我们在SpringMVC 中设置了如何解析处理器返回值为视图。<br />所以当我们访问/helloworld后我们会被处理器跳转到success.jsp页面。<br />![](https://cdn.nlark.com/yuque/0/2021/png/2437871/1636282298919-aa5d8b71-de16-4435-8fff-4530ce9bba75.png) </code></pre><p>出处:<a rel="nofollow" href="http://blog.csdn.net/q343509740/article/details/79977620">http://blog.csdn.net/q343509740/article/details/79977620</a><br /> ```</p> <p><br /> <br /><img src="https://cdn.nlark.com/yuque/0/2021/png/2437871/1636282298999-c315709d-c5da-4666-addd-e5e287c70381.png" alt=""><br /> 觉得有用就转发分享一下吧<br /><strong>推**</strong>荐<strong><strong>阅</strong></strong>读**</p> <p><em><strong>1.</strong></em> <a rel="nofollow" href="http://mp.weixin.qq.com/s?__biz=MzI2OTQ4OTQ1NQ==&mid=2247485040&idx=1&sn=56615196f491328c471f6fd766560574&chksm=eadec230dda94b26e14807a397d4dfb90a3e5fe8a290772a8ef07e65209d4e06e361e035c63a&scene=21#wechat_redirect">一文读懂java web过滤器</a><br /><em><strong>2. </strong></em><a rel="nofollow" href="http://mp.weixin.qq.com/s?__biz=MzI2OTQ4OTQ1NQ==&mid=2247484930&idx=1&sn=09d866a4e5ebbd6026518e3da6425a4a&chksm=eadec242dda94b545cc4c653116f5a7a233c5377941373e22d05c84342b7a6ba8b551f6a286b&scene=21#wechat_redirect">一文读懂HttpServletRes</a>ponse<br /><em><strong>3.</strong></em> <a rel="nofollow" href="http://mp.weixin.qq.com/s?__biz=MzI2OTQ4OTQ1NQ==&mid=2247484907&idx=1&sn=675fd6d7b2fcf193a765320d70a6b6ff&chksm=eadec1abdda948bdceeaf5ebcea9fbd2b3a1ab2919c22e13d4389f741243ebab2975bf3ce7b8&scene=21#wechat_redirect">servlet就是这么简单</a></p> <p><em><strong>4.</strong>__<strong> </strong></em><a rel="nofollow" href="http://mp.weixin.qq.com/s?__biz=MzI2OTQ4OTQ1NQ==&mid=2247484869&idx=1&sn=0d876f578bde300723807fdc0ce496e2&chksm=eadec185dda94893bc1f49d8676ec3b47941a40dfb8eb3ea48ffcebf7cc997f5d59227b049b8&scene=21#wechat_redirect">tomcat基本使用,就是这么简单</a>_<br />附上热门QQ群,存放资源和历史资料,2000容量(低门槛付费群),长按二维码入群<br /> <img src="https://cdn.nlark.com/yuque/0/2021/jpg/2437871/1636282299082-3148d3ea-9fa0-4440-a211-c62f22ad2779.jpg" alt="微信公众号.jpg" title="微信公众号.jpg"></p> <p><img src="https://cdn.nlark.com/yuque/0/2021/gif/2437871/1636282299180-e4806108-5181-4f08-a108-e5882dba3a9c.gif" alt=""><img src="https://cdn.nlark.com/yuque/0/2021/jpg/2437871/1636282299273-4dd41862-fc8b-4954-a4e6-73404226d0e6.jpg" alt="微信公众号.jpg" title="微信公众号.jpg"></p>