文章目录
参考资料
运行环境
- windows10
- IDEA 2021.1 专业版
- JDK8
- Tomcat 9
- Spring 5.0.5
- MyBatis3
一、SpringMVC之Cntroller层
1.1 重定向
语法:在Controller层,redirect:重定向低址
使用案例:退出登陆
@RequestMapping("/loginout")
public String loginout(HttpSession session){
session.invalidate();
return "redirect:/user/login.html";
}
1.2 请求转发
语法:在Controller层,forward:请求转发地址
(默认)
使用案例:跳转页面
@RequestMapping("/home")
public String login(HttpSession session){
return "forward:/home.html"
// 可简写成 return "home.html"
}
1.3 调用HttpSession、HttpServletRequest对象
该对象是在请求Controller层时自带的,和之前Servlet类里的doGet、doPost的两个参数一样,不过在SpringMVC里这些对象可以省略不写。
使用案例:实现登陆错误提示
UserAction.java
@RequestMapping(value = "/dologin", method = RequestMethod.POST)
public String dologin(User user, HttpSession session, HttpServletRequest request){
if(userService.login(user.getUserCode(), user.getUserPassword())){
// 登陆成功
session.setAttribute("userInfo", user);
return "index"
}
// 登陆失败
request.setAttribute("loginErr", "用户名密码不匹配");
return "login";
}
login.jsp
<form class="loginForm" action="${pageContext.request.contextPath}/user/dologin"
name="actionForm" id="actionForm" method="post" >
<div class="info">${requestScope.loginErr}</div>
<div class="inputbox">
<label for="userCode">用户名:</label>
<input type="text" class="input-text" id="userCode"
name="userCode" placeholder="请输入用户名" required/>
</div>
<div class="inputbox">
<label for="userPassword">密码:</label>
<input type="password" id="userPassword" name="userPassword" placeholder="请输入密码" required/>
</div>
<div class="subBtn">
<input type="submit" value="登录"/>
<input type="reset" value="重置"/>
</div>
</form>
二、SpringMVC异常处理
2.1 全局异常处理
- 对所有异常进行统一管理
- 通过配置
SimpleMappingExceptionResolver
使用案例:在SpringMVC配置文件中指定遇到异常后跳转的页面
<bean class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
<property name="exceptionMappings">
<props>
<prop key="java.lang.RuntimeException">error</prop>
<props>
</property>
</bean>
其中<prop key="java.lang.RuntimeException">error</prop>
指定了在遇到Exception异常时就跳转逻辑的视图名为error的页面(经过视图解析器ModelAndView后的实际页面)
这里可以看到对于不同的异常,可以设置跳转到不同的页面。
2.2 Controller层跳转全局异常
@RequestMapping("/globException")
public String testGlobleException(){
if(true) throw new RuntimeException("超时错误");
return "login";
}
这里仅仅做一个测试,对应2.1的部分,设置了RuntimeException异常的跳转页面,这里在访问/globException后,能直接跳转到错误的页面error.html
三、SSM 框架整合案例
SSM使用案例:获取所有用户列表
路线: DAO -> Service -> Action -> View
思路:所有的类和方法都注入在Spring IoC容器中,MyBatis框架负责DAO层数据库交互,以及Service层实现查询用户的业务需求,SpringMVC框架负责Action层,处理前端向后端发送的请求,在由Action返回的参数渲染View视图,最后返回给前端页面。
DAO层
UserMapper.java
public interface UserMapper{
public List<User> getUserList();
}
UserMapper.xml
<select id="getUserList" resultType="User">
select * from user
</select>
Service层
UserServiceImpl.java
@Override
public List<User> getUserList() {
return userMapper.getUserList();
}
Action层
UserAction.java
@RequestMapping("/findAll")
public String findAllUsers(Model model){
// 通过 Model 渲染视图
List<User> users = userService.getUserList();
model.addAttribute("users", users);
return "user/userlist";
}
前端页面
跳转 .jsp
<a href="${pageContext.request.contextPath}/findAll">用户查询</a