有关springMvc跳转的特点:
页面的跳转会显示在地址栏,ajax不会
请求跳转(要么直接路径请求,要么方法里求动作性(controller在调用一个controller)),或直接请求页面(配置不走方法,要么方法里字符串视图),
不管哪种跳转都会把model带到跳转的目的地
动作性跳转:
forward:转发,参数不会出现在地址栏,类似post////////////多用在登陆上,服务器直接转发共享request
redirect:重定向,参数会出现在地址栏,服务求让浏览器自己(第二次)再去请求重定向地址所以有两个request,request不共享
return "redirect:////"
常规页面:
modelView();
return "///"
示例:
@RequestMapping(value = "/index")
public ModelAndView index(HttpSession session, HttpServletRequest request) throws EsteelException {
return new ModelAndView("/login");//常见页面
}
@RequestMapping(value = "/mangerIndex")
public String dwzIndex( ModelMap model,HttpSession session, HttpServletRequest request) throws EsteelException {
return "/dwzIndex";//常见页面
}
@RequestMapping(value = "/login")
public String login(OpmUser currUser, ModelMap model, HttpSession session, HttpServletRequest request) throws Exception {
Subject currentUser = SecurityUtils.getSubject(); // 获取当前的Subject
// 验证是否登录成功public static final String FORWARD_URL_PREFIX = "forward:";
String resultPageURL = InternalResourceViewResolver.FORWARD_URL_PREFIX + "/";
if(currentUser.isAuthenticated()){
System.out.println("用户[" + currentUser.getPrincipal() + "]登录认证通过");
Session session1 = currentUser.getSession();
OpmUser user =(OpmUser) session1.getAttribute("currentUser");
OpmUserRole u = new OpmUserRole();
u.setUserid(user.getId());
List<OpmUserRole> ur=opmUserRoleService.getOpmUserRole(u);//本系统中是一个用户一个角色
String roleId="";
String leave=user.getLevel1();
if(ur!=null&&ur.size()>0&&ur.get(0)!=null){
roleId=ur.get(0).getRoleid();
}
model.addAttribute("username", currentUser.getPrincipal());
model.addAttribute("roleId", roleId);//当前用户登录角色ID
model.addAttribute("id", roleId);//当前修改维护的角色Id
model.addAttribute("leave",leave);
model.addAttribute("organid",user.getOrganid());
return resultPageURL+"mangerIndex";//动作性跳转
}
String username = request.getParameter("username");
String password = request.getParameter("password");
opmUserService.getOpmUsers();
String verifyCode = (String) request.getSession().getAttribute("validateCode"); // 获取HttpSession中的验证码
String submitCode = WebUtils.getCleanParam(request, "verifyCode"); // 获取用户请求表单中输入的验证码
if(StringUtils.isEmpty(username)||StringUtils.isEmpty(password)){
return resultPageURL+"index";
}
if (!StringUtils.equals(verifyCode.toLowerCase(), submitCode.toLowerCase())) {
request.setAttribute("message_login", "验证码不正确");
return resultPageURL+"index";
}
//password = MD5.encryptMD5(Base64.encode(password));
password = PasswordMD5.createEncryptPSW(password);
/* password = MD5.encryptMD5(Base64.encode("111111")); */
UsernamePasswordToken token = new UsernamePasswordToken(username, password); // 为了验证登录用户而封装的token
token.setRememberMe(true);// 设计记住用户
try {
// 在调用了login方法后,SecurityManager会收到AuthenticationToken,并将其发送给已配置的Realm执行必须的认证检查
// 每个Realm都能在必要时对提交的AuthenticationTokens作出反应
// 所以这一步在调用login(token)方法时,它会走到AuthenticationRealm.doGetAuthenticationInfo()方法中,具体验证方式详见此方法
currentUser.login(token);
resultPageURL = "dwzIndex";
} catch (UnknownAccountException uae) {
System.out.println("对用户[" + username + "]进行登录验证..验证未通过,未知账户");
request.setAttribute("message_login", "未知账户");
} catch (IncorrectCredentialsException ice) {
System.out.println("对用户[" + username + "]进行登录验证..验证未通过,错误的凭证");
request.setAttribute("message_login", "密码不正确");
} catch (LockedAccountException lae) {
System.out.println("对用户[" + username + "]进行登录验证..验证未通过,账户已锁定");
request.setAttribute("message_login", "账户已锁定");
} catch (ExcessiveAttemptsException eae) {
System.out.println("对用户[" + username + "]进行登录验证..验证未通过,错误次数过多");
request.setAttribute("message_login", "用户名或密码错误次数过多");
} catch (AuthenticationException ae) {
// 通过处理Shiro的运行时AuthenticationException就可以控制用户登录失败或密码错误时的情景
System.out.println("对用户[" + username + "]进行登录验证..验证未通过,堆栈轨迹如下");
ae.printStackTrace();
request.setAttribute("message_login", "用户名或密码不正确");
}
// 验证是否登录成功
if (currentUser.isAuthenticated()) {
System.out.println("用户[" + username + "]登录认证通过");
Session session1 = currentUser.getSession();
OpmUser user =(OpmUser) session1.getAttribute("currentUser");
OpmUserRole u = new OpmUserRole();
u.setUserid(user.getId());
List<OpmUserRole> ur=opmUserRoleService.getOpmUserRole(u);//本系统中是一个用户一个角色
String roleId="";
String leave=user.getLevel1();
if(ur!=null&&ur.size()>0&&ur.get(0)!=null){
roleId=ur.get(0).getRoleid();
}
model.addAttribute("username", username);
model.addAttribute("roleId", roleId);//当前用户登录角色ID
model.addAttribute("id", roleId);//当前修改维护的角色Id
model.addAttribute("leave",leave);
model.addAttribute("organid",user.getOrganid());
return "dwzIndex";
} else {
token.clear();
}
return resultPageURL;
}
相关推荐
**SpringMVC 4.0 知识点详解** ...总的来说,SpringMVC 4.0是一个强大的Web应用开发框架,其注解驱动、模块化设计、易测试性等特点,使得开发人员能够更加专注于业务逻辑,从而提高开发效率和应用质量。
SpringMVC以其轻量级、高效、灵活、易于测试等特点,被广泛应用于现代Java Web开发中,成为了Java开发社区中不可或缺的框架之一。 对于SpringMVC与其它MVC框架的对比,例如Struts、WebWork(WebWork2)等,每种框架...
2. **引入依赖**:如果使用 Maven,需要在 `pom.xml` 文件中引入 SpringMVC 的依赖和其他相关依赖。 ```xml <groupId>org.springframework <artifactId>spring-webmvc <version>5.3.20 <groupId>javax....
Spring MVC 结果跳转方法详解 Spring MVC 结果跳转方法是指在 Spring MVC 框架中,如何将请求结果跳转到指定的页面或执行特定...每种方法都有其特点和应用场景,开发者可以根据实际情况选择合适的方法来实现结果跳转。
- **前端跳转或扫码**:将预支付订单信息传递给前端,前端根据不同的应用场景(H5、APP、扫码支付)引导用户完成支付。 - **支付结果通知**:微信服务器在用户支付成功后,会主动向商户服务器发送支付结果通知,...
通过Spring框架实现了模块化的业务逻辑和依赖注入,Spring MVC负责处理用户请求和页面跳转,而Hibernate作为ORM框架则实现了数据持久化和访问。项目的亮点包括用户友好的界面设计、实时消息通知系统和安全可靠的数据...
Spring MVC提供了三种类型的控制器,每种控制器都有其特点和应用场景。本文将对这三种控制器进行详细的介绍和分析。 1. 无需 Controller 代码的控制器 这种控制器不需要编写任何 Controller 代码,只需要在配置...
首页、家政资讯、家政服务、我的、跳转到后台等功能。系统中管理员主要是为了安全有效地存储和管理各类信息,还可以对系统进行管理与更新维护等操作,并且对后台有相应的操作权限。 要想实现家政服务网站的各项功能...
- `springmvc-servlet.xml`:包含所有注解配置相关的设置。 **2. 类与包结构** 与XML配置的项目类似,但主要依赖注解来完成配置工作。 **3. 测试** 通过HTTP请求触发控制器方法,完成数据的存储,并重定向到指定...
下面将详细介绍这三个框架以及它们整合使用的相关知识点。 **Spring MVC** Spring MVC是Spring框架的一部分,它提供了一个用于构建Web应用程序的轻量级、灵活的MVC实现。Spring MVC通过DispatcherServlet处理HTTP...
在Web开发中,转发(Forward)和重定向(Redirect)是两种常见的页面跳转方式。这两种方法虽然都能实现页面的跳转,但其内部工作原理、对客户端的影响以及应用场景都有所不同。本文将详细介绍转发与重定向之间的区别...
它的主要特点是将SQL语句写在XML配置文件或者Mapper接口的方法注解中,这样可以保持SQL与Java代码的分离,提高了可读性和可维护性。MyBatis通过SqlSessionFactory创建SqlSession对象,然后通过SqlSession执行SQL并...
2. **Java**:作为后端开发的主要语言,Java以其跨平台、面向对象的特点,广泛应用于大型企业级应用。 3. **SpringBoot**:虽然标题中提到的是传统的SSM(Spring、SpringMVC、MyBatis)组合,但SpringBoot是现代Java...
请求转发的特点包括: 1. 请求转发是服务器端的行为,浏览器并不知道这个过程,它只看到最初的请求和最终的响应。 2. 请求转发过程中,原始的HttpServletRequest和HttpServletResponse对象被共享,所以请求参数和...
Spring MVC 支持两种方式来跳转页面: - **转发**:在控制器方法中返回逻辑视图名。 - **重定向**:在控制器方法中返回“redirect:/url”。 #### 十三、处理Ajax请求 Spring MVC 提供了多种方式来处理Ajax请求,...
- 视频播放:用户能够在线观看视频内容,可能包括视频搜索、播放、暂停、跳转等基本功能。 - 视频管理:后台管理员可以对视频进行上传、编辑和管理,确保视频内容的组织和更新。 - 用户交互:可能包含用户注册、登录...
SpringMVC:一个基于Servlet的MVC框架,负责处理请求、响应和页面跳转,简化了Web层的开发。 MyBatis:一个持久层框架,支持自定义SQL、存储过程和高级映射,简化了数据库操作。 功能概述: 用户管理:包括用户...
在本项目中,SpringMVC处理用户交互,如页面跳转、数据提交等。 3. **MyBatis**: MyBatis是一个优秀的持久层框架,它支持定制化SQL、存储过程以及高级映射。MyBatis避免了几乎所有的JDBC代码和手动设置参数以及...