初识struts2和hibernate在MyEclipse下整合

在MyEclipse下插件方便很多,所以转战MyEclipse。

整合struts2和hibernate,例子是一个简单的登陆的功能,数据库是MySql。

先是配Struts2环境

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.enable.DynamicMethodInvocation" value="false" />
	<constant name="struts.devMode" value="true" />

	<package name="default" extends="struts-default">

		<default-action-ref name="index" />

		<global-results>
			<result name="error">error.jsp</result>
		</global-results>

		<global-exception-mappings>
			<exception-mapping exception="java.lang.Exception"
				result="error" />
		</global-exception-mappings>

		<action name="loginn" class="com.test.action.LoginAction">
			<result name="success">/success.jsp</result>
			<result name="input">/index.jsp</result>
			<result name="error">/index.jsp</result>
		</action>
	</package>
</struts>    

LoginAction.java

package com.test.action;

import java.util.List;

import com.opensymphony.xwork2.ActionSupport;
import com.test.dao.UserDaoImpl;
import com.test.model.User;

public class LoginAction extends ActionSupport {

	private User user = new User();

	public User getUser() {
		return user;
	}

	public void setUser(User user) {
		this.user = user;
	}

	public void validate() {
		if (user.getUsername().equals("")) {
			this.addActionError("用户名不能为空");
		}
		if (user.getPassword().equals("")) {
			this.addActionError("密码不能为空");
		}
	}

	public String execute() {
		System.out.println(user.getUsername() + "," + user.getPassword());
		String t = "admin";
		if (user.getUsername().equals(t)&&user.getPassword().equals(t)) {
			return SUCCESS;
		}
		this.addActionError("用户名密码错误!");
		return ERROR;
	}

}

struts2框架正常。。

再加Hibernate。

User.hbm.xml

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
        "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
        "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="com.test.model">
	<class name="User" table="test_hibernate_user">
		<id name="id" type="integer">
			<generator class="identity" />
		</id>
		<property name="username" type="string" />
		<property name="password" type="string" />
	</class>
</hibernate-mapping>

UserDaoImpl.java

package com.test.dao;

import java.util.List;

import org.hibernate.Query;
import org.hibernate.Session;

import com.test.model.HibernateSessionFactory;
import com.test.model.User;

public class UserDaoImpl implements UserDao {

	public boolean login(User user) {
		try {
			System.out.println("1111");
			Session session = HibernateSessionFactory.getSession();
			Query q = session
					.createQuery("from User as a where a.username=? and a.password=?");
			q.setString(0, user.getUsername());
			q.setString(1, user.getPassword());
			List list = q.list();
			System.out.println("list   " + list);
			if (list.size() != 0) {
				return true;
			}
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			HibernateSessionFactory.closeSession();
		}
		return false;
	}

	public static void main(String[] args) {
		User u = new User("admin", "admin");
		new UserDaoImpl().login(u);
	}
}

LoginAction.java改为:

public String execute() {
		System.out.println(user.getUsername() + "," + user.getPassword());
		// String t = "admin";
		boolean b = new UserDaoImpl().login(user);
		System.out.println(b);
		if (b) {
			return SUCCESS;
		}
		this.addActionError("用户名密码错误!");
		return ERROR;
	}

照理来说没啥问题。

但是,登陆的时候,只能输出上面的打印信息,也没有报错,不知道怎么回事,返回也异常。

                        System.out.println("1111");
			Session session = HibernateSessionFactory.getSession();
			Query q = session
					.createQuery("from User as a where a.username=? and a.password=?");
			q.setString(0, user.getUsername());
			q.setString(1, user.getPassword());
			List list = q.list();
			System.out.println("list   " + list);

然后用一个单纯的java程序测试了一下,结果

部分代码:

public static void main(String[] args) {
		User u = new User("admin", "admin");
		new UserDaoImpl().login(u);
	}

打印出了好多信息。。。。为什么之前没有打印出来,这里报错了。。。。

NoSuchMethodError: antlr.collections.AST.getLine()I

百度到了这篇http://www.cnblogs.com/songhaipeng/p/3323541.html,按照上面的方法,删除antlr2.7.2,之后运行正常。

再来测试web,一切正常。。。。。。

无语了。。

为什么异常信息有些没有在服务器打印出来。。。。。

总的来说,还是有收获的,有点曲折。。。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值