在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,一切正常。。。。。。
無語了。。
爲什麼異常信息有些沒有在服務器打印出來。。。。。
總的來說,還是有收穫的,有點曲折。。。