一个验证登陆的struts2
程序我的跳转设置是这样的:
jsp文件:<%@page language="java" contentType="text/html;charset=gb2312"%>
<html>
 <head><title>登录</title></head>
<body>
  <form action="test">
     用户名:<input type="text" name="uname"/>
     密码: <input type="password" name="upassword"/>
     <input type="submit" value="提交"/>
     <input type="reset" value="重置"/>
   </form>
</body>
</html>struts.xml文件:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd">
<struts>
 <constant name="struts.action.extension" value="action"/>
 <constant name="struts.il8n.encoding" value="gbk"/>
 <constant name="struts.local" value="zh_CN"/>
 <constant name="struts.custom.il8n.resources" value="messageResource"/>
 <package name="struts2" extends="struts-default">
   <global-results>
     <result name="exception">/excption.jsp</result>
   </global-results>
   <global-exception-mappings>
     <exception-mapping exception="java.lang.Exception" result="exception"/>
   </global-exception-mappings>
   <action name="test" class="act.loginCk">
      <result name="success">/success.jsp</result>
      <result name="login">/login.jsp</result>
   </action>
 </package>
</struts>    action文件(loginCk.java):package act;import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
import check.LoginCheck;
public class loginCk extends ActionSupport{
   /**
 * 
 */
private static final long serialVersionUID = 1L;
private String uname;
   private String upassword;
   public void login(){
   System.out.print("运行到action");
   }
   public String getUname() {
 return uname;
}
   public void setUname(String uname) {
 this.uname = uname;
}
   public String getUpassword() {
  return upassword;
}
   public void setUpassword(String upassword) {
  this.upassword = upassword;
}
   public String execute()throws Exception{
   LoginCheck lc=new LoginCheck();
   if(lc.Check(getUname(), getUpassword())){
   ActionContext.getContext().getSession().put("check", "success");
   return SUCCESS;
   }
   else{
   return LOGIN;
   }
   }
public void validate(){
if(getUname().trim()==null){
addFieldError("uname",getText("uname.error"));
}
if(getUpassword().trim()==null){
addFieldError("upassword",getText("upassword.error"));
}
}   
   }程序是这样运行的就是填好login.jsp后跳转到名为test的action(loginCk.java)
程序运行的效果是:在浏览器输入http://localhost:8888/str/login.jsp可以显示提交,然后浏览器自动跳转到这个地址http://localhost:8888/str/test?uname=12&upassword=wq,提示404错误如下:type Status reportmessage /str/testdescription The requested resource (/str/test) is not available.

解决方案 »

  1.   

    工程如下:str-src-act-loginCk.java
           -check-loginCheck.java
           -messge-Resource_zh_CN.properties
           -struts.xml
       -WEbRoot-WEB_INF
               -exception.jsp
               -login.jsp
               -success.jsp
    要找到action的路径应该是从str/act/test的吧?为什么找不到action呢?
      

  2.   

    form 是不是没有指明post or get 这个我也不太确定好久不动web了
      

  3.   

    提示404错误,看楼主上面的配置:
    在struts.xml中,楼主指定了请求的后缀名为"action",而你从form提交的请求没有并没有后缀,所以struts2不认为它是一个符合要求的请求,struts2中的filter没有进行拦截处理
    解决方法:
    1.楼主可以把jsp中的form的action属性值的后面加上".action"
    2.或者在struts.xml中把“<constant name="struts.action.extension" value="action"/>”去掉楼主试一下看看能不能解决
    (建议楼主在struts2的配置文件struts.xml中对package把namespace写上)
      

  4.   

     <form action="test.action">
      

  5.   

    <form action="test">
     看看加上.action 好不好用
      

  6.   

    public void validate(){
    if(getUname().trim()==null){
    addFieldError("uname",getText("uname.error"));
    }
    if(getUpassword().trim()==null){
    addFieldError("upassword",getText("upassword.error"));
    }
    }   把这个方法去掉,试试
      

  7.   

    表单<form action="test">
      没有指定访问哪个方法