java优雅的SSM框架(二):SpringMVC框架(由浅入深,深度解读)

 

 

 

 

 

 

 

 

Spring MVC框架

什么是MVC:

MVC是一种设计模式,将视图和控制层分离开来

mvc模式介绍

Spring MVC的五大核心组件:

1.DispatcherServlet(控制器,请求入口):前端控制器,接收请求,依据HandlerMapping的配置调用模型(Controller)

2. HandlerMapping(控制器,请求派发):包含了请求路径与模型的对应关系,通过 HandlerMapping前度控制器DispatcherServlet可以将用户的http请求映射到Controller

3. Controller(控制器,请求处理流程):控制器模型,负责业务逻辑

4.ModelAndView(模型,封装业务处理结果和视图):封装了处理结果,还可能有视图名

5.ViewResolver(视图,视图显示处理器):视图解析器,DispatcherServlet根据ViewResolver的解析调用真正的视图对象来生成对应的页面

Spring MVC五大组件之间的关系:

1.DispatcherServlet收到请求后,根据HandlerMapping的配置,调用相应的Controller来处理业务逻辑

2.Controller将处理结果封装成ModelAndView对象,然后返回给DispatcherServlet

3.DispatcherServlet根据ViewResolver的解析,调用相应的视图对象来生成相应的页面

Spring Web MVC的处理流程

简易描述

复杂描述

流程解析:

1.启动tomcat服务器,服务器根据web.xml里面的<servlet>配置自动创建DisptacherServlet对象并解析<init-param>标签内容解析applicationContext.xml文件,自动启动Spring容器

2.Spring容器启动后,加载applicationContext.xml文件中的<bean>组件,创建HandlerMapping对象,然后根据标签配置HandlerMapping对象的属性,也就是用户访问的路径信息

3.等到用户访问路径时,DisptacherServlet(前端控制器)接收用户的请求,然后根据在HandlerMapping中配置的路径信息,调用相应的Controller

4.在Controller内创建ModelAndView对象,并返回给DisptacherServler前端控制器

5.然后前端控制器根据在ViewResolver(视图解析器)中的配置得到相应的视图

6.前端控制器调用视图向浏览器响应

流程解析简化说法

浏览器访问服务器,前端控制器接收用户请求,根据在HandlerMapping中配置的相关信息,调用控制器,在控制器内将相应的数据封装进ModelAndView,然后将ModelAndView返回给前端控制器,前端控制器根据视图解析器将ModelAndView封装的数据返回给前端页面。

搭建Spring MVC的环境

SpringMVC环境

编程步骤(常规和注解)


1.常规:

step1 导包 spring-webmvc

step2 添加spring容器的配置文件

step3 配置前端控制器DispatcherServlet(Spring容器给我们写了个Servlet)

step4 写Controller(处理器),访问Controller控制器,进入Controller类

step5 在Spring容器的配置文件中配置HandlerMapping

step6 在Spring容器的配置文件中配置ViewResolver

step7 编写前端页面

2.注解

step1 导包 spring-webmvc

step2 添加spring容器的配置文件

step3 配置前端控制器DispatcherServlet(Spring容器给我们写了个Servlet)

step4 写Controller(处理器)

访问Controller控制器,进入HelloController类

/**

*用注解实现Controller

* 1.如果不实现Controller接口,可以再处理器中添加多个方法,每一个方法各自处理某种请求

* 2.方法名不做要求,返回类型自定

* 3.使用@Controller注解将改处理器纳入spring容器进行管理

* 4.使用@ResultMapping告诉前端控制器,请求路径与处理方法的对应关系

* http//localhost:8080/springmvcdemo3(项目)/hello()/hello.do(方法)

*/

@Controller
@RequestMapping("/hello")
public class HelloController {

//localhost:8080/springmvcdemo3(项目)/hello(类)/hello.do(方法)
@RequestMapping("/hello.do")
public String hello(){
System.out.println("hello hello");
return "login";
}
//方法1.不经常使用public String login(HttpServletRequest request)
@RequestMapping("/login.do")
public String login(HttpServletRequest request){
String username = request.getParameter("username");
String password = request.getParameter("password");
System.out.println(username+password);
return "index";
}
//方法2.不经常使用 public String login2(String username, String password)
@RequestMapping("/login2.do")
public String login2(String username, String password){
System.out.println(username+password);
return "index";
}
//方法3.不经常使用public String login3(@RequestParam("username")String username, @RequestParam("password")String password){
@RequestMapping("/login3.do")
public String login3(@RequestParam("username")String username, @RequestParam("password")String password){
System.out.println(username+password);
return "index";
}
//方法4.经常使用 使用javabean的方法 public String login4(User user){
@RequestMapping("/login4.do")
public String login4(User user){
System.out.println(user);
return "index";
}

//方法5.转发 向页面传值
@RequestMapping("/login5.do")
public String login5(User user,HttpServletRequest request){
System.out.println(user);
//将数据转发到index.jsp
request.setAttribute("user",user);
//默认转发到localhost:8080/项目名/类名/方法名.do
return "index";
}

//方法6.使用ModelAndView向页面传值
@RequestMapping("/login6.do")
public ModelAndView login6(User user){
System.out.println(user);
Map<String,Object> map = new HashMap<String,Object>();
map.put("user",user);
ModelAndView mav = new ModelAndView("index",map);
return mav;
}
//方法7.使用ModelMap向页面传值
@RequestMapping("/login7.do")
public String login7(User user, ModelMap map){
System.out.println(user);
map.addAttribute("user",user);
return "index";
}
//方法8.使用Session向页面传值
@RequestMapping("/login8.do")
public String login8(User user, HttpSession session){
System.out.println(user);
session.setAttribute("user",user);
return "index";
}
//方法9.重定向 直接返回 return "redirect:index.do";
@RequestMapping("/login9.do")
public String login9(User user){
System.out.println(user);
return "redirect:index.do";
}
@RequestMapping("/index.do")
public String index(User user){
System.out.println(user);
return "index";
}

//方法10.重定向 使用ModelAndView 和 RedirectView两个对象封装要重定向的路径
@RequestMapping("/login10.do")
public ModelAndView login10(User user){
System.out.println(user);
RedirectView redirectView = new RedirectView("index.do");
ModelAndView modelAndView = new ModelAndView(redirectView);
return modelAndView;
}
}

注意:方法4要使用实体类,注意建立User类

共有四种接收页面数据的方式,六种向页面传值的方式1

当然这只是jsp的页面,如果是HTML的页面,我们可以用ajax技术向页面传值,用json数据向页面返回值(@RequestBody和@RestControllrt注解的使用)这点我们以后说

step5 在Spring容器的配置文件中配置HandlerMapping

step6 在Spring容器的配置文件中配置ViewResolver

step7 编写前端页面

login.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<html>
<head>
<title>登录页面</title>
</head>
<body>
<div align="center">
<br><br><br>
方法1.不经常使用public String login(HttpServletRequest request)
<form action="/hello/login.do" name="form-login">
<input type="text" placeholder="账号" name="username"><br>
<input type="password" placeholder="密码" name="password"><br>
<input type="submit" value="登录"><br>
</form>
<br><br><br>
方法2.不经常使用 public String login2(String username, String password)
<form action="/hello/login2.do" name="form-login">
<input type="text" placeholder="账号" name="username"><br>
<input type="password" placeholder="密码" name="password"><br>
<input type="submit" value="登录"><br>
</form>
<br><br><br>
方法3.不经常使用public String login3(@RequestParam("username")String username, @RequestParam("password")String password){
<form action="/hello/login3.do" name="form-login">
<input type="text" placeholder="账号" name="username"><br>
<input type="password" placeholder="密码" name="password"><br>
<input type="submit" value="登录"><br>
</form>
<br><br><br>
方法4.经常使用 使用javabean的方法 public String login4(User user){
<form action="/hello/login4.do" name="form-login">
<input type="text" placeholder="账号" name="username"><br>
<input type="password" placeholder="密码" name="password"><br>
<input type="submit" value="登录"><br>
</form>
<br><br><br>
方法5.转发 向页面传值public String login5(User user,HttpServletRequest request){
<form action="/hello/login5.do" name="form-login">
<input type="text" placeholder="账号" name="username"><br>
<input type="password" placeholder="密码" name="password"><br>
<input type="submit" value="登录"><br>
</form>
<br><br><br>
方法6.使用ModelAndView向页面传值 public ModelAndView login6(User user){
<form action="/hello/login6.do" name="form-login" method="post">
<input type="text" placeholder="账号" name="username"><br>
<input type="password" placeholder="密码" name="password"><br>
<input type="submit" value="登录"><br>
</form>
<br><br><br>
方法7.使用ModelMap向页面传值 public String login7(User user, ModelMap map){
<form action="/hello/login7.do" name="form-login">
<input type="text" placeholder="账号" name="username"><br>
<input type="password" placeholder="密码" name="password"><br>
<input type="submit" value="登录"><br>
</form>
<br><br><br>
方法8.使用Session向页面传值 public String login8(User user, HttpSession session){
<form action="/hello/login8.do" name="form-login">
<input type="text" placeholder="账号" name="username"><br>
<input type="password" placeholder="密码" name="password"><br>
<input type="submit" value="登录"><br>
</form>
<br><br><br>
方法9.重定向 直接返回 return "redirect:index.do" 访问到index.do定向到指定页面;
<form action="/hello/login9.do" name="form-login">
<input type="text" placeholder="账号" name="username"><br>
<input type="password" placeholder="密码" name="password"><br>
<input type="submit" value="登录"><br>
</form>
<br><br><br>
方法10.重定向 使用ModelAndView 和 RedirectView两个对象封装要重定向的路径
<form action="/hello/login9.do" name="form-login">
<input type="text" placeholder="账号" name="username"><br>
<input type="password" placeholder="密码" name="password"><br>
<input type="submit" value="登录"><br>
</form>
</div>
</body>
</html>

hello.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>输出提示</title>
</head>
<body>
${ msg }
</body>
</html>

index.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>主页</title>
</head>
<body>
<h3>welcome to index${user}</h3>
</body>
</html>

 

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值