springmvc常用功能及标签(req、resp等)

1 requestMapping-method:使用method属性指定用户的请求方式:

get:

//指定some.do只能使用get请求方式
	//405 - Request method 'POST' not supported
	@RequestMapping(value="/some.do",method=RequestMethod.GET) 
	public ModelAndView doSome(){ 方法体 }

post:

//指定first.do只能使用post方式
	//HTTP Status 405 - Request method 'GET' not supported
	@RequestMapping(value="/first.do",method=RequestMethod.POST) 
	public ModelAndView doFist(){ 方法体 }  

2.receiveParameter-property:接收请求的参数

(1)逐个接收

	逐个接收请求参数:要求是处理器方法的形参名和请求中参数名一样
   框架接收参数:
   .执行处理器方法时,名称传递参数
	 *     doSome(strName,Integer.parseInt(strAge));
	 *     框架可以实现String-int, long ,float,double等的类型转换。

( 2 )更改参数名接收
receiveParameter-requestParam:在逐个接收参数中, 如果请求中参数名和形参名不一样,
需要在处理器方法的形参前面加入@RequestParam(value=“请求中参数名”)

/**
	 * 逐个接收请求参数:要求是处理器方法的形参名和请求中参数名一样
	 * 使用RequestParam解决参数名称不一样的问题
	 *  @RequestParam
	 *    属性: value 请求中参数名
	 *         required 是boolean类型的
	 *                  true,默认值,表示请求中必须有此参数
	 *                  false,可以没有参数
	 *  
	 */
	@RequestMapping(value="/some.do") 
	public ModelAndView doSome(@RequestParam(value="rname",required=false) String name,
			@RequestParam(value="rage",required=false) Integer age){  方法体 }
//value="rname" 中rname 为request中传递的参数名

(3)改为自创的对象接收
receiveParameter-object:使用对象接收请求的多个参数。
要求是:请求中参数名和对象的属性名一样。

1 实体类 ,Student(name ,age)
2 /**
	 * 请求传递的参数 name age
	 * 用对象接收请求的参数:要求对象的属性名和请求中参数名一样
	 */
	@RequestMapping(value="/some.do") 
	public ModelAndView doSome(Student student){ 
	//Student  实体类中的 数据类型 和request请求中传递的参数一致
}

3 返回不同的视图

returnString-viewName:处理器方法的返回值表示请求的处理结果。

处理器方法返回String , 这个String表示视图。
视图可以是:
1.逻辑视图,需要配置视图解析器
2.完整视图路径, 不能配置视图解析器。
springmvc.xml 中代码 :
  <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
     	<!-- 前缀:表示视图的目录位置 -->
     	<property name="prefix" value="/WEB-INF/view/" />
     	<!-- 后缀:表示视图文件的扩展名 -->
     	<property name="suffix" value=".jsp" />
     </bean>

(1)完整视图路径

	@RequestMapping(value="/some.do") 
	public String doSome(HttpServletRequest request, String name,Integer age){
				*****
				//框架对视图执行 forward
				return "/WEB-INF/view/show.jsp";
	}
	产生结果:HTTP Status 404 - /
	11-returnString-viewName/WEB-INF/view/WEB-INF/view/show.jsp.jsp  地址错误

(2)视图逻辑名称

	@RequestMapping(value = "/some2.do")
	public String doSome2(HttpServletRequest request, String name, Integer age) {
			// 框架对视图执行 forward
			return "show"; 
			}

4 forward:转发操作,使用forward:

转发有两个目的地:
1.视图页面,语法forward:视图完整路径
2.其他处理器,语法 forward:xxx.do

列1
/**
	 *  处理器方法返回ModelAndView,实现转发到视图页面
	 *  语法 mv.setViewName("forward:视图完整路径")
	 *  
	 *  forward的特点是不和视图解析器一同工作,就当项目中没有视图解析器。
	 */
	 @RequestMapping(value="/some.do") 
	public ModelAndView doSome( String name,Integer age){
		ModelAndView mv = new ModelAndView();
		/**
		 * 使用forward:显示指定转发操作,不和视图解析器一同工作
		 * 语法 mv.setViewName("forward:视图完整路径")
		 */
		//mv.setViewName("forward:/WEB-INF/view/show.jsp");
		mv.setViewName("forward:/first.jsp");
		return mv;
	}
列2   
	处理器方法返回String,使用forward:转发到视图
	@RequestMapping("/other.do")
	public String doOther(String name,Integer age){
			return "forward:/first.jsp";
	}


列3 
/**
	 * 使用forward:转发到其他的处理器方法,由其他的处理器方法继续处理请求。
	 * 语法,forward:xxx.do
	 */
``@RequestMapping(value="/forward.do") 
	public ModelAndView doForward( String name,Integer age){`
			ModelAndView mv = new ModelAndView();
			mv.setViewName("forward:process.do");
		return mv;
	}
	//继续处理请求的处理器方法
	@RequestMapping("process.do")
	public String doProcess(){
		System.out.println("=====执行了doProcess=====");
		//逻辑视图
		return "show";
	}

5 redirect:重定向操作,使用redirect:
重定有两个目的地:
1.视图页面,语法redirect:视图完整路径
2.其他处理器,语法 redirect:xxx.do


	/**
	 *  处理器方法返回ModelAndView,实现重定向到视图页面
	 *  语法 mv.setViewName("redirect:视图完整路径")
	 *  
	 *  redirect的特点是不和视图解析器一同工作,就当项目中没有视图解析器。
	 *  
	 *  redirect的操作:
	 *  1.不能访问受保护的/WEB-INF资源
	 *  2.放入到Model中的简单类型的数据可被转为String作为get请求的参数传递。
	 *    对象类型不能转为String,不能作为参数传递。
	 *  3.在目标页面中,使用${param.参数名}获取数据。 实现两次请求中间的数据传递。
	 */

列1

@RequestMapping(value="/some.do") 
	public ModelAndView doSome( String name,Integer age){
/**
		 * 使用redirect:重定向操作,不和视图解析器一同工作
		 * 语法 mv.setViewName("redirect:视图完整路径")
		 */
		 ModelAndView mv = new ModelAndView();
		//不能访问/WEB-INF/资源
		//mv.setViewName("redirect:/WEB-INF/view/show.jsp");
		mv.setViewName("redirect:/first.jsp");
		return mv;
	}

列2 处理器方法返回String,使用redirect:重定向到视图


@RequestMapping("/other.do")
	public String doOther(String name,Integer age){
		
		System.out.println("执行处理器的doOther() name:"+name+"|age:"+age);
		return "redirect:/first.jsp";
	}
	列3 
	/**
	 * 使用redirect:重定向到其他的处理器方法,由其他的处理器方法继续处理请求。
	 * 语法,redirect:xxx.do
	 */
	@RequestMapping(value="/redirect.do") 
	public ModelAndView doForward( String name,Integer age){
		System.out.println("执行处理器的doSome() name:"+name+"|age:"+age);
		//调用Service处理请求,把结果放到ModelAndView
		ModelAndView mv = new ModelAndView();
		mv.addObject("myname",name);
		mv.addObject("myage",age);
		//重定向到其他的处理器,redirect:xxx.do
		mv.setViewName("redirect:process.do");
		//http://localhost:8080/myweb/process.do?myname=zs&myage=20
		return mv;
	}
	
	//继续处理请求的处理器方法
	@RequestMapping("process.do")
	public String doProcess(String myname,Integer myage){
		System.out.println("=====执行了doProcess=====myname:"+myname+"     myage:"+myage);
		//逻辑视图
		return "show";
	}

6 customExceptionHandler:自定义异常处理器。

springmvc框架处理异常的模型(方式):集中的方式处理异常,把异常的处理逻辑放到一个公共的位置(class)

框架把能处理的类叫做异常处理器, 所有的异常处理器必须实现HandlerExceptionResolver接口

在异常处理器类实现异常的处理, 当处理器类发生异常时,中央调度器对象会调用异常处理器类处理异常。

(1)定义三个异常类:NameException、AgeException、MyUserException。其中 MyUserException
是另外两个异常的父类。

(2) 修改 Controller

(3) 定义异常处理器 : 当一个类实现了 HandlerExceptionResolver 接口后,只要有异常发生,
无论什么异常,都会自动执行接口方法 resolveException()
在这里插入图片描述

(4) 注册异常处理器

springmvc.xm中
在这里插入图片描述

7 annotationExceptionHandler:使用注解处理异常

/**
 * 全局异常处理器
 * @ControllerAdvice:控制器增强,把处理器方法中的异常处理逻辑做为切面使用。
 *     位置:类定义的上面
 *
 */
@ControllerAdvice
public class GlobalExceptionHandler {
/**
	 * @ExceptionHandler
	 *    属性:value 是异常类的class
	 *    位置:方法的上面
	 */
	@ExceptionHandler(value=NameException.class)
	public ModelAndView doNameException(Exception ex){ }
	
//处理其他异常
	@ExceptionHandler
	public ModelAndView doOtherException(Exception ex){ }
	}

猜你喜欢

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