什么是springMVC?
它是基于mvc开发模式的框架,用来优化控制器,它是spring家族的一员,springMVC也具备IOC和AOP功能
什么是MVC?
它是一种开发模式,它是模型视图控制器的简称,所有的web应用都是基于MVC开发
Model:模型层,包含实体类,业务逻辑层,数据访问层
View:视图层,html,javaScript,vue等都是视图层,用来显示数据
Controller:控制器,它是用来接收客户端的请求,并返回相应到客户端的组件,Servicet就是组件
创建一个SpringMVC项目步骤是什么?
第一步:创建一个空工程,创建maven项目,使用webapp模板
第二步:创建好的maven项目,目录有缺失,我们自行创建好
src目录下创建test目录
main目录下创建java和resources目录
test目录下也建java和resources目录
并修改目录的属性
第三步:修改pom.xml文件
添加springMVC依赖,添加servlet依赖
所有web请求都是基于servlet
在<build>指定资源文件
<build>
<resources>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.xml</include>
<include>**/*.properties</include>
</includes>
</resource>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/*.xml</include>
<include>**/*.properties</include>
</includes>
</resource>
</resources>
</build>
第四步:在resources目录下新建springmvc.xml文件
在webapp目录下新建admin目录,在admin目录下新建main.jsp
第五步:webapp-->WEB-INF-->web.xml文件版本太低删掉,重新创建一个,file-->project Settings-->选中模块下的web减号删除,在点加号新建一个,随便改一个名字,不能用web,新建完成后在重命名为web.xml
第六步:
创建一个DemoAction类
类的上方加@Controller注解,该类代表控制器类(控制层/表现层)
*方法上添加@RequestMapping("/ demo"),在方法上添加这个注解是为这个方法注册一个可以访问的路径
*类上添加@RequestMapping("/ demo"),相当于包名,访问方法上的路径,还需要添加类上的路径
解决post请求中文乱码问题
首先在web.xml文件中配置中文编码过滤器
设置以下三个参数的值
private java.lang.String encoding;
private boolean forceRequestEncoding;
private boolean forceResponseEncoding;
<filter>
<filter-name>filter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<!--
private java.lang.String encoding;
private boolean forceRequestEncoding;
private boolean forceResponseEncoding;
-->
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
<init-param>
<param-name>forceRequestEncoding</param-name>
<param-value>true</param-value>
</init-param>
<init-param>
<param-name>forceResponseEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>filter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
处理器的方法返回值
使用@Contoller注解的处理器的方法,其返回值常用的有四种类型:
第一种:ModelAndView,返回数据和视图对象,现在用的少
第二种:String,客户端资源的地址,自动拼接前缀后缀,还可以屏蔽自动拼接字符串,可以指定返回的路径。
第三种:无返回值void,一遍用于ajax请求
第四种:返回对象类型,返回json格式的对象,自动将对象或集合转为json,使用jackson工具进行转换,必须要添加jackson依赖,一般用于ajax请求。
-------------------------------------------------------
完成ajax请求访问服务器,返回学生集合
1)添加jackson依赖
<!--添加jackson-->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.9.8</version>
</dependency>
2)在webapp目录下新建js目录,添加jQuery函数库
3)在index.jap页面上导入函数库。
4)在cation上添加注解@ResponseBody,用来处理ajax请求。
5)在resources目录下springmvc.xml文件中添加驱动注解<mvc:annotationdriven/>,它用来解析@ResponseBody注解
<!--添加包扫描-->
<context:component-scan base-package="com.bjpowernode.controller"></context:component-scan>
<!--
不用添加视图解析器,因为处理的是ajax请求
ajax请求必须添加注解驱动,专门用来处理ajax请求
-->
<mvc:annotation-driven></mvc:annotation-driven>
--------------------------------------------------------------
在springmvc中我们已经设置好默认的跳转路径(前缀后缀)那么想跳转到其他路径怎么办?
resources目录下的springmvx.xml配置文件中已经配置好默认的跳转路径,即前缀和后缀
<!--添加包扫描-->
<context:component-scan base-package="com.bjpowernode.controller"></context:component-scan>
<!--添加视图解析器-->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<!--前缀-->
<property name="prefix" value="/admin/"></property>
<!--后缀-->
<property name="suffix" value=".jsp"></property>
</bean>
这种情况下就用到了两个字符串:重定向:redirect: 和 请求转发:forward:
在bjpowernode-->controller目录下类中添加以下方法
请求转发到JSP页面forward:用法
@RequestMapping("/five")
public String five(){
System.out.println("请求转发到页面");
return "forward:/admin/login.jsp";
}
请求转发到action,forward:用法
@RequestMapping("/two")
public String two(){
System.out.println("请求转发到action");
//forward可以屏蔽前缀后缀的的拼接,请求转发就使用它
return "forward:/otch.action";//默认是请求转发,使用视图解析器拼接前缀后缀进行跳转
}
使用redirect:重定向到JSP页面
@RequestMapping("/four")
public String four(){
System.out.println("重定向页面");
return "redirect:/admin/main.jsp";
}
使用redirect:重定向到action
@RequestMapping("/three")
public String three(){
System.out.println("重定向action");
return "redirect:/otch.action";
}
-----------------------------------------------------------
日期处理
日期的提交处理
A单个日期处理:要使用注解@DateTimeFormat,此注解必须搭配springmvc.xml文件中的<mvc:annotationdriven>标签
首先在jsp页面写一个表单提交一个日期
由于日期是不是被服务器直接接收的,所以要使用@DateTimeFormat注解,使用这个注解需要在springmvc.xml文件中注册
@DateTimeFormat注解的patter属性是设置注入日期的样式,JSP页面输入一个日期,jsp页面输入的日期其实是字符串,而@DateTimeFormat注解负责将时间字符串转换为时间注入方法形参
由于java中的时间,输出比较丑,所以用SimpleDateFormat类来美化一下
对比
B.类中全局日期处理
优点:只需要添加一个@InitBinder注解,不需要去springmvc.xml文件中注册注解驱动。
注册一个注解,用来解析本类中所有的日期类型,自动转换
@InitBinder注解:数据绑定,能够进行日期,数字,货币以及自定义类型的转换
initBinder方法参数WebDateBinder:数据绑定
registerCustomEditor方法:注册一个自定义的转换器
registerCustomEditor(转换的类型,转换的工具)方法参数两个,第一个Date.class第二个
new CustomDateEditor(日期格式sf,是否允许为空是)
日期格式:
日期的回显处理
在from表单发送一个时间字符串到服务器,然后在返回到JSP页面显示,或者直接从数据库读取学生的出生日期显示到JSP页面
首先在,带有@RequestMapping注解的方法上添加形参,HttpServletResquest request
使用request.setAttribute方法把时间放到请求域中,在JSP页面使用${}取出
----------------------------------------------------------
Date时间类型的数据怎么显示在页面页面上
创建Student类,属性有String name Date shengri
1.首先在index.jsp页面写一个a标签
2.写studentAge,路径的方法
在studentAge方法中,创建了4个stundet对象,并把student对象放到List集合中,再把List集合方法request请求域中,最后在show.jsp页面展示List集合
3. show.jsp页面展示List集合
使用<c:forEach>循环List集合,输出内容,由于没有处理日期格式,输出内容为
输出日期格式很丑,需要修改日期格式,于是用到了jstl标签,
使用jstl标签,需要导入依赖
<!--导入jstl依赖-->
<dependency>
<groupId>jstl</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
然后再JSP页面导入核心标签库和导入jstl格式化标签库
最后在使用<fmt:formatDate value="${日期} patter="日期格式yyyy-MM-dd""></fmt:formatDate>标签
对比
----------------------------------------------------------------
springmvc拦截器
针对请求和响应的额外的处理,在请求和响应的过程中添加预处理,后处理和最终处理。
拦截器执行的时机
1.preHandil():在请求被处理之前进行操作
2.postHandle():在请求被处理之后,但是结果还没有渲染前进行操作,可以改变响应结果。
3.afterCompletion:所有的请求响应结束后执行善后工作,清理对象,关闭资源
拦截器实现的两种方式
继承HandlerInterceptorAdapter的父类
实现HandlerInterceptor接口,推荐使用现实接口方式
拦截器的实现步骤
1.改造登陆方法,在session中存储用户信息,用于进行权限验证
把用户的账号放到session会话域中
2.开发拦截器的功能,实现HandlerInterceptor接口,重写preHandle()方法
创建一个类,现实HandlerInterceptor接口,重写preHandler方法
在方法中判断session会话域中是否为空,如果session中有用户名,则请求转发到登陆页面
3.在springmvc.xml文件中注册拦截器
没有登陆账号,访问受保护的jsp或者访问action,都是请求转发到登陆页面,登陆之后,可以访问受保护的jsp页面