框架SpringMVC

SpringMVC
SpringMVC定义:

什么是SpringMVC定义:
什么是SpringMVC?
SpringMVC是一种基于Spring实现了web MVC设计模式的请求驱动类型的轻量级web框架,使用了MVC的架构模式思想,将web层进行解耦,并管理应用所需的生命周期,为简化日常开发,提供了很大的便利
== 说白一点;SpringMVC是用来替代servlet的!==
== 说白一点;SpringMVC是用来替代servlet的!==

扩展:

SpringMVC和Servlet的关系?
SpringMVC的DispatcherServlet继承自FramworkServlet继承自HttpServletBean继承自HttpServlet(servlet)本质上是同一个东西
好比说Mybatis是对JDBC的封装,SpringMVC是对servlet的封装

1、SpringMVC是Spring框架的一个模块,所以Spring去整合SpringMVC无需整合包

2、SprigMVC是一个基于MVC的web框架

3、SpringMVC表现层:方便前后端数据的传输

4、SpringMVC拥有控制器,作用跟Struct2类似,接受外部请求,解析参数传递给服务器,最后显示视图

优势:
1、清晰的角色划分

2、灵活的配置功能

3、提供了大量的控制器接口和实现类

4、正在做到与view层的实现无关(jsp、freemark、velvetoclty、bootstrap)

5、国际化支持

6、面向接口编程

7、SSM完美结合Spring+SpringMVC+mybatis

SpringMVC的运行过程:

1、用户发送请求到前端控制器(DispatcherServlet)
2、前端控制器请求HandlerMapping查找Handle,可以根据xml文件配置或者注解进行查找
3、处理器映射器HandleMapping向前端控制器返回Handler
4、前端控制器调用处理器适配器去执行Handler
5、Handler执行完给前端控制器返回ModleLandview
6、处理适配器配置给前端控制器返回Modelandview、ModelAndView是SpringMvC框架到一个底层对象,包括Model和view
7、 前端控制器请求视图解析器(viewResolver)去进行视图解析,根据逻辑视图名解析成真正的视图
8、前端控制器将模型数据(Model)和view渲染,通俗点讲就是将模型数据填充到视图层,向客户端响应结果展示view页面

入门:
1、导包
SpringMVC是Spring框架对Web的支持,所以包Spring下载的包里面就有,另外

Spring和SpringMVC集成的时候不需要加集成的包

2、配置web.xml

<?xml version="1.0" encoding="UTF-8"?> SpringMVCDay01_01 default.jsp Springmvc org.springframework.web.servlet.DispatcherServlet

contextConfigLocation
classpath:springmvc-servlet.xml

1


Springmvc

/

3.配置springmvc-servlet.xml

<?xml version="1.0" encoding="UTF-8"?>

mvc:annotation-driven/

4.编写indexController.java
package com.controller;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.AbstractController;

public class IndexController extends AbstractController{

@Override
protected ModelAndView handleRequestInternal(HttpServletRequest arg0, HttpServletResponse arg1) throws Exception {
System.out.println(“hello,SpringMVC”);

ModelAndView modelAndView = new ModelAndView(“index”);
return modelAndView;
}

//当客户端发送http://localhost:9090/项目名/ index.html请求的时候,执行handleRequestInternal()
//方法,进行控制层处理,并且最后要返回一个ModelAndView对象, DispatcherServlet前端控制器通过视图解析器把数据
//填充到index.jsp去展示

}

5.部署项目,运行
浏览器访问:

http://localhost:8081/SpringMVCDay01_01/index.html

注解方式简化配置:
1、springmvc-servlet.xml配置

<?xml version="1.0" encoding="UTF-8"?>

<context:component-scan base-package=“com.controller”></context:component-scan>
mvc:annotation-driven</mvc:annotation-driven>

2.indexController.java

package com.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
public class IndexController {

@RequestMapping(“/index.html”)
public String index(){
System.out.println(“Hello,SpringMVC!”);
//返回逻辑视图名称index.jsp
return “index”;

}

}

F、参数传递
[view-controller]
视图层–控制层

package com.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;

@Controller
public class IndexController {

@RequestMapping(“/index.html”)
public String index(){
System.out.println(“Hello,SpringMVC!”);
//返回逻辑视图名称index.jsp
return “index”;

}

//方法1:
//@RequestMapping(“/welcome”)
//public String welcome(@RequestParam String username){
//System.out.println(“welcome,”+username);
返回逻辑视图名称index.jsp
//return “index”;
//
//}
/**

  • 方式2:
  • @param username
  • @return
  • value="username"代表参数名称
  • required代表参数是否必须为默认为true
  • defaultValue = "sa666"代表参数默认值

*/
方法2:
//@RequestMapping(value = “/welcome”)
//public String welcome(@RequestParam (value=“username”,required = false, defaultValue=“sa666” )String username){
//System.out.println(“welcome,”+username);
返回逻辑视图名称index.jsp
//return “index”;
//
//}

/**方式3

  • 还可以设置请求get还是post请求
  • @param username
  • @return
    */

//方法3:
@RequestMapping(value = “/welcome”,method = RequestMethod.GET,params=“username”)
public String welcome(String username){
System.out.println(“welcome,”+username);
//返回逻辑视图名称index.jsp
return “index”;

}

}

@requestmapping(“”)不仅可以配置在方法上,也可以配置在类上,如果配置在类上代表这个类都要加上这个路径

package com.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;

@Controller
@RequestMapping(“/user”)
public class UserController {

//http://localhost:8081/SpringMVCDay01_01/welcome?username=sa123
//http://localhost:8081/SpringMVCDay01_01/welcome?username=sa123
//{“/welcome”,“/”}代表可以配置多个请求路径,共同访问welcome方法
@RequestMapping({“/welcome”,“/”})
public String welcome(@RequestParam(value = “username”)String username){
System.out.println(“welcome,username:”+username);
return “index”;

}

}

[controller-view]
控制层–试图层

1.Model

model作用

package com.controller;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;

import com.pojo.User;

@Controller
public class IndexController {

/**

  • 参数传递:controller—>view
  • model作用:往前台传数据,可以传任意类型,比如对象 list等 通过EL表达式${获取}
  • 其实Model装到了request域
  • @param username
  • @param model
  • @return
    */

@RequestMapping(“/index.html”)
public String index(String username,Model model){
System.out.println(“Hello,SpringMVC!username:”+username);
//返回逻辑视图名称index.jsp
model.addAttribute(“username”, username);

User user = new User();
user.setUserName(username);

//没有键?键默认是这个对象的类型User
model.addAttribute(user);
model.addAttribute(“currentUser”, user);

return “index”;

}

}

2.index.jsp

<%@ page language=“java” contentType=“text/html; charset=ISO-8859-1”
pageEncoding=“utf-8”%>

Insert title here Hello,${username}
Hello,${user.userName}
Hello,${currentUser.userName}

2.ModelandView
包含视图信息和模型数据信息

package com.controller;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.servlet.ModelAndView;

import com.pojo.User;

@Controller
public class IndexController {

/**

  • 参数传递:controller—>view
  • model作用:往前台传数据,可以传任意类型,比如对象 list等 通过EL表达式${获取}
  • 其实Model装到了request域
  • @param username
  • @param model
  • @return
    */

@RequestMapping(“/index.html”)
public String index(String username,Model model){
System.out.println(“Hello,SpringMVC!username:”+username);
//返回逻辑视图名称index.jsp
model.addAttribute(“username”, username);

User user = new User();
user.setUserName(username);

//没有键?键默认是这个对象的类型User
model.addAttribute(user);
model.addAttribute(“currentUser”, user);

return “index”;

}

/**

  • ModelAndView
  • @param username
  • @param model
  • @return
    */
    @RequestMapping(“/index2.html”)
    public ModelAndView index2(String username,Model model){
    System.out.println(“Hello,SpringMVC!username:”+username);

//ModelAndView mView =new ModelAndView(“index”);
ModelAndView mView =new ModelAndView();
mView.setViewName(“index”);
mView.addObject(“username”, username);

return mView;

}

//转发和重定向
@RequestMapping(“/index3.html”)
public ModelAndView index3(String username,Model model){
System.out.println(“Hello,SpringMVC!username:”+username);
//转发:默认就是转发!
//重定向到index2这个页面
ModelAndView mView =new ModelAndView(“redirect:index2”);
//重定向到dao层controller
mView.addObject(“username”, username);

return mView;

}

}

3.Map类型Model

@RequestMapping(“/index4.html”)
public String index4(String username,Map<String,Object> model){
System.out.println(“Hello,SpringMVC!username:”+username);
model.put(“username”, username);
return “index4”;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值