Springmvc--01

1 作 为 Spring 框 架 一 部 分 , 能 够 使 用 Spring 的 IoC 和 Aop 。 方 便 整 合
Strtus,MyBatis,Hiberate,JPA 等其他框架。

2 SpringMVC 强化注解的使用,在控制器,Service,Dao 都可以使用注解。方便灵活。
使用@Controller 创建处理器对象,@Service 创建业务对象,@Autowired 或者@Resource
在控制器类中注入 Service, Service 类中注入 Dao。

web.xml 中注册中央调度器
在这里插入图片描述

在<servlet/>中添加<load-on-startup/>的作用是,标记是否在 Web 服务器(这里是 Tomcat)
启动时会创建这个 Servlet 实例,即是否在 Web 服务器启动时调用执行该 Servlet 的 init()方
法,而不是在真正访问时才创建。
它的值必须是一个整数。
➢	当值大于等于 0 时,表示容器在启动时就加载并初始化这个 servlet,数值越小,该 Servlet
的优先级就越高,其被创建的也就越早;
➢	当值小于 0 或者没有指定时,则表示该 Servlet 在真正被使用时才会去创建。
➢	当值相同时,容器会自己选择创建顺序。

该中央调度器为一个 Servlet,名称为 DispatcherServlet。中央调度器的全限定性类名在导入的 Jar 文件 spring-webmvc-4.3.9.RELEASE.jar 的第一个包 org.springframework.web.servlet
下可找到。

在这里插入图片描述

创建 SpringMVC 配置文件

<?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">
	
	
	
	<!--声明方式1:未使用注解
	 声明处理器对象,让他处理用户的某个请求 
	     class:处理器类的全限定名称
	     id:请求的uri地址,唯一值。 表示把这个请求交给处理器对象处理
	        id的值必须以“/”开头
	-->
	<!-- <bean id="/some.do" class="com.bjpowernode.controllers.MyController"/>-->
	
	
	 <!-- 声明方式2 使用注解
	 声明组件扫描器,指定@Controller注解所在的包名 
	 -->
	<context:component-scan base-package="com.rdz.controller"/>
	
	
	  <!--
                声明视图解析器, 是springmvc中对象,处理视图(View)。
                视图解析器能组成视图的完整路径,并创建视图View对象
     -->
	
	<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
		<!-- 前缀:表示视图的目录位置 -->
		<property name="prefix" value="/WEB-INF/view/"/>
		<!-- 后缀:表示视图文件的扩展名 -->
		<property name="suffix" value=".jsp"/>
	</bean>
	
	
	  <!-- 声明静态资源的处理 
          location:静态资源在web应用中的目录,最好不要使用 /WEB-INF目录
          mapping:访问静态资源的uri地址, uri中可以使用通配符 ** ,
                  **表示任意资源, 可以是目录,子目录,文件等资源。
     -->
	
		<mvc:resources location="/html/" mapping="/html/**"/>
		<mvc:resources location="/images/" mapping="/images/**"/>
		
		<!-- 加入注解驱动标签 消除冲突 -->
		
		<mvc:annotation-driven/>
		

</beans>

控制层代码:

1 未使用注解

package com.rdz.controller;

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

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

/**
 * 处理器类:处理用户的请求。
 * 
 * 处理器类也叫做后端控制器(back controller)
 *
 * MyController 看做是 Servlet
 */
public class MyController implements Controller {

	
	/**
	 * handleRequest:叫做处理器方法,可以处理用户的请求。
	 * 参数:
	 *   HttpServletRequest:请求对象
	 *   HttpServletResponse:应答对象
	 * 返回值:ModelAndView(表示请求的处理结果)
	 *   Model:表示数据
	 *   View:表示视图(jsp,html)
	 *   
	 * handleRequest看做是doGet()方法
	 */
	@Override
	public ModelAndView handleRequest(HttpServletRequest request,
	 HttpServletResponse response) throws Exception {

		//获取参数
		
		
		
		ModelAndView mav = new ModelAndView();
		
		//添加数据到Model
		//数据是存在request作用域的。 框架对象Model中的数据执行 request.setAttribute("msg", "欢迎..")
		mav.addObject("sss","rdz");
		//使用视图的逻辑名称,逻辑名称就是文件名
		//当配置了视图解析器后: 可以前缀 + 逻辑名称  + 后缀 组成视图的完整路径
		///WEB-INF/view/other.jsp
		mav.setViewName("other");
		//指定视图(jsp),视图完整路径,从web应用的根开始
		
		
		//mv是存放了数据和视图, 对数据和视图的处理在后续的代码中。
		return mav;
	}

}

2 使用注解

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

/**
 * @Controller:创建处理器类对象,默认是单例对象
 * @Controller:表示处理器类,能处理请求。
 *       位置:方法的上面
 */
@Controller
public class MyController {
	//自定义方法处理请求,方法类似于Servlet中的doGet, doPost
	
	/**
	 * @RequestMapping:处理器映射,作用是把指定的请求交给方法处理
	 *         属性:
	 *           1.value :必须用的属性, 表示请求的uri地址, 地址必须是唯一的。
	 *                     uri地址推荐使用“/”开头,是绝对地址。
	 *                     
	 *         位置:
	 *           1.在方法的定义上面,常用的位置
	 *           2.在类定义的上面
	 * 
	 * 处理器方法:使用@RequestMapping标注的方法是处理器方法。能处理请求。
	 */
	@RequestMapping(value={"/some.do","/other.do"}) //url-pattern
	public ModelAndView doSome(){
		System.out.println("执行处理器的doSome()");
		//调用Service处理请求,把结果放到ModelAndView
		ModelAndView mv = new ModelAndView();
		mv.addObject("msg", "SpringMVC Annotation");
		mv.addObject("fun", "doSome");
		mv.setViewName("show");
		return mv;
	}
	
	@RequestMapping(value={"/first.do","/second.do"}) //url-pattern
	public ModelAndView doOther(){
		System.out.println("执行处理器的doOther()");
		//调用Service处理请求,把结果放到ModelAndView
		ModelAndView mv = new ModelAndView();
		mv.addObject("msg", "SpringMVC Annotation");
		mv.addObject("fun", "doOther");
		mv.setViewName("show");
		return mv;
	}
}


ModelAndView 类中的 addObject()方法用于向其 Model 中添加数据。Model 的底层为一
个 HashMap。

Model 中的数据存储在 request 作用域中,SringMVC 默认采用转发的方式跳转到视图,
本次请求结束,模型中的数据被销毁。

若有多个请求路径均可匹配该处理器方法的执行,则@RequestMapping 的 value 属性中
可以写上一个数组。

s

猜你喜欢

转载自blog.csdn.net/rdz_NNN/article/details/88371526