springMVC
M:模型层,包含实体类,业务逻辑层,数据访问层;
v: 视图层,html,javascript,vue等
c:控制层,它是用来接收客户端的请求,并返回响应客户端的组件,Servelet组件
SpringMVC
1、轻量级,基于MVC的框架
2、具备IOC和AOP
3、完全基于注解开发
client(客户端)-(http请求)-tomcat-control(携带数据的优化)
3、基于注解的springmvc框架开发的步骤
1、新建项目,选择webapp模板;
2、修改目录,添加缺失的test,java.resources(两套),并修改目录属性
3、修改pom.xml文件,添加springmvc的依赖,添加servelet的依赖;
4、添加springmvc.xml的配置文件,指定包扫描,添加视图解析器;
删除web.xml文件新建web.xml
分析web请求
web请求
index.jsp请求-DIspatcherServlet(核心处理器)-springmvc的处理器
DIspatcherServerlet必须在web.xml中注册
5、@RequestMapping详细注解(用映射访问服务器访问的路径)
1)注解加到方法上,是为了此方法注册一个可以访问的名称
@Controller//交给spring 去创建对象
public class MyDemo {
@RequestMapping("/demo")
public String demo(){
return "main";//可以直接跳到jsp上
}
}
<a href="${pageContext.request.contextPath}/demo.action">页面跳转</a>
2)此注解可以加到类上,相当于包名(虚拟路径),区分不同类名相同action的名称
@RequestMapping("/zar")
public class MyDemo1 {
3)区分get和post的请求
6)5种数据提交的优化方式
1、单个数据提交
2、对象封装数据提交
在提交请求,保证请求参数的实体类型与成员变量的名称保持一致,可以自动创建对象,自动类型转换,自动封装到对象中3WT4g ,自动提交数据
通过封装类完成数据提交;
3、动态占位符的提交
仅限于超链接:一杠一直,一杠一大括号,
4)映射名称不一致
提交请求参数与action方法的形参名称不一致使用注解来解析@RequestParam
5)、手工提交
@RequestMapping("/five")
public String five(HttpServletRequest request){
String name= request.getParameter("2name");
int age= Integer.parseInt(request.getParameter("2age"));
System.out.println("姓名:" + name +"姓名:"+ age);
return "main";
7、中文乱码的解决方案
(1)web.xml中配置中文编码过滤器 fileter解决post请求乱码
<filter>
<filter-name>encode</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>
<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>encode</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
8、action的返回值
String:客户端资源的地址,自动拼接前缀和后缀,还可以自动屏蔽拼接字符串,可以返回指定的路径;
object: 返回json格式对象,自动将对象或集合转为json,使用jacson工具进行转换,必须添加jackson依赖,一般用于ajax请求
void:无返回值,用于ajax;
基本数据类型用于ajax;
9、完成ajax请求访问服务器,返回学生集合
1)添加jacson依赖
2)在webapp目录下新建js目录,添加jquery函数库
3)在index.jsp上添加导入函数库
4)在action添加注解@ResponseBody,用来处理ajax请求
5)在sptringmvc.xml添加注解驱动<mvc:annotationdriven>,他用来解析@ResponseBody
14、springMVC拦截器
1、针对请求和响应进行的额外处理,在请求和响应的时候添加预处理,后处理和最终处理
2拦截器的执行时机
preHandle:在请求之前进行操作,预处理;
postHandle:在请求处理之后,但结果还没有渲染前进行操作,可以改变相应
aftercompletion:所有请求响应结束后善后工作,清理对象,关闭资源,善后处理
拦截器实现的方式
继承HandlerInterceptorAdapter
实现 HandlerInterceptor接口
拦截器实现的步骤
1、改造登陆方法,在session中存储用户信息,用于进行权限验证
2、开发拦截器的功能,实现handlerInterceptor接口,重写preHandle()方法;
3、在springmvc.xml文件中注册拦截器