ActionError的chain的一个错误使用方式

本文探讨了在Struts框架中使用ActionError时遇到的一个常见问题:在chain调用时加入ActionError导致的异常。文章详细分析了问题的原因,并提供了几种解决方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

ActionError的chain的一个错误使用方式

问题:

在做项目的时候,在chain的时候希望能够执行下个action并且加上ActionError错误提示,结果发现总是提示java.lang.RuntimeException: Invalid action class configuration that references an unknown class name

查找原因步骤:
  1. 想调试源代码.但无奈放不进去.
  2. 把struts的日志打出来,改为debug级别
  3. 看到是在AnnotationValidationInterceptor的时候报异常了
  4. 看AnnotationValidationInterceptor代码,发现在进入下个action之前,会先对actionError也validate,然后validate就失败了并且下个action还没有配错误的input结果,然后就报这个了。
解决办法:
  1. 第一个action中的addActionError改成addActionMessage
  2. 将加actionActionError放到最后一个action中
  3. 配置拦截器(这个很不实际)
附:

找不到对应Action的总结,挺好的

单点登录(Single Sign-On,SSO)是指用户只需要登录一次,就可以在多个相互信任的应用系统中访问资源的一种身份认证技术。下面是一个简单的Java实现单点登录的示例。 1. 创建一个登录页面,用于输入用户名和密码并提交表单。 ```html <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>登录页面</title> </head> <body> <form action="login" method="post"> <p>用户名:<input type="text" name="username"></p> <p>密码:<input type="password" name="password"></p> <p><input type="submit" value="登录"></p> </form> </body> </html> ``` 2. 创建一个Servlet用于处理登录请求。 ```java import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; @WebServlet("/login") public class LoginServlet extends HttpServlet { protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String username = request.getParameter("username"); String password = request.getParameter("password"); // 检查用户名和密码是否正确 if ("admin".equals(username) && "123456".equals(password)) { // 登录成功,将用户信息保存到Session中 request.getSession().setAttribute("user", username); response.sendRedirect("home"); } else { // 登录失败,返回错误信息 request.setAttribute("error", "用户名或密码错误"); request.getRequestDispatcher("login.jsp").forward(request, response); } } } ``` 3. 创建一个首页,用户登录成功后跳转到此页面。 ```html <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>首页</title> </head> <body> <h1>欢迎登录系统</h1> <p>当前用户:${user}</p> </body> </html> ``` 4. 创建一个过滤器,用于检查用户是否已经登录。如果用户已经登录,则直接放行,否则跳转到登录页面。 ```java import javax.servlet.*; import javax.servlet.annotation.WebFilter; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import java.io.IOException; @WebFilter("/*") public class LoginFilter implements Filter { public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { HttpServletRequest req = (HttpServletRequest) request; HttpServletResponse res = (HttpServletResponse) response; HttpSession session = req.getSession(false); String uri = req.getRequestURI(); boolean isLoginPage = uri.endsWith("login.jsp") || uri.endsWith("login"); boolean isLoggedIn = (session != null && session.getAttribute("user") != null); boolean isStaticResource = uri.contains("/css/") || uri.contains("/js/") || uri.contains("/images/"); if (isLoggedIn || isLoginPage || isStaticResource) { // 已经登录或者访问的是登录页面或者静态资源,直接放行 chain.doFilter(request, response); } else { // 没有登录,跳转到登录页面 res.sendRedirect("login.jsp"); } } } ``` 通过以上的实现,用户只需要登录一次,就可以在多个相互信任的应用系统中访问资源。当用户访问需要身份认证的资源时,系统会自动检查用户的登录状态,如果已经登录,则直接访问资源,否则跳转到登录页面进行身份认证。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值