由于maven创建的web.xml版本太低,我们先手动换个4.0的版本
在web.xml中
就是index.html访问的some.do,来处理前端的数据,控制器类可以有多个,就相当于是一个servlet类
我们的show.html是在webapp包下的,这个包下是用户能直接访问的,用户可以直接通过浏览器访问到show.html,这就造成了安全隐患,所以我们要把show.xml放到WEB-INF包下,这个包不能直接访问,是对用户不可见的
这里面还有一个other.html后面用来讲解视图解析器
更改Mycontrol中doSome方法,返回视图的路径
此时我们发现,两个页面的路径有重复的地方,只有名字不一样但是前缀和后缀都一样,此时就可以配置一个视图解析器,来帮我们写前缀和后缀
在上面程序的基础上修改
1.修改Index.html
2.修改处理器类MyController
处理器方法可以包含以下四类参数,这些参数会在系统调用时由系统自动赋值,即程序员可在方法内直接使用
请求的参数少的时候可以用逐个接收参数
在第一个程序的基础上修改
1.修改 Index.html提交参数
2. 修改处理器类MyControlle
在web.xml中添加过滤器,注意要把这个放到最前面,
CharacterEncodingFilter的源码分析
1.修改index.html页面
将表单中的参数名称修改为和MyController中doSome()的参数不同
参数名和属性名不一致
2.修改处理器MyController中
将处理器方法的参数定义为一个对象,只要保证请求参数名与这个对象的属性同名即可
在上一个程序的基础上修改
1.index.html
2.定义一个Student类
3.修改MyController
处理器方法返回的字符串可以指定逻辑视图名,也可以是完整的视图路径
1.修改index.html
2.必须要有视图解析器,才能用用逻辑名称
3.修改MyController
不是处理Ajax的方式,他还有很多问题,我们用的返回对象Object
对于处理器方法返回void的应用场景,AJAX响应.若处理器对请求处理后,无需跳转到其它任何资源,此时可以让处理器方法返回void。
例如,对于AJAX的异步请求的响应
1.maven加入jackson依赖
2. 引入jQuery库
3.index.html发送ajax请求
4.修改MyController
5.前端返回数据
处理Ajax,主要用返回对象,而且比void返回值写的还少,void中需要我们写的,在object中框架帮我们写了
实现步骤
1.加入Jackson依赖
2.声明注册驱动
3.在MyController中
用于多个对象的处理
和Object是一样的
问题:在web.xml中,声明中央调度器的时候,使用”/”存在的问题:无法处理静态文件
因为:当使用”/”的时候静态文件也归中央调度器处理了,我们之前的*.do指的是只是.do结尾的交给中央调度器处理,静态文件还是归tomcat处理,因为tomcat中有一个default
index.html
找不到静态文件
Spring定义了专门用于处理静态资源访问请求的处理器ResourceHttpRequestHandler。
在springmvc中
前端访问user/some.do
User/some.do中,跳转到index.html
第一次访问index.html时,基于的地址是http://localhost:8080/myWeb/
在上述页面中,点击”访问/user/some.do”,就会报错,因为第二次点击基于的地址是
http://localhost:8080/myWeb/user/
<dependencies>
<dependency>
<groupId>junitgroupId>
<artifactId>junitartifactId>
<version>4.11version>
<scope>testscope>
dependency>
<dependency>
<groupId>javax.servletgroupId>
<artifactId>javax.servlet-apiartifactId>
<version>3.1.0version>
<scope>providedscope>
dependency>
<dependency>
<groupId>org.springframeworkgroupId>
<artifactId>spring-webmvcartifactId>
<version>5.2.5.RELEASEversion>
dependency>
<dependency>
<groupId>org.springframeworkgroupId>
<artifactId>spring-txartifactId>
<version>5.2.5.RELEASEversion>
dependency>
<dependency>
<groupId>org.springframeworkgroupId>
<artifactId>spring-jdbcartifactId>
<version>5.2.5.RELEASEversion>
dependency>
<dependency>
<groupId>com.fasterxml.jackson.coregroupId>
<artifactId>jackson-coreartifactId>
<version>2.9.0version>
dependency>
<dependency>
<groupId>com.fasterxml.jackson.coregroupId>
<artifactId>jackson-databindartifactId>
<version>2.9.0version>
dependency>
<dependency>
<groupId>org.mybatisgroupId>
<artifactId>mybatis-springartifactId>
<version>1.3.1version>
dependency>
<dependency>
<groupId>org.mybatisgroupId>
<artifactId>mybatisartifactId>
<version>3.5.1version>
dependency>
<dependency>
<groupId>mysqlgroupId>
<artifactId>mysql-connector-javaartifactId>
<version>5.1.9version>
dependency>
<dependency>
<groupId>com.alibabagroupId>
<artifactId>druidartifactId>
<version>1.1.12version>
dependency>
dependencies>
<build>
<resources>
<resource>
<directory>src/main/javadirectory>
<includes>
<include>**/*.propertiesinclude>
<include>**/*.xmlinclude>
includes>
<filtering>falsefiltering>
resource>
resources>
build>
注册ServletContext监听器的实现类ContextLoaderListener,用于创建Spring容器及将创建好的Spring容器对象放入到ServletContext的作用域中。
配置中央调度器时需要注意,SpringMVC的配置文件名与其它Spring配置文件名不相同。这样做的目的是Spring容器创建管理Spring配置文件中的bean,SpringMVC容器中负责视图层bean的初始。
用户点击index.html中的注册学生—》跳转到addStudent.html,添加学生信息—》studentController中的addStudent方法接收到信息—》调用service,把信息传给service层的addStudent()—》service层调用dao层,把信息传给dao层方法—》dao获取数据往上传
在上述功能的基础上
Index.html
listStudent.html,发送ajax请求
当Controller中的处理器抛出异常的时候,框架就会去全局异常处理类中,找指定异常的处理方式,这个全局异常类的功能和controller的处理器一样,都能传数据和页面
定义三个异常类:NameException、AgeException、MyUserException。其中MyUserException是另外两个异常的父类。
MyUserException
AgeException
NameException
NameException、AgeException defaultException三个异常的响应页面
preHandle方法一般都只用这个方法
postHandle方法
afterCompletion方法