在一般情况下:我们登录系统时,第一次登录当用户名或密码输入错误,在登录页面给出错误原因,当我们再刷新登录页面,应该是首次登录系统的页面(这时就不应该再给出出错提示),这时我们就应该想到错误提示信息到底放在哪个作用域中能满足这样的要求,我们常见的作用域有三个: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. ES(4): ES Cluster Security Settings

    目录: ES安全事件回顾 ES集群安全建议 安全访问配置 license更新 ES安全事件回顾 下面是白帽汇监测到针对全球使用广泛的全文索引引擎Elasticsearch的勒索事件: 2017年1月1 ...

  2. linux 守护进程(daemon process)代码-详细注释

    1. 进程组 组长不能创建新的 会话. 其它进程可以创建新的会话,创建后既成为会话首领,同时失去控制终端. 2. 会话首领可以重新打开控制终端 1 #include <stdio.h> 2 ...

  3. wxWidgets:简单消息处理

    早期的wxWidgets使用类似MFC的方式进行消息处理:在新版中这种映射方式仍然得以保留. 在MyFrame.h中添加: private: void OnQuitButton(wxCommandEv ...

  4. antd在线换肤定制功能

    最近react项目,用的antd框架,然后看见他的antdPro例子里面有个定制功能很帅,老大说做,那就做吧,鼓捣了一晚终于实现了. 先看预览效果吧 css换肤 入行前端的时候经常看鱼哥(张鑫旭)的博 ...

  5. 【转载】CSS + DIV 实现整理布局

    HTML CSS + DIV实现整体布局 1.技术目标: 开发符合W3C标准的Web页面 理解盒子模型 实现DIV+CSS整体布局 2.什么是W3C标准? W3C:World Wide Web Con ...

  6. 转载-JavaWeb学习总结

    JavaWeb学习总结(五十三)——Web应用中使用JavaMail发送邮件 孤傲苍狼 2015-01-12 23:51 阅读:13407 评论:20     JavaWeb学习总结(五十二)——使用 ...

  7. position和margin的绝对定位和相对定位

    电脑桌面清理干净之后,果然快了很多,桌面上的东西会占用内存,导致电脑变慢,以前我看到表姐的电脑桌面堆满了东西,我就在心里默默的鄙视不懂玩电脑的人,现在我竟然也养成了这种坏毛病..保存东西的时候放在桌面 ...

  8. [UE4]组件

    用来组成Actor的子对象,Actor是由组件组成的. 几个关键的Component类型: 一.UActorComponent 这个Component的基类,可以被放到Actor里面, 可以接受Tic ...

  9. 用cmd导入oracle的.dmp文件和修改oracle管理员密码

    1,首先创建用户 语法[创建用户]: create user 用户名 identified by 口令[即密码]: 例子:create user zhengxin identified by zhen ...

  10. 输出tuple和chrono的使用小例子

    // move example #include <iostream> // std::cout #include<tuple> #include<ratio> # ...