Spring MVC简介

Spring Web MVC
Spring Web Mvc是Spring框架一个非常重要的功能模块
实现了MVC结构,便于简单快速开发MVC结构的WEB程序
提供的API封装了Web开发中常用的功能,简化Web过程
Spring Web MVC的核心组件
Spring MVC提供了Model View和Controller相关的主要组件
1.DispatcherServlet(控制器,请求入口)
2.HandlerMapping(控制器,请求派发)
3.Controller(控制器,请求处理流程)
4.ModelAndView(模型,封装业务处理结果和视图)
5.ViewResolver(视图,视图显示处理器)
Spring MVC处理流程
request->DispatcherServlet->HandlerMapping->Controller->ModelAndView->ViewResolver->view->response
1.浏览器向Spring发出请求,请求交给前端控制器DispatcherServlet处理
2.前端控制器通过HandlerMapping找到相应的Controller组件处理请求
3.执行Controller组件约定方法处理请求,在约定方法调用模型组件完成业务处理
约定方法可以返回一个ModelAndView对象,封装了业务处理结果的数据和视图名称
信息
4.控制器接收到ModelAndView之后,调用ViewResolver组件
定位View(JSP)并传递数据信息,生产响应界面结果

基于XML配置的MVC应用
搭建Spring Web MVC环境
搭建SpringWeb MVC开发环境的主要步骤:
1.创建Web项目
2.导入支持架包
commons-loggin-1.1.3.jar
spring-beans-4.0.0.RELEASE.jar
spring-context-4.0.0.RELEASE.jar
spring-core-4.0.0.RELEASE.jar
spring-expression-4.0.0.RELEASE.jar
spring-web-4.0.0.RELEASE.jar
spring-webmvc-4.0.0.RELEASE.jar
3.在src添加Spring的xml配置文件
名称可以自定义,例如spring-mvc.xml
4.在Web.xml中配置DispatcherServlet前端控制器组件
a.DispatcherServlet组件在spring mvc中已提供,只需要配置即可
b.配置DispatcherServlet,同时指定xml配置文件
c.
标记容器是否在启动时加载这个Servlet
当值为0或者大于0是标识在应用启动时就加载这个Servlet
当只是一个负数或者没有指定时,则指示容器再该Servlet被选择时才加载
正数的值越小,启动该Servlet的优先级越高
dDispatcherServlet控制器配置

springmvc

org.springframework.web.servlet.DispatcherServlet


contextConfigLocation
classpath:spring-mvc.xml


1


springmvc
*.do

Controller组件
该组件负责执行具体的业务处理,可以调用DAO等组件,编写时需要实现Controller接口及约定方法
public class HelloController implements Controller{

	public ModelAndView handlerRequest(HtppServletRequest req,HttpServletResponse res)throws Exception{
		System.out.println("Hello,Spring MVC");
		return new ModelAndView("hello");
	}
}

ModelAndView组件
1.Controller组件约定HandleRequest方法执行后返回一个ModelAndView对象,
该对象封装模型数据和视图名响应信息
2.ModelAndView构造器
a.ModelAndView(String viewName)
b.ModelAndView(String viewName,Map model)
viewName是JSP页面的名称
model的数据存储到request的attitude中

HandlerMapping组件
1.通过HandlerMapping组件,DispatcherServlet控制器可以将客户端的HTTP请求映射到Controller组件上
2.SimpleUrlHandlerMapping
维护一个Http请求和Controller映射关系表(map),根据列表对应关系调用Controller
3.SimpleUrlHandlerMapping的使用



loginController
helloController




ViewResolver组件
1.所有的Controller组件都返回ModelAndView对象,封装了视图名
Spring中的视图以名字为标识,视图解析器ViewResolver通过名字来解析视图
2.Spring提供了多种视图解析器
常用的一种
InternalResourceViewResolver的使用




例如:视图名Hello,通过上述配置可以映射到hello.jsp

基于注解配置的MVC应用
Controller注解应用
1.推荐使用@Controller注解声明Controller组件这样可以使得Controller的定义更加灵活
可以不用实现Controller接口,请求处理的方法也可以灵活定义
@Controller
public class HelloController{

public String execute()throws Exception{
	return "hello";
}

}
2.为了使@Controller注解生效,需要在Spring的xml配置文件中开启组件扫描定义,并制定Controller组件所在包
<context:component-scan base-package=“com.spring”/>

@RequestMapping注解应用
1.@RequestMapping可以用在类定义和方法定义之上
2.@RequestMapping表明这个类或方法与哪一个客户请求对应
@Controller
@RequestMapping("/demo")
public class HelloController(){
@RequestMapping(“hello.do”)
public String execute()throws Exception{

	return "hello";
}

}
3.开启@RequestMapping注解映射时,需要在Spring的xml配置文件开启组件扫描
mvc:annotation-driven/
Spring MVC开发技巧
1.接受请求参数值
Spring MVC Web请求提交数据到控制器的方式
1.使用HttpServletRequest获取
a.Spring自动注入HttpServletRequest
b.优点:直接
缺点:需要自己处理数据类型的转换
@RequestMapping(“login.do”)
public String checkLogin(HttpServletRequest req)(){
String name= req.getParameter(“name”);
String pwd = req.getParameter(“pwd”);
System.out.println(name);
System.out.println(pwd);
User user = userSevice.login(name,pwd);
//处理过程省略
return"success";
}
2.使用@RequestParam注解
a.Spring会自动将表单参数注入到方法参数(名称一致)
b.使用@RequestParam注解,映射不一致名称
c.优点:参数类型自动转化,但是可能出现类型转换异常
@RequestMapping("/login.do")
public String checkLogin2(String name,@RequestParam(“pwd”)String password,HttpServletRequest req){
Sysstem.out.println(name);
System.out.println(pwd);
User user = userService.login(name,password);
//处理过程忽略
return"success";
}
3.使用自动机制封装成Bean对象
a.定义User实体类,属性名与表单组件的name相同

用户名:
密码:
public class User{
private String name;
private String pwd;
//省略set和get方法

}
@RequestMapping("/login3.do")
public String checkLogin3(User user){

System.out.println(user.getName());
System.out.println(user.getPwd());
User user = userService.login(user.getName(),user.getPwd());
//处理过程省略
return “success”;
}

向页面传值传值
当Controller组件处理后,需要向JSP传值时,可以使用一下3种方式:
1.直接使用HttpServletRequest和Session
request.setAttribute();
request.setAttribute();
2.使用ModelAndView对象
a.在Controller处理方法完成后返回一个ModelAndView对象,该对象包含显示视图名和 模型数据
b.Model数据会利用HttpServletRequest的attribute传递搭配JSP页面中
@RequestMapping(“login.do”)
public ModelAndView checkLogin4(String name,String pwd)(){
User user = userService.login(name,pwd);
Map<String,Object> date = new HashMap<String,Object>();
date.put(“user”,user);
return ModelAndView(“success”,date);
3.使用ModelMap参数对象
a.在Controller处理方法中追加一个ModelMap类型参数
b.ModelMap数据会利用HttpServletRequest的attribute传递到JSP页面
@RequestMapping(“login5.do”)
public String checkLogin5(String name,String pwd,ModelMap model){
User user = userService.login(name,pwd);
model.setAttribute(“user”,user);
return “success”;
}

}
4.使用@ModelAttribute注解
a.在Controller方法的参数部分或Bean的属性方法上使用
b.@ModelAttribute数据会利用HttpServletRequest的Attribute传递到JSP页面中
@RequestMapping(“login6.do”)
public String checkLogin6(@ModelAttribue(“User”)User user){
//处理过程省略
return “success”;
}
@ModelAttribute(“name”)
public String getName(){
return name;
}
Session存储
可以使用HttpServletRequest的getSession()方法访问
@RequestMapping(“login5.do”)
public String checkLogin5(String name,String pwd,ModelMap model,HttpServletRequest req){

User user = userService.login(name,pwd);
request.getSession.setAttribute("loginUser",user);
model.addAttribute("user",user);
return "success";
}

ModelMap介绍:ModelMap对象主要用于传递控制方法处理数据到结果页面,也就是说我们把页面上需要的数据放到ModelMap对象即可
addAttribute(String key,Object value);

©️2020 CSDN 皮肤主题: 数字20 设计师:CSDN官方博客 返回首页