Struts2中redirect与参数处理:区别与实践

需积分: 34 2 下载量 14 浏览量 更新于2024-09-15 1 收藏 35KB DOC 举报
在Struts2框架中,redirect操作是处理完一个动作后进行URL重定向的重要概念,它在用户界面的导航和数据处理过程中发挥着关键作用。以下是对Struts2中三种常见的redirect行为的详细介绍: 1. **普通redirect** (`redirect:`): 当一个action完成处理后,使用`redirect:`标签,会将用户重定向到一个新的视图资源(例如JSP页面)。这种操作的特点是,请求参数和action的处理结果都会被清除,因为这是一个客户端的新请求,意味着前一次请求的状态信息无法保留。如果你注意到请求参数没有丢失,可能是由于某种特殊情况,比如手动保存或缓存了这些数据。 2. **redirect-action** (`redirect-action:`): 类似于普通redirect,但目标是另一个action,这意味着不仅参数丢失,连之前的action结果也会丢失。这是因为每个新的action请求都是独立的,不能继承上一次请求的信息。 3. **chain** (`chain:`): 在Struts2中,`chain`标签用于action之间的转发,请求参数在转发过程中会被保留在栈中,所以即使重定向到新的action,参数不会丢失。然而,action的处理结果不会随着链式调用传递,它仅适用于当前action。 **RedirectActionResult** 是Struts2中更推荐使用的重定向结果类型。它利用`ActionMapperFactory`创建的`ActionMapper`,可以根据配置动态改变URL模式,提供了更大的灵活性。与`ServletRedirectResult`相比,它无需手动编码URL,从而简化了配置,并且在URL模式变化时不会影响应用的其他部分。 当使用`RedirectActionResult`时,你可以设置以下几个属性: - `ActionName`: 指定要重定向到的具体action名称。 - `namespace-action`: 名称空间与action的组合,如果为空,则默认为当前命名空间。 - `location`: 重定向后的地址,可以用来指定action执行后跳转的精确位置。 - `parse`: 默认为`true`,表示是否解析URL中的参数。设置为`false`可能有助于性能优化,但在某些情况下可能需要保留参数。 在实际应用中,根据业务需求选择合适的redirect操作至关重要。理解这些行为模式可以帮助开发者有效地管理用户界面的跳转逻辑,同时确保数据的一致性和安全性。

@Controller @RequestMapping("/zmu") public class LoginController { @Autowired AccountDao adao; @GetMapping("/login") public String login(){ return "login"; } @GetMapping("/registry") public String registry(){ return "registry"; } @PostMapping("/addaccount") //方法中的参数名一定要与网页端属性为name的值一致 public String addAccount(String username,String password, Model model){ Account account=new Account(username,password); account= adao.saveAndFlush(account); if(account.getId()>0) model.addAttribute("success","帐户和密码添加成功"); else model.addAttribute("success","添加帐户和密码失败"); //redirect跳转到对路径,所带的信息会被丢弃 //redirect:/ return "registry"; } @PostMapping("/verify") //方法中的参数名一定要与网页端属性为name的值一致 public String verify(String username,String password, Model model){ boolean s=adao.existsByUsernameAndPassword(username,password); if(s) model.addAttribute("success","合法用户验证成功"); else model.addAttribute("success","无此帐户和密码,登录失败"); //redirect跳转到对路径,所带的信息会被丢弃 //redirect:/ return "login"; } //浏览帐户信息 @GetMapping("/accountshow") public String accountshow(Model model){ List<Account> lists=adao.findAll(); if(lists.size()!=0){ model.addAttribute("success",true); model.addAttribute("account",lists); } else model.addAttribute("success",false); return "account_show"; }对应的删除用户的方法代码

2023-05-21 上传