在一般情况下:我们登录系统时,第一次登录当用户名或密码输入错误,在登录页面给出错误原因,当我们再刷新登录页面,应该是首次登录系统的页面(这时就不应该再给出出错提示),这时我们就应该想到错误提示信息到底放在哪个作用域中能满足这样的要求,我们常见的作用域有三个:request,session,application.就当前需求,session和application显然不满足要求,request作用域又仅限于当次请求,如果我们重定向传参,request显然无法把值传到另一个方法中.所以request也不好.但spring给我们提供了一个方案,就是RedirectAttributes 类.使用如下:

我们登录系统时,form表单的method设定为post,form表单代码如下:

<form action="/sh/login" method="post">
  Usersname:<input type="text" name="username" value="${users.username }"><br>
  Password:<input type="text" name="password" value="${users.password }"><br>
       <input type="submit" value="submit">
</form>

我们可以专门写一个登录控制器来处理这个问题,让登录时根据method值的不同访问不同的方法

@Controller
@RequestMapping
public class LoginController {
@Autowired
private UsersService usersService;
@Autowired
private HttpSession session;
@RequestMapping(value="/login",method=RequestMethod.GET)

//当登录页面刷新时就会执行这个方法
public String login(){
  return "login";
}

@RequestMapping(value="/login",method=RequestMethod.POST)

//参数RedirectAttributes attr是spring自动创建的
public String login(Users users,RedirectAttributes attr){

  if(StringUtils.hasLength(users.getUsername())){
    Users u = this.usersService.findByUsername(users.getUsername());

    //有值就跳转到系统的首页
    if(u!=null&&u.getPassword()!=null&&u.getPassword().equals(users.getPassword())){
      session.setAttribute("admin", u);
      return "redirect:/users/index";
    }
  }

  //这里必须使用addFlashAttribute方法,这样在刷新登录页面时,attr中就没有值了
  attr.addFlashAttribute("msg","用户名或密码错误");

//登录数据回显时使用的
  attr.addFlashAttribute("users",users);

  //这时我们重定向或者转发都可以满足要求
  return "redirect:/login";
}
}

spring中作用域的问题的更多相关文章

  1. spring中scope(作用越)理解

    今天总结了一下spring中作用域scope的用法.在spring中作用域通过配置文件形式的用法如下. <bean id="role" class="spring. ...

  2. Spring中Bean的作用域、生命周期

                                   Bean的作用域.生命周期 Bean的作用域 Spring 3中为Bean定义了5中作用域,分别为singleton(单例).protot ...

  3. spring中scope作用域(转)

    今天研究了一下scope的作用域.默认是单例模式,即scope="singleton".另外scope还有prototype.request.session.global sess ...

  4. JavaEE开发之Spring中Bean的作用域、Init和Destroy方法以及Spring-EL表达式

    上篇博客我们聊了<JavaEE开发之Spring中的依赖注入以及AOP>,本篇博客我们就来聊一下Spring框架中的Bean的作用域以及Bean的Init和Destroy方法,然后在聊一下 ...

  5. Spring中Bean的五个作用域

    当通过spring容器创建一个Bean实例时,不仅可以完成Bean实例的实例化,还可以为Bean指定特定的作用域.Spring支持如下5种作用域: singleton:单例模式,在整个Spring I ...

  6. Spring中bean作用域属性scope

    关键字: spring中属性scope的prototype是什么意思   默认情况下,从bean工厂所取得的实例为Singleton(bean的singleton属性) Singleton: Spri ...

  7. Spring中bean的五个作用域简介(转载)

    Spring上个版本的IoC容器支持两个不同的bean作用域(单例与原型).Spring 2.0改进了这一点,不仅提供了一些依赖于Spring部署环境(比如说,在web环境中的request和sess ...

  8. Spring中bean的作用域与生命周期

    在 Spring 中,那些组成应用程序的主体及由 Spring IOC 容器所管理的对象,被称之为 bean.简单地讲,bean 就是由 IOC 容器初始化.装配及管理的对象,除此之外,bean 就与 ...

  9. Spring 中 ApplicationContext 和 BeanFactory 的区别,以及 Spring bean 作用域

    //从ApplicationContext 中取 bean ApplicationContext ac = new ClassPathXmlApplicationContext ( "com ...

随机推荐

  1. kvm 基本运维命令

    Kvm基本命令 一.查询命令 1.列出所有的虚拟机 virsh list –all 2.显示虚拟机信息 virsh dominfo kvm-1 3.显示虚拟机内存和cpu的使用情况 yum insta ...

  2. 【shell】awk命令

    简介 awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大.简单来说awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再 ...

  3. WPF Demo2

    <Window x:Class="Demo2.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/ ...

  4. css transition transform animation例子讲解

    1.transition属性: transition属性是一个速记属性有四个属性:transition-property , transition-duration, transition-timin ...

  5. 学习笔记之Cloud computing

    Cloud computing - Wikipedia https://en.wikipedia.org/wiki/Cloud_computing

  6. 1110 Complete Binary Tree (25 分)

    1110 Complete Binary Tree (25 分) Given a tree, you are supposed to tell if it is a complete binary t ...

  7. 如何判断自己的浏览器支持的是javascript的那个版本

    <script language="javascript"> var jsversion = 1.0; </script> <script langu ...

  8. TCP阻塞模式开发

    在阻塞模式下,在IO操作完成前,执行的操作函数将一直等候而不会立刻返回,该函数所在的进程会阻塞在这里.相反,在非阻塞模式下,套接字函数会立即返回,而不管IO是否完成,该函数所在的线程将继续运行.阻塞模 ...

  9. 【洛谷】P1357 花园(状压+矩阵快速幂)

    题目 传送门:QWQ 分析 因为m很小,考虑把所有状态压成m位二进制数. 那么总状态数小于$ 2^5 $. 如果状态$ i $能转移到$ j $,那么扔进一个矩阵,n次方快速幂一下. 答案是对角线之和 ...

  10. SpringJdbc之queryForXXX大全解读

      一.查询单个字段  Object queryForObject(String sql, Object[] args, Class requiredType)  其中Class requiredTy ...