学习笔记(02):Spring全家桶(基础篇)-Spring MVC快速开发:第一个例子-Hello World

    技术2023-10-23  102

    通过这个最简单的小例子了解Spring MVC的核心流程和控制器: 一、MVC:MVC是三层架构中的一个表现层框架,属于表现层。   >MVC:将应用分为三部分,Model、View、Controller     >>>Model:对后台的一些操作进行封装     >>>Controller:从前端页面接收请求,处理后,去调用后台相关操作,接受后台传回的数据并返回给前端。即实现View层跟Model层的协同。     >>>View:前端页面,jsp,html等 二、三层架构(3-tier application) >>>通常意义上的三层架构就是将整个业务应用划分为:表现层(UI)、业务逻辑层(BLL)、数据访问层(DAL)。

    表现层(UI):通俗讲就是展现给用户的界面,即用户在使用一个系统的时候他的所见所得。业务逻辑层(BLL):针对具体问题的操作,也可以说是对数据层的操作,对数据业务逻辑处理。数据访问层(DAL):该层所做事务直接操作数据库,针对数据的增添、删除、修改、更新、查找等。

    三、MVC和三层架构的区别:

    三层架构是基于业务逻辑来分的,而MVC是基于页面来分的严格说MVC加起来以后才是三层架构中的UI层,也就是说,三层架构中的UI层可以再度分化为MVC,即实体、视图、控制器三个部分,控制器完成页面逻辑,通过实体来与界面层完成通话;而控制器直接与三层中的BLL进行对话。作为UI层的MVC一般不直接操作数据访问层,中间会有一个业务逻辑层封装业务逻辑、调用数据访问层。Controller通过业务逻辑层来得到数据,交给Model进行封装,然后传给相应的View。

    四、Spring MVC的工作流程:

    大体流程图:各组件说明: 》》 DispatcherServlet(前端控制器):也称为中央控制器,它是整个请求响应的控制中心,组件的调用由它统一调度。 》》HandlerMapping(处理器映射器):它根据用户访问的 URL 映射到对应的后端处理器 Handler。也就是说它知道处理用户请求的后端处理器,但是它并不执行后端处理器,而是将处理器告诉给中央处理器。 》》HandlerAdapter(处理器适配器):它调用后端处理器中的方法,返回逻辑视图 ModelAndView 对象。 》》Handler(后端处理器):对用户具体请求进行处理,也就是我们编写的 Controller 类。 》》ViewResolver:视图解析器,将 ModelAndView 逻辑视图解析为具体的视图(如 JSP)。工作流程简述: 用户向服务端发送一次请求,这个请求会先到前端控制器DispatcherServlet(也叫中央控制器)。——>DispatcherServlet接收到请求后会调用HandlerMapping处理器映射器。由此得知,该请求该由哪个Controller来处理(并未调用Controller,只是得知)——>DispatcherServlet调用HandlerAdapter处理器适配器,告诉处理器适配器应该要去执行哪个Controller——>HandlerAdapter处理器适配器去执行Controller并得到ModelAndView(数据和视图),并层层返回给DispatcherServlet——>DispatcherServlet将ModelAndView交给ViewReslover视图解析器解析,然后返回真正的视图。——>DispatcherServlet将模型数据填充到视图中——>DispatcherServlet将结果响应给用户.

    五、例子:

    New一个Maven ProjectMaven Project不需要自己下载导入jar包,直接通过pom.xml来配置加载。有两种方式添加jar包。第一种是点击下图红圈的位置,可以搜索加载。 出问题了明天解决。。。。 ps:出现的问题是在eclipse中,在进行上边的操作时,不会自动搜索依赖,如下图。在网上进行了一番搜索尝试之后,eclipse成功陷入了崩溃,TMD。不干了,散伙。跪求大佬指点迷津。 好,接下来第二种方法:自闭了 这几天我一直致力于解决上述问题:然后emmmm,记录一下吧。 +先是:eclipse菜单 window-> show view –> other –> Maven,在打开的窗口里,右键 local repositories –> local repository ,选择 rebuild index,没有效果, +之后:eclipse菜单 window –>show view–>other–>Maven–>Maven Respositories点开"Global Respositories",在central上点击右键选择“rebuild index”更新索引,因为需要网络,我看这应该从apache下载maven的库的意思,然后eclipse一直显示进度0. +然后又搜了一下,说是要将maven源改为国内阿里云镜像。这个应该是安装了maven,其实我还没太搞清楚?我好像没有安装maven,反正改的方式是maven安装目录下conf配置文件里的settings.xml里换上这段 <mirror> <id>nexus-aliyun</id> <mirrorOf>central</mirrorOf> <name>Nexus aliyun</name> <url>http://maven.aliyun.com/nexus/content/groups/public</url> </mirror>

    然后我查了一下我好像没有安装maven,但是eclipse里确实集成了maven +最后我又决定启动eclipse,看看情况,emmm。结果这集竟然成了,emmm +我查看了一下,我的.m2文件夹下多了一个repository文件夹,里面一堆jar包,应该是eclipse给我下载了下来,但是应该没有下全,因为文件不大,但是不少了。可能是我的电脑良心发现了。。。。。。 不管怎么说问题暂时解决了

    续接上文,第二种方法:通过pom.xml源码方式添加:在Maven 中央仓库( http://www.sonatype.org/nexus/或者 http://mvnrepository.com/ 或者http://repo1.maven.org/maven2)搜索需要的jar包,直接复制下边的代码然后粘贴回来。推荐使用第二个仓库。

    3.利用add增加所需要的jar包(如下图),之后保存pom.xml.会自动下载,但可能会很慢。 到这里我发现他开始可能只是下了一个索引文件,让你可以搜索add,到你真正add然后保存pom.xml的时候他会开始慢慢的下载。。。,今天乏了,明天我决定先安装个maven从头做,然后再写。

    =============================== 这是分割线 =================================================================

    Ecliipse里自带的Maven让我心态有些崩,所以我总结了一点解决方法:学习笔记(02-番外):Spring全家桶(基础篇)-Eclipse里自带的maven用起来很恶心怎么办??

    =============================== 这是分割线 ================================================================= 步骤新笔记: 1. New一个Maven Project,用webapp模板 2. Maven Project不需要自己下载导入jar包,直接通过pom.xml来配置加载。add—>spring-webmvc

    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.hello</groupId> <artifactId>SpringMVC_HelloWorld</artifactId> <packaging>war</packaging> <version>0.0.1-SNAPSHOT</version> <name>SpringMVC_HelloWorld Maven Webapp</name> <url>http://maven.apache.org</url> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>3.8.1</version> <scope>test</scope> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>5.0.11.RELEASE</version> </dependency> </dependencies> <build> <finalName>SpringMVC_HelloWorld</finalName> </build> </project> 配置 web.xml: 技 巧:需要配置dispatcherservlet,所以输入dispa之后利用‘alt+/’可以快速补全代码,而不必一行行的写。 <!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd" > <web-app> <display-name>Archetype Created Web Application</display-name> <!-- The front controller of this Spring Web application, responsible for handling all application requests --> <servlet> <servlet-name>springDispatcherServlet</servlet-name> <!-- 这里定义的是一个叫springDispatcherServlet-servlet.xml的配置文件的文件名,具体配置会转到这个文件 --> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <!-- <init-param> <param-name>contextConfigLocation</param-name> <param-value>location</param-value> </init-param> <load-on-startup>1</load-on-startup> --> </servlet> <!-- Map all requests to the DispatcherServlet for handling --> <servlet-mapping> <servlet-name>springDispatcherServlet</servlet-name> <url-pattern>/</url-pattern><!--配置servlet适用于那些网页 ; /表示适用于网站所有的网页 --> </servlet-mapping> </web-app> 创建一个/SpringMVC_HelloWorld/src/main/webapp/WEB-INF/springDispatcherServlet-servlet.xml。因为在web.xml里配置的关系,文件名已经固定了。 <?xml version="1.0" encoding="UTF-8"?> <!-- 本文件的名字格式和位置是由web.xml来决定的,系统在调用web.xml时会同时调用该文件 这个文件的作用是配置与他同名的servlet的一些内容--> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.3.xsd"> <!-- 配置扫描的包 --> <context:component-scan base-package="com.hello"></context:component-scan> <!-- 配置视图解析器 --> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <!-- 配置页面位置在 /WEB-INF/pages中--> <property name="prefix" value="/WEB-INF/pages/"></property> <!-- 配置所有的页面都是以jsp结尾的 --> <property name="suffix" value=".jsp"></property> </bean> </beans> 后台代码会写在/SpringMVC_HelloWorld/src/main/java/com/hello/HelloWorldController.java。因为springDispatcherServlet-servlet.xml中配置的扫描com.hello包 package com.hello; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.servlet.ModelAndView; @Controller @RequestMapping("h")//定义它的url public class HelloWorldController { //这是一个静态页面 //返回一个静态页面 @RequestMapping("hello")//定义访问它的url public String helloWorld() { return "hello1";//通过配置文件转到这个名字的文件 } //动态:从后台取数据。。。有两种方式 //Model方式,返回一个页面 @RequestMapping("hello2")//定义访问它的url public String hello(Model model) { String str = "Welcome!--This is hello2.jsp"; model.addAttribute("message",str); return "hello2";//通过配置文件转到这个名字的文件 } //返回一个ModleAndView类型 @RequestMapping("hello3")//定义访问它的url public ModelAndView helloW() { ModelAndView modelAndView = new ModelAndView(); String str = "Welcome!--This is hello3.jsp"; modelAndView.addObject("message",str); modelAndView.setViewName("hello3");//通过配置文件转到这个名字的文件 return modelAndView; } } 根据HelloWorldController.java里的配置写几个页面,因为springDispatcherServlet-servlet.xml的关系要新建/WEB-INF/pages/并且这几个页面是jsp的。代码略根据HelloWorldController.java定义的url访问页面,比如http://localhost:8080/SpringMVC_HelloWorld/h/hello3,会跳转到 而http://localhost:8080/SpringMVC_HelloWorld/h/hello会来到整体的项目主要结构例子代码:点击下载
    Processed: 0.015, SQL: 9