B039-SpringMVC基础
目录
- SpringMVC简介
- 复习servlet
- SpringMVC入门
- 导包
- 配置前端控制器
- 编写处理器
- 实现Contoller接口
- 普通类加注解(常用)
- 路径问题
- 获取参数的方式
- 过滤器简介
- 自定义过滤器
- 配置框架提供的过滤器
- springMVC向页面传值的三种方式
- 视图解析器
- springMVC的转发和重定向
SpringMVC简介
1.SpringMVC是一个基于MVC模式的WEB/表现层框架,它解决WEB开发中常见的问题:参数接收、文件上传/下载、表单验证、国际化等等;
2.SpringMVC作为Spring框架一个非常重要的功能模块,可以与Spring无缝集成,提高开发效率;
3.Spring是一个轻量级的Java 开发框架,为了解决企业应用开发的复杂性而创建。SpringMVC以Spring框架为核心,为应用程序中的Web层(表现层)提出的一套优秀的解决方案;
4.目前很多公司都使用SpringMVC,90%的招聘单位要求熟悉使用SpringMVC;
注意:SpringMvc的功能就是之前Servlet的功能,可以理解为使用SpringMVC代替了Servlet;
复习servlet
见代码:
创建动态web工程 - HelloServlet - web.xml - Tomcat
HelloServlet
public class HelloServlet extends HttpServlet{@Overrideprotected void service(HttpServletRequest arg0, HttpServletResponse arg1) throws ServletException, IOException {System.out.println("进来了");}
}
web.xml
<servlet><servlet-name>helloServlet</servlet-name><servlet-class>cn.ming.controller.HelloServlet</servlet-class></servlet><servlet-mapping><servlet-name>helloServlet</servlet-name><url-pattern>/hello</url-pattern></servlet-mapping>
部署到Tomcat,浏览器访问localhost/hello
tips:
1.Target runtime:选上tomcat后就自动导入了相关jar包,不用再去lib添加相关jar包
2.Dynamic web module version:选3.0以上版本,因为支持注解,如@webservlet
3.创建动态web工程后怎么修改classes路径?
项目右键 - build path - Configure Build Path - source - 放到WEB-INF下的classes
4.为什么部署到webapp而不是部署到项目根目录?
因为WEB-INF下有看不到的classes路径,外面的java代码已编译到里面
SpringMVC入门
导包
SpringMvc是Spring的一个模块,所以要用SpringMvc需要导入Spring的jar包
tips:动态web工程一般导完包后会自动编译,不用手动build path
配置前端控制器
以前servlet的方式
现在的方式
前端控制器就是springMVC提供的servlet,接收所有请求但不处理请求,发给处理器即一个个方法去处理,所以需要配置前端控制器
web.xml
<servlet><servlet-name>dispatcherServlet</servlet-name><!-- 前端控制器 人家写好的servlet --><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class><!-- 加载SpringMVC的核心配置文件 --><init-param><param-name>contextConfigLocation</param-name><param-value>classpath:springMVC.xml</param-value></init-param><!-- Tomcat启动就初始化servlet --><load-on-startup>1</load-on-startup></servlet><servlet-mapping><servlet-name>dispatcherServlet</servlet-name><!-- 请求路径 --><url-pattern>/hello</url-pattern></servlet-mapping>
springMVC.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
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
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
"></beans>
编写处理器
业务处理控制器的三种实现:
1.实现Contoller接口
2.实现HttpRequestHandler接口
3.普通类加注解(常用)
实现Contoller接口
HelloController
public class HelloController implements Controller{@Overridepublic ModelAndView handleRequest(HttpServletRequest arg0, HttpServletResponse arg1) throws Exception {System.out.println("我是HelloController");return null;}}
springMVC.xml
<bean name="/hello.do" class="cn.ming.controller.HelloController"></bean>
web.xml
<servlet-mapping><servlet-name>dispatcherServlet</servlet-name><!-- 请求路径 --><url-pattern>*.do</url-pattern></servlet-mapping>
普通类加注解(常用)
上面这两种太局限:方法名固定了,参数固定,返回值固定,还要实现一个接口。所以后面都用第三种
HiController
@Controller // 代表当前这个类就是controller 交给spring管理 不用再配置bean
//@RequestMapping("/hi")
public class HiController {@RequestMapping("/hello.do")public void handler1() {System.out.println("我回来了");}public void handler2() {}public void handler3() {}
}
springMVC.xml
<!-- 开启扫描包路径 --><context:component-scan base-package="cn.ming.controller" />
路径问题
后缀匹配:匹配的范围太小
/*:匹配所有请求,会将css,html,jsp都匹配上,一般用在过滤器,对于restful不友好
/:匹配所有请求,最常用,不会拦截.jsp,但是会拦截静态资源(css,html,images)(/替代了tomcat中默认处理静态资源的Servlet),所以需要配置静态资源放行,但是这又会导致@RequestMapping等注解失效,所以还要加上使spring注解生效的配置
代码:
web.xml
<servlet-mapping><servlet-name>dispatcherServlet</servlet-name><!-- 请求路径 --><url-pattern>/</url-pattern></servlet-mapping>
springMVC.xml
<!-- 放行静态资源 --><mvc:default-servlet-handler/><!-- 使spring注解生效 @RequestMapping--><mvc:annotation-driven />
webapp下新建index.html
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body><h1>hello world</h1>
</body>
</html>
HiController
@Controller // 代表当前这个类就是controller 交给spring管理 不用再配置bean
//@RequestMapping("/hi")
public class HiController {@RequestMapping("/hello.do")public void handler1() {System.out.println("我回来了");}@RequestMapping("/hi.do")public void handler2() {System.out.println("hi.do。。");}@RequestMapping("/hei")public void handler3() {System.out.println("hei.....");}
}
启动tomcat分别测试访问页面和controller
获取参数的方式
tips:浏览器访问默认发get请求,表单可以自己选发get或post
ParamController
/*** springMVC接收参数的四种方式*/
@Controller
public class ParamController {/*** 一般不用 以前的方式* http://localhost/handler1?name=zs*/@RequestMapping("/handler1") // 请求的路径public void handler1(HttpServletRequest request){String name = request.getParameter("name");System.out.println(name);}/*** 常用 重点 类型要符合,名称要相同* http://localhost/handler2?name=ls&age=18*/@RequestMapping("/handler2") // 请求的路径public void handler2(String name,Integer age){System.out.println(name);System.out.println(age);}/*** 常用 重点 对象接收参数 * http://localhost/handler3?name=ls&age=18*/@RequestMapping("/handler3") // 请求的路径public void handler3(User user){System.out.println(user);}/*** 暂时不用 restful风格方式 * localhost:80/handler4/zs/30*/@RequestMapping("/handler4/{name}/{age}") // 请求的路径public void handler4(@PathVariable("name")String name, @PathVariable("age")Integer age){System.out.println(name);System.out.println(age);}
}
启动tomcat,浏览器访问
过滤器简介
tips:浏览器地址栏默认都是get,发post请求可以用表单指定,get请求在tomcat里自己解决了中文乱码,而post需要自己解决中文乱码
代码里每个处理器都设置字符集太麻烦,所以现在用filter过滤器
filter:过滤器
作用:乱码问题,过滤非法字符
执行时机:请求到达前端控制器之前
自定义过滤器
form.html
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body><form action="/handler3" method="post">name: <input type="text" name="name"><br/>age: <input type="text" name="age"><br/><input type="submit" value="提交"></form>
</body>
</html>
MyFilter
public class MyFilter implements Filter{//初始化方法@Overridepublic void init(FilterConfig arg0) throws ServletException {}//处理具体的内容@Overridepublic void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain)throws IOException, ServletException {System.out.println("filter。。。。。。");// 处理乱码问题req.setCharacterEncoding("utf-8");// 放行chain.doFilter(req, resp);}//销毁方法@Overridepublic void destroy() {}}
web.xml
<filter><filter-name>myFilter</filter-name><filter-class>cn.ming.filter.MyFilter</filter-class></filter><filter-mapping><filter-name>myFilter</filter-name><url-pattern>/*</url-pattern></filter-mapping>
浏览器访问
配置框架提供的过滤器
web.xml
<!-- 我们用框架提供的支持UTF-8编码的过滤器 --><filter><filter-name>characterEncoding</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><!--强制指定字符编码,即使request或response设置了字符编码,也会强制使用当前设置的,任何情况下强制使用此编码--><init-param><param-name>forceEncoding</param-name><param-value>true</param-value></init-param></filter><filter-mapping><filter-name>characterEncoding</filter-name><url-pattern>/*</url-pattern></filter-mapping>
springMVC向页面传值的三种方式
方式一:
DataController
@Controller
@RequestMapping("/data")
public class DataController {/*** 向页面传值方式一: 不常用。。。*/@RequestMapping("/handler1")public ModelAndView handler1(){ ModelAndView mv = new ModelAndView();// 向request域存值mv.addObject("name","tom");mv.addObject("age",30); // 跳转到页面mv.setViewName("/WEB-INF/views/data.jsp");return mv;}/*** 向页面传值方式二: 常用*/@RequestMapping("/handler2")public String handler2(Model model){// 向request域存值model.addAttribute("name", "王天霸");model.addAttribute("age", "40");return "/WEB-INF/views/data.jsp";}/*** 向页面传值方式三 : 常用*/@RequestMapping("/handler3")public String handler3(Map<String,Object> map){// 向request域存值map.put("name", "力很弱");map.put("age", 60);return "/WEB-INF/views/data.jsp"; //返回页面}
}
data.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>${name}<br/>${age}
</body>
</html>
视图解析器
视图解析器:把页面的前后缀配置起来,后面就都只需要简写
springMVC.xml
<!-- 视图解析器 prefix+return+suffix = /WEB-INF/views/data.jsp --><bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"><property name="prefix" value="/WEB-INF/views/"></property><property name="suffix" value=".jsp"></property> </bean>
DataController
/*** 向页面传值方式三 : 常用*/@RequestMapping("/handler3")public String handler3(Map<String,Object> map){// 向request域存值map.put("name", "力很弱");map.put("age", 60);return "data"; //返回页面}
springMVC的转发和重定向
DataController
/*** 转发和重定向* 使用forward(转发)和redirect(重定向)都不会走视图解析器,但它们之间的区别还是存在*/@RequestMapping("/handler4")public String handler4(){// 默认是转发 走视图解析器// return "data";// 不走视图解析器 forward:转发// return "forward:/index.html";// 不走视图解析器 redirect:重定向return "redirect:/index.html";}
相关文章:
B039-SpringMVC基础
目录 SpringMVC简介复习servletSpringMVC入门导包配置前端控制器编写处理器实现Contoller接口普通类加注解(常用) 路径问题获取参数的方式过滤器简介自定义过滤器配置框架提供的过滤器 springMVC向页面传值的三种方式视图解析器springMVC的转发和重定向 SpringMVC简介 1.Sprin…...
Tomcat报404问题解决方案大全(包括tomcat可以正常运行但是报404)
文章目录 Tomcat报404问题解决方案大全(包括tomcat可以正常运行但是报404)1、正确的运行页面2、报错404问题分类解决2.1、Tomcat未配置环境变量2.2、IIs访问权限问题2.3、端口占用问题2.4、文件缺少问题解决办法: Tomcat报404问题解决方案大全(包括tomcat可以正常运…...
debian10安装配置vim+gtags
sudo apt install global gtags --version gtags //生成gtag gtags-cscope //查看gtags gtags与leaderf配合使用 参考: 【VIM】【LeaderF】【Gtags】打造全定制化的IDE开发环境! - 知乎...
vue跳转方式
Vue的页面跳转有两种方式,第一种是标签内跳转,第二种是编程式路由导航 1. <router-link to/Demo><button>点击跳转1</button> </router-link>2.router.push("/Demo");一、标签内通过 router-link跳转 通常用于点击 …...
基于ssm+jsp学生综合测评管理系统源码和论文
网络的广泛应用给生活带来了十分的便利。所以把学生综合测评管理与现在网络相结合,利用java技术建设学生综合测评管理系统,实现学生综合测评的信息化。则对于进一步提高学生综合测评管理发展,丰富学生综合测评管理经验能起到不少的促进作用。…...
网络基础篇【网线的制作,OSI七层模型,集线器和交换机的介绍,路由器的介绍与设置】
目录 一、网线制作 1.1 工具介绍 1.1.1网线 1.1.2 网线钳 1.1.3 水晶头 1.1.4 网线测试仪 二、OSI七层模型 2.1 简介 2.2 OSI模型层次介绍 2.2.1 结构图 2.2.2 数据传输过程 2.3 相关网站 二、集线器 2.1 介绍 2.2 适用场景 三、交换机 3.1 介绍 3.2 适用场景…...
CSRF检测工具(XSRF检测工具)使用说明
目录 检查类型 测试单个端点 抓取网站 添加Cookie 自定义用户代理...
docker 部署kafka
随笔记录 目录 1. 安装zookeeper 2. 安装Kafka 2.1 拉取kafka image 2.2 查询本地docker images 2.3 查看本地 容器(docker container) 2.3.1 查看本地已启动的 docker container 2.3.2 查看所有容器的列表,包括已停止的容器。 2.3.…...
Android 架构 - 组件化
一、概念 组件化是对单个功能进行开发,使得功能可以复用。将多个功能组合起来就是一个业务模块,因此去除了模块间的耦合,使得按业务划分的模块成了可单独运行的业务组件。(一定程度上的独立,还是依附于整个项目中&…...
数字图像处理-空间域图像增强-爆肝18小时用通俗语言进行超详细的总结
目录 灰度变换 直方图(Histogram) 直方图均衡 直方图匹配(规定化) 空间滤波 低通滤波器 高通滤波器 本文章讲解数字图像处理空间域图像增强,大部分内容来源于课堂笔记中 灰度变换 图像增强&…...
【Java】【SQL】DATE_FORMAT函数详解
在实际应用开发中,使用sql语句也属于开发者的一部分,这次来说说DATE_FORMAT函数。 引言:实际上在使用Java开发过程中,有很多业务场景下,都有时间类型的参数参与。前后端进行交互的时候,针对时间类型的格式…...
Pooling方法总结(语音识别)
Pooling layer将变长的frame-level features转换为一个定长的向量。 1. Statistics Pooling 链接:http://danielpovey.com/files/2017_interspeech_embeddings.pdf The default pooling method for x-vector is statistics pooling. The statistics pooling laye…...
Java可变参数(学习推荐版,通俗易懂)
定义 可变参数本质还是一个数组 示例代码 注意事项 1.形参列表中,可变参数只能有一个 2.可变参数必须放在形参列表的最后面 注意是最后面。 name也可以为int类型...
异步编程Promise
文章目录 前言一、关于 Promise 的理解与使用1.相关知识补充区别实例对象和函数对象同步回调异步回调Js中的错误(error)和错误处理 2.promise是什么 二、Promise 原理三、Promise 封装 Ajax四、async 与 await总结 前言 在项目中,promise的使…...
Centos上的默认文本编辑器vi的操作方法积累
打开一个文本后,常见的操作方法积累如下: 001-进入或退出插入模式的方法 按下 i 进入插入模式。 按下 Esc 退出插入模式。 002-进入命令模式的方法: 按下 Esc 退出插入模式,然后输入冒号:进入命令模式。 003-退出vi编辑器的方…...
海康rtsp拉流,rtmp推流,nginx部署转flv集成
海康rtsp拉流,rtmp推流,nginx部署转flv集成 项目实际使用并测试经正式使用无问题,有问题欢迎评论留言 核心后台java代码: try {// FFmpeg命令String command "ffmpeg -re -i my_video.mp4 -c copy -f flv rtmp://localho…...
【Python百宝箱】时序之美:Python 时间序列探秘与创新
时光漫游:Python 时间序列分析全指南 前言 在数字化时代,时间序列数据扮演着关键的角色,从金融到气象再到生产制造。本文将引导你穿越Python丰富的时间序列分析工具,探索从基础统计到机器学习和深度学习的各个层面。无论你是初学…...
flutter开发实战-第一帧布局完成回调实现
flutter开发实战-第一帧布局完成回调实现 在开发中,我们有时候需要在第一帧布局完成后调用一些相关的方法。这里记录一下是实现过程。 Flutter中有多种不同的Binding,每种Binding都负责不同的功能。下面是Flutter中常见的Binding: 这里简单…...
Windows11编译VTM源码生成Visual Studio 工程
VTM介绍 VTM作为H266/VVC标准的官方参考软件,一直用作H266/VVC标准的研究和迭代。关于H2666/VVC标准的介绍、代码、提案、文档等,可以参考H266/VVC编码标准介绍。 官方代码地址: https://vcgit.hhi.fraunhofer.de/jvet/VVCSoftware_VTM&…...
[数据结构进阶 C++] 二叉搜索树(BinarySearchTree)的模拟实现
文章目录 1、二叉搜索树1.1 二叉搜索数的概念1.2 二叉搜索树的操作1.2.1 二叉搜索树的查找1.2.2 二叉搜索树的插入1.2.3 二叉搜索树的删除 2、二叉搜索树的应用2.1 K模型2.2 KV模型 3、二叉搜索树的性能分析4、K模型与KV模型完整代码4.1 二叉搜索树的模拟实现(K模型…...
PostGIS学习教程十四:更多的空间连接
PostGIS学习教程十四:更多的空间连接 在上一节中,我们看到了ST_Centroid(geometry)和ST_Union([geometry])函数,以及一些简单的示例。在本节中,我们将用它们做一些更详细的事情。 提示:写完文章后,目录可以…...
【爬虫软件】孔夫子二手书采集
项目演示 孔网爬取图书信息 目录结构 [ |-- api-ms-win-core-synch-l1-2-0.dll, |-- api-ms-win-core-sysinfo-l1-1-0.dll, |-- api-ms-win-core-timezone-l1-1-0.dll, |-- api-ms-win-core-util-l1-1-0.dll, |-- api-ms-win-crt-conio-l1-1-0.dll, |-- api…...
P8736 [蓝桥杯 2020 国 B] 游园安排
题目描述 L \mathrm{L} L 星球游乐园非常有趣,吸引着各个星球的游客前来游玩。小蓝是 L \mathrm{L} L 星球 游乐园的管理员。 为了更好的管理游乐园,游乐园要求所有的游客提前预约,小蓝能看到系统上所有预约游客的名字。每个游客的名字由一…...
初识Docker-什么是docker
Docker是一个快速交付应用、运行应用的技术 目录 一、Docker 二、运用场景 一、什么是Docker?它的作用是什么? Docker如何解决大型项目依赖关系复杂,不同组件依赖的兼容性问题? Docker允许开发中将应用、依赖、函数库、配置一起打包&…...
maven的pom.xml设置本地仓库
配置 在Maven项目中,您可以在pom.xml文件中配置本地仓库的路径。在pom.xml文件中,您可以添加以下配置来指定本地仓库的路径: <project>...<repositories><repository><id>local-repo</id><url>file://…...
Qt获取屏幕DPI缩放比
获取屏幕缩放比 网上很多代码是用 logicalDotsPerInch 除以 96 来获取屏幕缩放比: // Windows 除以 96,macOS 除以 72 qreal factor window->screen()->logicalDotsPerInch() / 96.0; 当使能了缩放适配后,logicalDotsPerInch 值就不…...
Spring MVC控制层框架
三、Spring MVC控制层框架 目录 一、SpringMVC简介和体验 1. 介绍2. 主要作用3. 核心组件和调用流程理解4. 快速体验 二、SpringMVC接收数据 1. 访问路径设置2. 接收参数(重点) 2.1 param 和 json参数比较2.2 param参数接收2.3 路径 参数接收2.4 json参…...
vmware安装银河麒麟V10高级服务器操作系统
vmware安装银河麒麟V10高级服务器操作系统 1、下载银河麒麟V10镜像2、VMware安装银河麒麟V10高级服务器操作系统2.1、新建虚拟机2.2、安装虚拟机 3、配置银河麒麟V10高级服务器操作系统3.1、安装vmware tools3.2、配置静态IP地址 和 dns3.3、查看磁盘分区3.4、查看系统版本 1、…...
掌握Jenknis基础概念
目录 任务(Jobs) 构建(Builds) 触发器(Triggers) 构建环境(Build Environment): 插件(Plugins): 参数化构建(Paramet…...
AWS 知识二:AWS同一个VPC下的ubuntu实例通过ldapsearch命令查询目录用户信息
前言: 前提:需要完成我的AWS 知识一创建一个成功运行的目录。 主要两个重要:1.本地windows如何通过SSH的方式连接到Ubuntu实例 2.ldapsearch命令的构成 一 ,启动一个新的Ubuntu实例 1.创建一个ubuntu实例 具体创建实例步骤我就不…...
公司网站设计很好的/网络营销工具包括
浑浑噩噩已经走了这么长时间了,那么,留下点什么吧。 一种积累,一种出口。 转载于:https://www.cnblogs.com/Peong/p/10438157.html...
发明迷网站豆渣做豆腐/seo关键词排名软件流量词
最近一位想跳槽大厂的老程序员朋友面试了几家发现:6年前面试最常问的并且可以顺利拿到高薪的技能是 Dubbo ,2年前面试,只要你简历上有 Spring Cloud 项目的相关经验,肯定会打动面试官,现在呢?简历上有Dubbo和简单的Spr…...
淘宝做网站/网络游戏推广平台
为了让美化上传文件框,设置了cursor:pointer;,然而不起作用,设置font-size:0,这样就可以了。转载于:https://www.cnblogs.com/mmykdbc/p/10531976.html...
鸿鹄网站建设/各大网站排名
本文目标是充当使用Selenium Docker镜像以及CodeceptJS和Express服务器的“操作方法”指南。其中,我们将涵盖:什么是E2E验收测试?为什么要使用Docker?松耦合的测试工具测试工具层创建测试项目E2E验收测试验收测试是典型软件开发过…...
企业网上推广方式/西安seo霸屏
LeetCode 456. 132模式 难度 中等 给定一个整数序列:a1, a2, …, an,一个132模式的子序列ai, aj, ak被定义为:当i < j < k时,ai < ak < aj。设计一个算法,当给定有n个数字的序列时,验证这个…...
分享代码的网站/小程序开发教程全集免费
机动目标跟踪——交互式多模型算法IMM 原创不易,路过的各位大佬请点个赞 WX: ZB823618313 机动目标跟踪——交互式多模型算法IMM机动目标跟踪——交互式多模型算法IMM1. 对机动目标跟踪的理解2. 机动目标跟踪方法概述3. 交互式多模型:概述4. 交互式多模…...