初識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,一切正常。。。。。。

無語了。。

爲什麼異常信息有些沒有在服務器打印出來。。。。。

總的來說,還是有收穫的,有點曲折。。。


發佈了114 篇原創文章 · 獲贊 11 · 訪問量 13萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章