技术标签: Java进阶
Spring MVC是Spring Framework的一部分,是基于Java实现MVC的轻量级Web框架。
官方文档:https://docs.spring.io/spring-framework/docs/5.3.x-SNAPSHOT/reference/html/web.html#spring-web
Spring MVC的特点:
Spring的web框架围绕DispatcherServlet [ 调度Servlet ] 设计。
DispatcherServlet的作用是将请求分发到不同的处理器。从Spring 2.5开始,使用Java 5或者以上版本的用户可以采用基于注解形式进行开发,十分简洁;
Spring的web框架围绕DispatcherServlet设计。DispatcherServlet的作用是将请求分发到不同的处理器。从Spring 2.5开始,使用Java 5或者以上版本的用户可以采用基于注解的controller声明方式。
Spring MVC框架以请求为驱动 , 围绕一个中心Servlet分派请求及提供其他功能,DispatcherServlet是一个实际的Servlet (它继承自HttpServlet 基类)。
当发起请求时被前置的控制器拦截到请求,根据请求参数生成代理请求,找到请求对应的实际控制器,控制器处理请求,创建数据模型,访问数据库,将模型响应给中心控制器,控制器使用模型与视图渲染视图结果,将结果返回给中心控制器,再将结果返回给请求者。
图为SpringMVC的一个较完整的流程图,实线表示SpringMVC框架提供的技术,不需要开发者实现,虚线表示需要开发者实现。
简要执行流程
1.给项目添加web的支持!
2.确定导入了SpringMVC 的依赖!(maven中以及Artifacts中)
要确保有lib并且其中还有相应的包
3.配置web.xml , 注册DispatcherServlet
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="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_4_0.xsd"
version="4.0">
<!--1.注册DispatcherServlet-->
<servlet>
<servlet-name>springmvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!--关联一个springmvc的配置文件:【servlet-name】-servlet.xml-->
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:springmvc-servlet.xml</param-value>
</init-param>
<!--启动级别-1-->
<load-on-startup>1</load-on-startup>
</servlet>
<!--/ 匹配所有的请求;(不包括.jsp)-->
<!--/* 匹配所有的请求;(包括.jsp)-->
<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>
4.编写SpringMVC 的 配置文件!
文件名称:springmvc-servlet.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd">
</beans>
5.添加处理映射器(HandlerMapping)
<bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"/>
6.添加处理器适配器(HandlerAdapter)
<bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"/>
7.添加视图解析器
添加到springmvc-servlet.xml中
<!--视图解析器:DispatcherServlet给他的ModelAndView-->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" id="InternalResourceViewResolver">
<!--前缀-->
<property name="prefix" value="/WEB-INF/jsp/"/>
<!--后缀-->
<property name="suffix" value=".jsp"/>
</bean>
8.编写我们要操作业务Controller ,要么实现Controller接口,要么增加注解;需要返回一个ModelAndView,装数据,封视图;
package com.controller;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.Controller;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
//注意:这里我们先导入Controller接口
public class MyController implements Controller {
public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception {
//ModelAndView 模型和视图
ModelAndView mv = new ModelAndView();
//调用业务层方法
//封装对象,放在ModelAndView中。Model
mv.addObject("msg","HelloSpringMVC!");
//封装要跳转的视图,放在ModelAndView中
mv.setViewName("hello"); //: /WEB-INF/jsp/hello.jsp
return mv;
}
}
9.将自己的类交给SpringIOC容器,注册bean
因为这个处理BeanNameUrlHandlerMapping,所以要在spring-mvc.xml中注册bean。开发中一般不使用它
<!--Handler-->
<bean id="/hello" class="com.kuang.MyController"/>
10.写要跳转的jsp页面,显示ModelandView存放的数据,以及我们的正常页面;
11.配置Tomcat 启动测试!
1.给项目添加web的支持!
2.由于Maven可能存在资源过滤的问题,我们将配置完善
<build>
<resources>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
<filtering>false</filtering>
</resource>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
<filtering>false</filtering>
</resource>
</resources>
</build>
3.在pom.xml文件引入相关的依赖:主要有Spring框架核心库、Spring MVC、servlet , JSTL等。
4.配置web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="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_4_0.xsd"
version="4.0">
<!--1.注册servlet-->
<servlet>
<servlet-name>SpringMVC</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!--通过初始化参数指定SpringMVC配置文件的位置,进行关联-->
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:springmvc-servlet.xml</param-value>
</init-param>
<!-- 启动顺序,数字越小,启动越早 -->
<load-on-startup>1</load-on-startup>
</servlet>
<!--所有请求都会被springmvc拦截 -->
<servlet-mapping>
<servlet-name>SpringMVC</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>
<!--
注意web.xml版本问题,要最新版!
注册DispatcherServlet
关联SpringMVC的配置文件
启动级别为1
映射路径为 / 【不要用/*,会404】
-->
<url-pattern></url-pattern>
当中/
和/*
的区别:
1./
不会匹配到.jsp, 只针对我们编写的请求;即:.jsp 不会进入spring的 DispatcherServlet类 。
2./*
会匹配 *.jsp,会出现返回 jsp视图 时再次进入spring的DispatcherServlet 类,导致找不到对应的controller所以报404错。
5.添加Spring MVC配置文件
在resource目录下添加springmvc-servlet.xml配置文件,配置的形式与Spring容器配置基本类似,为了支持基于注解的IOC,设置了自动扫描包的功能。
<?xml version="1.0" encoding="UTF-8"?>
<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"
xmlns:mvc="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
https://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/mvc
https://www.springframework.org/schema/mvc/spring-mvc.xsd">
<!-- 自动扫描包,让指定包下的注解生效,由IOC容器统一管理 -->
<context:component-scan base-package="com.controller"/>
<!-- 让Spring MVC不处理静态资源 -->
<mvc:default-servlet-handler />
<!--
支持mvc注解驱动
在spring中一般采用@RequestMapping注解来完成映射关系
要想使@RequestMapping注解生效
必须向上下文中注册DefaultAnnotationHandlerMapping
和一个AnnotationMethodHandlerAdapter实例
这两个实例分别在类级别和方法级别处理。
而annotation-driven配置帮助我们自动完成上述两个实例的注入。
-->
<mvc:annotation-driven />
<!-- 视图解析器 -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"
id="internalResourceViewResolver">
<!-- 前缀 -->
<property name="prefix" value="/WEB-INF/jsp/" />
<!-- 后缀 -->
<property name="suffix" value=".jsp" />
</bean>
<!--
让IOC的注解生效
静态资源过滤 :HTML . JS . CSS . 图片 , 视频 .....
MVC的注解驱动
配置视图解析器
-->
</beans>
在视图解析器中我们把所有的视图都存放在/WEB-INF/目录下,这样可以保证视图安全,因为这个目录下的文件,客户端不能直接访问。
6.创建Controller
package com.controller;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
@RequestMapping("/MyController")
public class MyController {
//真实访问地址 : 项目名/MyController/hello
@RequestMapping("/hello")
public String sayHello(Model model){
//向模型中添加属性msg与值,可以在JSP页面中取出并渲染
model.addAttribute("msg","hello,SpringMVC");
//web-inf/jsp/hello.jsp
return "hello";
}
}
参考文章:狂神说
文章浏览阅读175次。React样式策略_jsx中编写classname 为什么要写styles.
文章浏览阅读471次。您好我正在使用android中的计算器。 我有一个EditText在wchich不会显示,具体取决于特定号码的点击,例如当用户按1时,它将显示1.现在当用户点击2时,它将显示12等等。从Android中的EditText获取文本点击按钮我有这样的事情public class Main extends Activity implements OnClickListener {public stati..._androidstudio点击按钮获取文本框内容
文章浏览阅读679次。第3章 信息系统治理_it审计的固有风险
文章浏览阅读1.2k次,点赞41次,收藏40次。数组是编程中一种基础且重要的数据结构,用于存储一系列相同类型的元素,这些元素在内存中是连续存放的。在 C 语言中,数组可以存储任何数据类型的元素,如整数、浮点数、字符等。了解数组的工作原理及其特性对于编写有效和高效的程序至关重要。
文章浏览阅读2.9k次。1、安装cnpm i qrcodejs2 --save2、在相应的Vue组件中引入qrcode插件import QRCode from "qrcodejs2";3、在html中增加相应的DOM结构<div id="qrcode"></div>4、在methods定义方法 qrcode() { let qrcode = new QRCode("qrcode", { render: "canvas", //也可以替换为table_qrcode-vue
文章浏览阅读582次。 EMV标准是由国际三大银行卡组织--Europay(欧陆卡,已被万事达收购)、MasterCard(万事达卡)和Visa(维萨)共同发起制定的银行卡从磁条卡向智能IC卡转移的技术标准,是基于IC卡的金融支付标准,已成为公认的全球统一标准。1999年2月,当时的国际三大卡组织共同成立了EMVCo组织,用来管理、维护和完善EMV智能(芯片)卡的规格标准。 EMVCo组织的成员有: M..._e mv标准语什么开始执行
文章浏览阅读3.8k次。本人ThinkPad E460,Win10操作系统,因为工作内容,需要在特定的网络中开发,要连接隐藏网络。公司分配的是台式机,给了个2.4g的网卡,5g没到货时,用着是在憋屈,所以就用自己的笔记本连接隐藏5g网。然后按照正常步骤进行:点击网络图标 - 网络和Internet设置 - 网络和共享中心 - 设置新的网络 - 手动连接到无线网络 ...当点击连接时就给反馈:“无法连接这个..._thinkpad e460安装网卡失败,没法上网
文章浏览阅读1.7k次,点赞5次,收藏31次。之前部署的yolov5-ncnn不支持调用本地摄像头进行在线推理,多少还是感觉遗憾。说实话yolov8-ncnn的部署属实有点割韭菜的嫌疑,这篇博客教你从0部署yolov8到安卓手机。_yolov8部署到手机
文章浏览阅读2.6k次。1、 举例说明计算机图形学的主要应用领域(至少说明5个应用领域)计算机及辅助设计与制造、可视化、图形实时绘制与自然景物仿真、计算机动画、用户接口、计算机艺术2、 分别解释直线生成算法DDA法、中点画线法和Bresenham法的基本原理。 DDA法:设过端点P0(x0 ,y0)、P1(x1 ,y1)的直线段为L(P0 ,P1),则直线段L的斜率L的起点P0的横坐标x0向L的终点P1的横坐标x1步进..._列举有关计算机图形学的应用
文章浏览阅读5.3w次,点赞17次,收藏67次。通过实例化一个对象,使一个类能调用另一个类的方法主题代码主题描述老张开车去东北这件事类人实例变量:名字name实例方法:去go_to车实例方法:run代码class Person: def __inti__(self,name): self.name = name def go_to(self,position,type): ''' :par..._python中类方法如何调用
文章浏览阅读2.2w次,点赞9次,收藏13次。文章目录安装创建连接虽然市面上 Zookeeper 的 WEB 管理工具很丰富,但是却很难找到一款满意的图形化客户端。鉴于这样的情况,经过时间的查找,找到了这款管理 Zookeeper 的图形化工具,取名 PrettyZoo,意为:Pretty nice Zookeeper GUI。PrettyZoo 是一个基于 JavaFX 和 Apache Curator 实现的 Zookeeper 图形化工具,该项目完全开源,可以通过 Github 主页查看。github:https://github.com_prettyzoo mac
文章浏览阅读8.4k次。方便焊接的值value文件在焊接过程中最方便的是在图中直接显示元件的值,因为这样即知道了这个是什么元件,也知道了这个元件的具体指,最适合手焊,如下:在AD软件中如果在comment这个属性就是值得情况(protel软件)只要把原件的标号隐藏掉,并显示conment即可,元件属性如下:这时候导出设置如下:导出结果如下:但是这时候的导出结果过于混乱,调整方式是直接隐..._ad生成gerber文件无边框