初识struts2和hibernate在MyEclipse下整合

来源:互联网 发布:rds mysql 慢 编辑:程序博客网 时间:2024/06/08 06:31

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

无语了。。

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

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


0 0