内容
1.SpringMVC的介绍
2.SpringMVC的工作流程
3.SpringMVC的搭建以及配置文件说明
4.SpringMVC值传递的方式
SpringMVC的介绍
SpringMVC属于SpringFrameWork的后续产品,已经融合在Spring Web Flow里面。Spring框架提供了构建Web应用程序的全功能MVC模块。使用Spring可插入的MVC架构,从而在使用Spring进行WEB开发时,可以选择使用Spring的SpringMVC框架或者集成其他的MVC开发框架,如Struts1(现在不用),Structs2(一般老项目使用)等。
特点:
1.SpringMVC是Spring的后续产品。
2.控制层的框架(Servlet的封装)
3.基于MVC的设计模式
M:实体,dao,service
V:HTML,Jsp,velocity
C:控制层,SpringMVC,Struts2
SpringMVC工作流程
工作原理图:
图片来源:ProcessOn用户:小熊VIP工作原理文字说明 :
1、用户发送请求至前端控制器DispatcherServlet。
2、DispatcherServlet 收到请求调用HandlerMapping处理器映射器。
3、处理器映射器找到具体的处理器,生成处理器对象及处理器拦截器(如果有则生成)一并返回给DispatcherServlet。
4、DispatcherServlet 调用HandlerAdapter处理器适配器。
5、HandlerAdapter 经过适配调用具体的处理器(Controller,也叫后端控制器)方法。
6、处理器执行完成返回ModelAndView给HandlerAdapter。
7、HandlerAdapter 将处理器执行结果ModelAndView返回给DispatcherServlet。
8、DispatcherServlet 将ModelAndView传给ViewReslover 视图解析器。
9、ViewReslover 解析后返回具体View给DispatcherServlet。
10、DispatcherServlet 调用视图解析器根据View进行渲染视图(即将模型数据填充至视图
中)。
11、将渲染后的页面返回到前端控制器DispatcherServlet。
12、DispatcherServlet 将渲染后的页面响应到客户端。
名词解释:
1.DispatcherServlet(前端控制器):核心组件,协调调用其他组件。
2.HandlerMapping(映射处理器):根据请求查找处理该请求的处理器(Handler)。
3.Handler:处理请求的方法。
4.HandlerAdapter(处理器适配器):适配参数以及调用执行处理器方法。
5.ModelAndView:封装跳转的页面以及向页面传递的参数。
6.ViewResolver(视图解析器):查找跳转的页面并将数据解析到该页面。
SpringMVC的搭建
1.创建Web项目依赖架包:
2.在Web.xml中配置前端控制器:
<!-- 前端控制器-->
<servlet>
<servlet-name>springmvc</servlet-name>
<!-- 前端控制类-->
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!-- 指定springmvc配置文件路径,默认路径WEB-INF/servlet-name+"-"servlet.xml(springmvc-servlet.xml)-->
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:springmvc.xml</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<!-- “/”代表的是所有格式的请求,或者*.do,不可以*.*-->
<url-pattern>/</url-pattern>
</servlet-mapping>
3.编写SpringMVC的配置文件:
(其他非默认的映射处理器和处理器适配器以及自定义的视图解析器,和以bean节点的方式完成请求和处理器的对应关系)
<?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
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc.xsd">
<!--请求为"/login",由LoginController处理请求-->
<bean id="/login" class="com.springmvc.controller.LoginController"/>
</beans>
4.自定义处理器类(实现接口):
LoginController类实现Controller接口:
public class LoginController implements Controller {
@Override
public ModelAndView handleRequest(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws Exception {
ModelAndView mv=new ModelAndView();
mv.setViewName("index");
mv.addObject("msg","登陆成功");
System.out.println(1111111);
return mv;
}
}
5.测试:
直接在浏览器地址栏输入:项目网址/login
SpringMVC配置文件补充说明:
<!-- 实例化非默认的映射处理器-->
<bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"/>
<!-- 实例化非默认的适配处理器-->
<bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"/>
<!-- 定义视图解析器的前后缀,这样return "直接写网页名"不用再带后缀.jsp了-->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/"/>
<property name="suffix" value=".jsp"/>
</bean>
自定义处理器类(注解方式):
1.在spring的配置文件中开启注解扫描和启用MVC的注解驱动:
<!-- 扫包-->
<context:component-scan base-package="com.springmvc.controller"/>
<!-- 开启MVC注解驱动-->
<mvc:annotation-driven conversion-service="myConverter"/>
2.通过注解定义处理器类
这里我新建一个RegController.java文件:
@Controller//实例化次Controller类
public class RegController {
@RequestMapping("reg")//这个注解是为例映射匹配的请求"reg"
public ModelAndView reg(){
ModelAndView mv=new ModelAndView();
mv.setViewName("index");
mv.addObject("msg","注册1");
return mv;
}
}
说明:
@RequestMapping("请求名"):匹配请求,可以加在类上或者方法上,注解里的请求名是可以省略的。
注意:
1、类上可以不写@RequestMapping注解,但是类中的方法要作为一个处理器方法就必须写该注解。
2、如果类上和方法上都有该注解,同时注解里的请求名都省略了,这时,这个方法为一个默认请求的方法。即在访问http://locathost:8080/springmvc01/时,默认优先访问静态首页,如果没有静态首页则访问后台的默认请求。
SpringMVC值传递方式
后台传前端
1.通过(Model,ModelAndView,Map,ModelMap),request请求:
案例说明:
返回类型是String,默认将String类型作为视图名;处理器方法中的类类型参数会自动实例化。
@Controller
public class RegController {
@RequestMapping("reg")
public ModelAndView reg(){//ModelAndView传值
ModelAndView mv=new ModelAndView();
mv.setViewName("index");
mv.addObject("msg","注册1");
return mv;
}
@RequestMapping("reg1")//返回类型是String类型作为视图名;处理器中的类类型参数会自动实例化
public String reg1(Model m){//Model传值
m.addAttribute("msg","通过model将数据传到前端页面");
return "index";
}
@RequestMapping("reg2")
public String reg2(Map m){//Map传值
m.put("msg","通过map将数据传到前端页面");
return "index";
}
@RequestMapping("reg3")
public String reg3(ModelMap m){//ModelMap传值
m.put("msg","通过ModelMap 将数据传到前端页面");
return "index";
}
@RequestMapping("reg4")
public String reg4(){//返回类型是String类型作为视图名;处理器中的类类型参数会自动实例化
return "index";
}
}
2.通过Session传值:
@RequestMapping("reg5")
public String reg5(HttpSession session){
session.setAttribute("msg","通过session将数据传输到前端页面");
return "index";
}
前端jsp页面:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
响应:${msg}
${uid}
</body>
</html>
前端数据传输到后台中
1.后台通过int,String等类型接收页面传输的数据:
前端jsp页面:
<a href="user/getUById?uid=1&uname=lkk">编辑</a>
<%--如果链接上加上user表示对应的类中加上了注解@RequestMapping("user"),
再访问处理器方法"getUById",表示是一个二级请求,
在这里我选用了一级请求:直接访问处理器方法。如下:--%>
<a href="getUById?uid=1&uname=lkk">编辑</a>
后台通过int,String接收页面的数据:
@RequestMapping("getUById")
public String getUById(Model m,int uid,String uname) {
m.addAttribute("msg", u);
return "main";
}
2.后台通过自定义类中接收页面传输的数据:
后台User实体类:
public Class User{
private int uid;
private String uname;
}
通过自定义类型User接收页面提交的数据:
@RequestMapping("getUById")
public String getUById(Model m,User u) {
m.addAttribute("msg", u);
return "index";
}
刚刚入门的开发者可以看一下这个教程,希望对你的学习有所帮助!