2 dz525815 dz525815 于 2016.02.24 11:56 提问

我最近写了个留言表 但是出现了找不到memberAction ? 5C

1,这个是struts 配置
<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd">






/login.jsp
/register.jsp
/register.jsp



/message
liuYanList

/login.jsp




<!-- 这个action 成功后 是把数据库里面的留言抓去 放到这个成功页面 -->

liuYanList

<!-- 失败还是返回这个页面 用异步提示 发送失败 所以选用json 所以这个包应该继承的是json-default -->

<!-- 指定json字符串 根对象是谁 这个需要根据自己写的类来设计 -->
errorMap



/WEB-INF/pages/message.jsp



<!-- 因为我们只是生成一个校验码 所以 不用写方法 只需要excute就可以 -->

<!-- 因为我们用的是流传输 验证码 所以 result 的类型应该是stream -->

inputStream




checkResult


2, 这个是登录

private static final long serialVersionUID = 7270980727777540053L;
private Member member;
private String rePassword;
private String verifyCode;//通过属性驱动来收集页面的验证码

//保存收集到页面的数据  通过service来保存 所以就要注入一个service
private MemberService memberService;


public String  login() {
    //根据一个指定的username 从数据库中 获取一个Member 对象
    Member m = memberService.getMember(member.getUsername());
    if (m != null) {
        //因为数据库里面保存的是我们加过密之后的密码  所以我们要对用户登录时输入的密码也进行加密
        //这样才能比较 两个密码
        String inputPassword = StringUtil.md532(member.getPassword());
            if (m.getPassword().equals(inputPassword) ){
            //信息完全正确  就需要把用户的信息存入session中 这样就不需要重复登录
            //通过 Struts2 来访问 HttpSession   把member 的信息存放到session中
            //m 是来自数据库的 有主键 id   
                ActionContext.getContext().getSession().put("member", m);

                return "success";
        }else {
            //密码错误
        }
    }else {
        //输入的用户名不存在
    }
    return "fail";
}

这个是登录页面
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>

<%@ taglib uri="/struts-tags" prefix="s" %>


用户登录页面

<!-- 引入 CSS 文件-->

<!-- 引入JavaScript 库 -->

<br> jQuery(function () {</p> <pre><code> jQuery(&quot;#refresh&quot;).click(function(){ jQuery(&quot;#verify_code&quot;).attr(&quot;src&quot;,&quot;${pageContext.request.contextPath }/verify/code?suibian&quot; + new Date()) }); jQuery(&quot;#verify_code_input&quot;).blur(function(){ //获得输入框的值 和 服务器里面的验证码进行对比 var input = jQuery(&quot;#verify_code_input&quot;).val(); //发送到服务器端 和 服务器里面的验证码进行对比 var url = &quot;${pageContext.request.contextPath }/verify/check&quot;; var settings={ &quot;url&quot;:url, &quot;type&quot;:&quot;POST&quot;, &quot;data&quot;:{&quot;inputCode&quot; : input}, &quot;dataType&quot;:&quot;json&quot;, &quot;success&quot;:function( responseData ){ jQuery(&quot;#verify_code_error&quot;).html( responseData ); } }; jQuery.ajax(settings); }); }); &lt;/script&gt; &lt;/head&gt; &lt;body topMargin=&quot;10&quot;&gt; &lt;center&gt; &lt;div id=&quot;append_parent&quot;&gt;&lt;/div&gt; &lt;table cellSpacing=&quot;6&quot; cellPadding=&quot;2&quot; width=&quot;100%&quot; border=&quot;0&quot;&gt; &lt;tbody&gt; &lt;tr&gt; &lt;td&gt; &lt;table class=&quot;guide&quot; cellSpacing=&quot;0&quot; cellPadding=&quot;0&quot; width=&quot;100%&quot; border=&quot;0&quot;&gt; &lt;tbody&gt; &lt;tr&gt; &lt;td&gt; &lt;a href=&#39;index.jsp&#39;&gt;主页&lt;/a&gt;&amp;nbsp;/&amp;nbsp; &lt;a href=&#39;#&#39;&gt;留言板(malastruts)&lt;/a&gt;&amp;nbsp;/&amp;nbsp;用户登录 &lt;/td&gt; &lt;/tr&gt; &lt;/tbody&gt; &lt;/table&gt; &lt;h4 align=&quot;center&quot;&gt;${ msg }&lt;/h4&gt; &lt;!--&lt;form id=&quot;settings&quot; action=&quot;register_action.jsp&quot; method=&quot;post&quot;&gt; --&gt; &lt;form id=&quot;settings&quot; action=&quot;${pageContext.request.contextPath}/member/login&quot; method=&quot;post&quot;&gt; &lt;table class=&quot;tableborder&quot; cellSpacing=&quot;0&quot; cellPadding=&quot;0&quot; width=&quot;100%&quot; border=&quot;0&quot;&gt; &lt;tbody&gt; &lt;tr class=&quot;header&quot;&gt; &lt;td colSpan=&quot;3&quot;&gt; 登录系统 &lt;/td&gt; &lt;/tr&gt; &lt;/tbody&gt; &lt;tbody&gt; &lt;tr&gt; &lt;td class=&quot;altbg1&quot; width=&quot;20%&quot;&gt; &lt;b&gt;用户名称 &lt;/b&gt; &lt;/td&gt; &lt;td class=&quot;altbg2&quot; valign=&quot;middle&quot; width=&quot;20%&quot;&gt; &lt;input type=&quot;text&quot; name=&quot;username&quot; value=&quot;${member.username}&quot; /&gt; &lt;/td&gt; &lt;td&gt; &lt;span style=&quot;color: red&quot;&gt; &lt;s:fielderror fieldName=&quot;username&quot;&gt;&lt;/s:fielderror&gt; &lt;/span&gt; &lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td class=&quot;altbg1&quot; width=&quot;20%&quot;&gt; &lt;b&gt;用户密码 &lt;/b&gt; &lt;/td&gt; &lt;td class=&quot;altbg2&quot;&gt; &lt;input type=&quot;password&quot; name=&quot;password&quot;/&gt; &lt;/td&gt; &lt;td&gt; &lt;span style=&quot;color: red&quot;&gt; &lt;s:fielderror fieldName=&quot;password&quot;&gt;&lt;/s:fielderror&gt; &lt;/span&gt; &lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td class=&quot;altbg1&quot; width=&quot;20%&quot;&gt; &lt;b&gt;验证码 &lt;/b&gt; &lt;/td&gt; &lt;td class=&quot;altbg2&quot;&gt; &lt;input type=&quot;text&quot; name=&quot;verifyCode&quot; id=&quot;verify_code_input&quot; /&gt; &lt;/td&gt; &lt;td&gt; &lt;!-- 我们用jquery 给这个验证码绑定一个点击事件 实现异步的验证码刷新 --&gt; &lt;img src=&quot;${pageContext.request.contextPath}/verify/code&quot; id=&quot;verify_code&quot;&gt; &lt;a href=&quot;javascript: &quot; id=&quot;refresh&quot;&gt;输入正确&lt;/a&gt; &lt;span style=&quot;color: red&quot; id=&quot;verify_code_error&quot;&gt; &lt;s:fielderror fieldName=&quot;verifyCode&quot;&gt;&lt;/s:fielderror&gt; &lt;/span&gt; &lt;/td&gt; &lt;/tr&gt; &lt;/tbody&gt; &lt;/table&gt; &lt;br /&gt; &lt;center&gt; &lt;input class=&quot;button&quot; type=&quot;reset&quot; value=&quot;重置&quot; name=&quot;settingsubmit&quot; /&gt; &lt;input class=&quot;button&quot; type=&quot;submit&quot; value=&quot;提交&quot; name=&quot;settingsubmit&quot; /&gt; &lt;/center&gt; &lt;/form&gt; &lt;/td&gt; &lt;/tr&gt; &lt;/tbody&gt; &lt;/table&gt; &lt;hr&gt; &lt;/center&gt; &lt;/body&gt; </code></pre> <p></html></p> <p>3,Spring 配置<br> <bean id="memberAction" <br> class="message.action.MemberAction" <br> p:memberService-ref="memberService"<br> scope="singleton"/><br> <bean id="messageAction" <br> class="message.action.MessageAction" <br> p:messageService-ref="messageService"<br> scope="singleton"/><br> <bean id="verifyCodeAction" <br> class="message.action.VerifyCodeAction"<br> scope="singleton"/></p> <pre><code>4,这个是Member 类 public class Member implements Serializable { private static final long serialVersionUID = 1L; private String username; private String password; private Integer id; //维护 Member 到 Message 一对多的关系 private Set&lt;Message&gt; messages;//当前会员留言 private Set&lt;Reply&gt; replies;//当前会员回复 public Set&lt;Reply&gt; getReplies() { return replies; } public void setReplies(Set&lt;Reply&gt; replies) { this.replies = replies; } public Set&lt;Message&gt; getMessages() { return messages; } public void setMessages(Set&lt;Message&gt; messages) { this.messages = messages; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } </code></pre> <p>}</p> <p>启动时没有出现任何异常 就是登录的时候 会出现这个异常<br> type Exception report</p> <p>message Invalid action class configuration that references an unknown class named [memberAction]</p> <p>description The server encountered an internal error that prevented it from fulfilling this request.</p> <p>exception</p> <p>java.lang.RuntimeException: Invalid action class configuration that references an unknown class named [memberAction]</p> <p>root cause</p> <p>java.lang.ClassNotFoundException: memberAction</p>

1个回答

Royal_lr
Royal_lr   Ds   Rxr 2016.02.24 13:18

xml没有看到配置,,建议截图或者插入代码片

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!