一个验证登陆的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.
程序我的跳转设置是这样的:
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.
-check-loginCheck.java
-messge-Resource_zh_CN.properties
-struts.xml
-WEbRoot-WEB_INF
-exception.jsp
-login.jsp
-success.jsp
要找到action的路径应该是从str/act/test的吧?为什么找不到action呢?
在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写上)
看看加上.action 好不好用
if(getUname().trim()==null){
addFieldError("uname",getText("uname.error"));
}
if(getUpassword().trim()==null){
addFieldError("upassword",getText("upassword.error"));
}
} 把这个方法去掉,试试
没有指定访问哪个方法