这些天学Struts2,用它写了一个用户注册登录程序,主要是,MyEclipse给出的错误是
No configuration found for the specified action: 'userLogin' in namespace: ''. Form action defaulting to 'action' attribute's literal value.
select username,password from fortest where username='null' and password='null'
//这是登录Action
package org.qiang.action;import com.opensymphony.xwork2.ActionSupport;import org.qiang.action.UserRegisterAction;
import org.qiang.db_conn.DB_Connection;public class UserLoginAction extends ActionSupport{
private String username;
private String password;
DB_Connection db_conn = new DB_Connection();
String sql = "select username,password from fortest where username='"+ this.getUsername()+"' and password='"+this.getPassword()+"'";
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 String execute() {
System.out.println(sql);
db_conn.exeSqlQuery(sql);
return SUCCESS;
}
public void validate() {
if (getUsername() == null || getUsername().trim().equals("")) {
addFieldError("username", "请输入用户名");
}
if (getPassword() == null || getPassword().trim().equals("")) {
addFieldError("password", "请输入用户密码");
}
if (db_conn.exeSqlQuery(sql)==null){
addFieldError("password","你输入的用户名或密码有误 ,请重新输入");
}
}
}
//数据库连接程序,这个估计没问题,用过几次
package org.qiang.db_conn;import java.sql.*;
public class DB_Connection {
String userName="root";
String userPassword="123";
String url="jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf-8";
Connection dbcon;
Statement stmt;
ResultSet rs;
public DB_Connection()
{
stmt = null;
rs = null;
try
{
Class.forName("com.mysql.jdbc.Driver");
dbcon= DriverManager.getConnection(url,userName,userPassword);
}
catch(SQLException ex)
{
System.out.println(ex.toString());
}
catch(ClassNotFoundException ex)
{
System.out.println(ex.toString());
}
}
public boolean exeSqlUpdate(String strSql)
{
try
{
stmt=dbcon.createStatement();
stmt.executeUpdate(strSql);
return true;
}
catch(Exception ex)
{
System.out.println(ex.toString());
return false;
}
}
public ResultSet exeSqlQuery(String strSql)
{
try
{
stmt=dbcon.createStatement();
rs =stmt.executeQuery(strSql);
}
catch(Exception ex)
{
System.out.println(ex.toString());
rs = null;
}
return rs;
}
}<!--jsp页面的表单代码段-->
<s:form name="login" action="userLogin" method="post">
<table width="40%" align="center"> <tr>
<td>
<s:textfield name="username" label="用 户 名" />
</td>
</tr>
<tr>
<td>
<s:password name="password" label="用户密码" />
</td>
</tr>
<tr>
</tr>
<tr>
<td>
<s:submit value="提交(execute)"></s:submit>
</td>
<td>
<s:reset value="重置(reset)"></s:reset>
</td>
</tr>
</table>
</s:form>struts.xml
<action name="userLogin" class="org.qiang.action.UserLoginAction">
<result name="input">/userLogin.jsp</result>
<result name="success">/loginSuccess.jsp</result>
</action>问题是:在登录页面,我输入任意用户名跟密码,都能够登录成功,无论数据库中有没有对应的字段
我用的是Myeclips 8.0 MySQL 5.0
请各位指教,先行谢过了
No configuration found for the specified action: 'userLogin' in namespace: ''. Form action defaulting to 'action' attribute's literal value.
select username,password from fortest where username='null' and password='null'
//这是登录Action
package org.qiang.action;import com.opensymphony.xwork2.ActionSupport;import org.qiang.action.UserRegisterAction;
import org.qiang.db_conn.DB_Connection;public class UserLoginAction extends ActionSupport{
private String username;
private String password;
DB_Connection db_conn = new DB_Connection();
String sql = "select username,password from fortest where username='"+ this.getUsername()+"' and password='"+this.getPassword()+"'";
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 String execute() {
System.out.println(sql);
db_conn.exeSqlQuery(sql);
return SUCCESS;
}
public void validate() {
if (getUsername() == null || getUsername().trim().equals("")) {
addFieldError("username", "请输入用户名");
}
if (getPassword() == null || getPassword().trim().equals("")) {
addFieldError("password", "请输入用户密码");
}
if (db_conn.exeSqlQuery(sql)==null){
addFieldError("password","你输入的用户名或密码有误 ,请重新输入");
}
}
}
//数据库连接程序,这个估计没问题,用过几次
package org.qiang.db_conn;import java.sql.*;
public class DB_Connection {
String userName="root";
String userPassword="123";
String url="jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf-8";
Connection dbcon;
Statement stmt;
ResultSet rs;
public DB_Connection()
{
stmt = null;
rs = null;
try
{
Class.forName("com.mysql.jdbc.Driver");
dbcon= DriverManager.getConnection(url,userName,userPassword);
}
catch(SQLException ex)
{
System.out.println(ex.toString());
}
catch(ClassNotFoundException ex)
{
System.out.println(ex.toString());
}
}
public boolean exeSqlUpdate(String strSql)
{
try
{
stmt=dbcon.createStatement();
stmt.executeUpdate(strSql);
return true;
}
catch(Exception ex)
{
System.out.println(ex.toString());
return false;
}
}
public ResultSet exeSqlQuery(String strSql)
{
try
{
stmt=dbcon.createStatement();
rs =stmt.executeQuery(strSql);
}
catch(Exception ex)
{
System.out.println(ex.toString());
rs = null;
}
return rs;
}
}<!--jsp页面的表单代码段-->
<s:form name="login" action="userLogin" method="post">
<table width="40%" align="center"> <tr>
<td>
<s:textfield name="username" label="用 户 名" />
</td>
</tr>
<tr>
<td>
<s:password name="password" label="用户密码" />
</td>
</tr>
<tr>
</tr>
<tr>
<td>
<s:submit value="提交(execute)"></s:submit>
</td>
<td>
<s:reset value="重置(reset)"></s:reset>
</td>
</tr>
</table>
</s:form>struts.xml
<action name="userLogin" class="org.qiang.action.UserLoginAction">
<result name="input">/userLogin.jsp</result>
<result name="success">/loginSuccess.jsp</result>
</action>问题是:在登录页面,我输入任意用户名跟密码,都能够登录成功,无论数据库中有没有对应的字段
我用的是Myeclips 8.0 MySQL 5.0
请各位指教,先行谢过了
解决方案 »
- Spring错误:Pointcut is malformed: error at ::0 formal unbound in
- 关于j2EE的学习 路线
- Spring MVC 整合Freemarker的问题,求请教
- 关于工作流的实现
- 帮我看看 写的分页在IE里不好使,火狐里好使怎么办?
- hibernate 查询语句中单引号“’”的问题
- word用程序调用打印的时候提示是否将文件保存
- 【分享】关于访问webservice的问题
- LDAP And JNDI?
- 在分析PetStore1.3时候遇到的问题,关于jndi
- jxl导出excel如何控制单元格的格式
- 请问,spring3.0的mvc如何在请求到来前调用Controller的某个方法
你的struts.xml中是不是package中namespace设置有问题?如果你在package中设置了namespace建议你去掉namespace试试。
可以这样写 xxx.userLogin.action
xxx代表你的命名空间
推荐你看看 风中叶 或者 马士兵的视频STRUTS2的
<package name="org.qiang.action" >
<action name="userLogin" class="org.qiang.action.UserLoginAction">
<result name="input">/userLogin.jsp</result>
<result name="success">/loginSuccess.jsp</result>
</action>
</package>
2 你输入任何值都可以登录成功是因为你的execute方法中只有一个返回值,在执行提交时自动调用execute方法后都会返回那一个success,所以只会按照返回值为success所对应的那个页面跳转。
3 select username,password from fortest where username='null' and password='null'
这两个变量username和password属性为空的问题应该是由于你在类体中直接引用了定义的两个私有属性。虽然说你有了set和get方法可以获取表单中的值,但是在方法体外写的话只是一个引用,如果不设初始值的话java会给它设定一个默认值,字符串的默认值就是null。
4 楼主的validate验证我觉得没什么用,你提交的时候根本就没有调用哪个方法。
<constant name="struts.devMode" value="true"/>
<package name="default" namespace="/" extends="struts-default">
<action name="index">
<result>/index.jsp</result>
</action>
<action name="userLogin" class="org.qiang.action.UserLoginAction">
<result name="input">/userLogin.jsp</result>
<result name="success">/loginSuccess.jsp</result>
</action>
</package>
</struts>配置文件是这样的
给你的form加上namespace="/"