springmvc16

虽然网址上传递了参数,但name和age取不到参数,因为重定向是两次请求,参数在第一次请求的作用域里面,无法直接传递到第二个作用域。此时修改hello.jsp,直接访问第一次请求作用域里面的参数。


hello.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<h3>show.jsp</h3><br/>
<h3>name数据:${param.name}</h3>
<h3>age数据:${param.age}</h3>

<!--使用request对象中的getParameter方法,可以访问到第一次request作用域-->
<h3>取参数数据:<%=request.getParameter("name")%></h3>
</body>
</html>
1
2
3
4
5
6
7
8
9
10
11
12
13
14

成功取到参数,如下图

 

异常处理

springmvc框架采用的是统一,全局的异常处理。把controller中的所有异常处理都集中到一个地方,采用的是aop思想,把业务逻辑和异常处理代码分开。也叫解耦(ou)合。
使用两个注解:1、ExceptionHandler 2、ControllerAdvice


异常处理主要步骤:

1 新建一个自定义异常类 MyUserException,再定义它的子类 NameException,AgeException
2 在 controller 抛出 NameException,AgeException
3 创建一个普通类,作为 全局异常处理类
1> 类上面加上 @ControllerAdvice
2> 类中方法上面加上 @ExceptionHandler
4 创建对应视图。创建组件扫描器扫描,扫描全局变量处理程序。创建注解驱动。
1
2
3
4
5
6
7
8

项目结构如下

 


springmvc.xml,加入组件扫描器和注解驱动

<!--处理异常两个步骤-->

<!--1、组件扫描器:扫描全局异常处理程序-->
<context:component-scan base-package="com.zh.handler"/>

<!--2、注解驱动-->
<mvc:annotation-driven/>
1
2
3
4
5
6
7

MyController.java,控制器方法,向 MyUserException 抛出异常

@Controller
public class MyController {

@RequestMapping(value = "/some.do")
public ModelAndView doSome(String name,Integer age) throws MyUserException {
ModelAndView mv = new ModelAndView();

//根据请求抛出异常
if (!"zs".equals(name)){
throw new NameException("姓名不正确");
}

if (age <= 0 || age >= 99){
throw new AgeException("年龄输入有误");
}

mv.addObject("name",name);
mv.addObject("age",age);
mv.setViewName("show");
return mv;
}
}


自定义异常类 MyUserException.java,继承 Exception

public class MyUserException extends Exception{

public MyUserException() {
super();
}
public MyUserException(String message) {
super(message);
}
}

子类 NameException.java

//表示当前用户姓名有异常,抛出NameException
public class NameException extends MyUserException {

public NameException() {
super();
}
public NameException(String message) {
super(message);
}
}

posted @ 2021-03-28 21:41  青竹之下  阅读(51)  评论(0编辑  收藏  举报