struts2找不到对应action错误的解决

错误如下:

There is no Action mapped for namespace [/users] and action name [User_login] associated with context path [/Struts2AndHibernate].


对应解决方法:

1、struts2版本问题

一开始使用的是2.5版本,所以web.xml 配置如下:

 <filter>  
        <filter-name>struts2</filter-name>  
        <filter-class>org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter</filter-class>  
    </filter>



后来改成2.3.4,问题辫解决了,同时web.xml需修改成如下:

<filter>  
        <filter-name>struts2</filter-name>  
        <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>  
    </filter>  

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
一.功能简介 1. 实现一个图书管理系统。图书信息存放到一个数据库。图书包含信息:图书号、图书名、作者、价格、备注字段。 2. 系统实现如下的基本管理功能: (1)用户分为两类:系统管理员,一般用户。 (2)提供用户注册和用户登录验证功能;其登录用户的信息有:登录用户名,登录密码等。 (3)管理员可以实现对注册用户的管理(删除),并实现对图书的创建、查询、修改和删除等有关的操作。 (4)一般用户,只能查询图书,并进行借书、还书操作,每个用户最多借阅8本,即当目前借书已经是8本,则不能再借书了,只有还书后,才可以再借阅。 二.涉及技术 Struts2框架、MySQL数据库、C3P0数据池、Jsp、HTML、CSS、JavaScript等技术。 三.设计思路 1. 基于Struts2框架进行编程设计,连接MySQL数据库实现数据的增删查改,应用Jsp、HTML、CSS、JavaScript对访问页面进行编写和美化。 2. 分别创建book表和user表,用以存放图书信息和用户数据。其user表,设有flag以区分管理员和普通用户。 3. 分别创建Book类和User类,与数据表相对应。每本书和每个用户都有唯一的id与之对应。 4. 创建C3P0属性文件和数据库连接工具类。 5. 设计数据库操作类:UserDao类和BookDao类。UserDao用于实现所有对user表的操作,BookDao用于实现所有对book表的操作。 6. 创建分别对应UserDao类和BookDao类的Action:UserAction和BookAction。采用基于注解的方式进行Action配置。 7. 用户账号分为管理员账号和普通用户账号,注册时加以区分,登录时即可自动判断进入对应的操作主页面。 8. 管理员可实现对用户的查询显示,模糊查询,删除,批量删除,全选和取消全选等功能;可实现对图书的查询显示,模糊查询,添加,删除,批量删除,全选和取消全选等功能。 9. 普通用户可实现借书和还书功能,借书功能通过对book表的查询,将未借出的图书按照id顺序排列显示,点击表格后方的“借阅”按钮,进行确认借阅,将book表本书的borrowperson列的值改为本用户账号。对于借阅成功的图书可以在“当前借阅”进行查看。还书功能通过在“当前借阅”点击“还书”按钮,进行确认还书,将book表本书的borrowperson列的值改为“空”,本书信息将可以在“借书”界面查看。 四.存在的问题 1. 原本希望能为每一个用户创建一个对应的以其账号命名的数据表,用以存放用户所借图书信息,但创建表的SQL语句无法在java代码执行,所以只好在book表添加一列borrowperson,用来存放借阅本书的用户账号,这样查询用户当前借阅记录时,以“where borrowperson=‘account’”为条件对book表进行查询即可。但是每个用户要当前查询借阅记录时都需要对整个book表进行遍历,效率太低。 2. 模糊查询时,因同时需要进行where筛选,SQL语句无法执行,只好分开查询,先进行模糊查询,查询结果存放到list表,再通过遍历list表进行判断是否符合where的条件,若符合,则存入另一个list表。这种方法虽然实现了查询,但效率太低,代码过于繁重。 五.改进预想 这些本不应该是预想,原本希望在本次作业实现的,但时间不够充分,只能作为下一步的改建预想。 1. 希望实现登录时验证码验证登录; 2. 希望实现查询时,查询结果分页浏览; 3. 进一步优化Action之间的传值方法; 4. 页面进一步优化、美化; 5. 实现用户借书还书时间记录,和借阅时长限制。
Struts2使用管理员权限增删改查可以通过以下步骤实现: 1. 定义权限控制 在Struts2,可以使用拦截器来实现权限控制,定义一个拦截器来检查当前用户是否有管理员权限。例如,可以定义一个名为“adminInterceptor”的拦截器: ``` public class AdminInterceptor extends AbstractInterceptor { @Override public String intercept(ActionInvocation invocation) throws Exception { HttpServletRequest request = ServletActionContext.getRequest(); HttpSession session = request.getSession(); User user = (User) session.getAttribute("user"); if (user == null || !user.isAdmin()) { return "noAdmin"; } return invocation.invoke(); } } ``` 在以上拦截器,我们检查当前用户是否已登录,并且是否具有管理员权限。如果用户未登录或不是管理员,则返回“noAdmin”字符串。 2. 配置拦截器 在Struts2,可以使用“interceptor-ref”元素来指定要使用的拦截器。例如,我们可以在Struts2配置文件添加以下内容: ``` <interceptors> <interceptor name="adminInterceptor" class="com.example.AdminInterceptor" /> <interceptor-stack name="adminStack"> <interceptor-ref name="adminInterceptor" /> <interceptor-ref name="defaultStack" /> </interceptor-stack> </interceptors> ``` 在以上配置,我们定义了一个名为“adminStack”的拦截器堆栈,其包含了我们定义的“adminInterceptor”拦截器和默认拦截器堆栈。使用“adminStack”来拦截需要管理员权限的Action。 3. 编写ActionStruts2,可以通过定义Action处理请求。以下是一个简单的Action示例,用于管理用户: ``` public class UserAction extends ActionSupport { private List<User> users; public String list() { users = userService.listUsers(); return SUCCESS; } @Override public String execute() throws Exception { return list(); } public String add() { userService.addUser(user); return SUCCESS; } public String edit() { user = userService.getUser(id); return SUCCESS; } public String update() { userService.updateUser(user); return SUCCESS; } public String delete() { userService.deleteUser(id); return SUCCESS; } // getters and setters } ``` 在以上示例,我们定义了五个方法来处理用户管理操作: - list:列出所有用户 - add:添加新用户 - edit:编辑用户信息 - update:更新用户信息 - delete:删除用户 在每个方法,我们都需要检查当前用户是否具有管理员权限。如果用户未登录或不是管理员,则返回“noAdmin”字符串。 4. 配置ActionStruts2,可以使用“result”元素来指定Action执行后的结果。例如,我们可以在Struts2配置文件添加以下内容: ``` <action name="user" class="com.example.UserAction" method="list"> <result name="success">/user/list.jsp</result> <interceptor-ref name="adminStack" /> </action> <action name="userAdd" class="com.example.UserAction" method="add"> <result name="success" type="redirectAction">user</result> <interceptor-ref name="adminStack" /> </action> <action name="userEdit" class="com.example.UserAction" method="edit"> <result name="success">/user/edit.jsp</result> <interceptor-ref name="adminStack" /> </action> <action name="userUpdate" class="com.example.UserAction" method="update"> <result name="success" type="redirectAction">user</result> <interceptor-ref name="adminStack" /> </action> <action name="userDelete" class="com.example.UserAction" method="delete"> <result name="success" type="redirectAction">user</result> <interceptor-ref name="adminStack" /> </action> ``` 在以上配置,我们定义了五个Action,分别对应用户管理操作。在每个Action,我们都指定了要使用的拦截器堆栈“adminStack”,以检查当前用户是否具有管理员权限。同时,我们还指定了Action执行后的结果,例如展示用户列表、跳转到添加用户页面等。 通过以上步骤,我们就可以使用管理员权限增删改查用户信息了。当用户未登录或不是管理员时,系统会直接返回“noAdmin”页面,避免未授权访问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值