So said,so done.

轻量级框架整合SSH(Struts2+Spring+Hibernate)+JSON实现登录

该模块是”和谐交通“中一小部分,虽然功能简单,但完成了SSH(Struts2+Spring+Spring)的整合,相当于SSH的”Hello World!”吧.
前台由JSON完成,使用AJAX的好处就不说了. 后台为Struts2框架
PS: 该模块在NetBeans下完成,以前习惯用MyEclipse,这次用NetBeans还真是不习惯,但实际项目要求用NetBeans,因为Myeclipse是商业软件,可能引来不必要的争端.
Sigh~~以前还感觉用盗版是理所当然的.

1.建立项目 首先建立以个webApp的java web项目 把必要的包都引入

2.前台JSP+JS

JSP页面核心代码,其它省略.

<form id=“form1″ method=“post” action=“#” >
    <label id=“name” for=“inputtext1″>Name:</label>
    <input id=“inputtext1″ type=“text” name=“inputtext1″ value=“” />
    <label  id=“password” for=“inputtext2″>Password:</label>
    <input id=“inputtext2″ type=“password” name=“inputtext2″ value=“” />
    <input id=“inputsubmit1″ type=“submit” name=“inputsubmit1″ value=“Sign In” />
</form>

JS文件为

$(document).ready(function() {
    $(“#form1″).submit(function()
    {
        login();
        return false;
    })
});

function login()
{
    var url = “loginAction”;
    var login_name = $(“#inputtext1″).val(); //get user’s name
    var login_password = $(“#inputtext2″).val(); //get user’s password
    var json_user = {
        inputtext1 : login_name,
        inputtext2 : login_password
    }; //JSON object

     if (login_name == “”)
    {
        $(“#login_confirm”).text(“\u8bf7\u8f93\u5165\u767b\u5f55\u540d”);
        $(“#inputtext1″).focus();
        return false;
    }
    if(login_password == “”)
    {
        $(“#login_confirm”).text(“\u8bf7\u8f93\u5165\u767b\u5f55\u5bc6\u7801″);
        $(“#inputtext2″).focus();
        return false;
    }
      //submit after handing in the form
    $.post( url ,json_user , callback , “json” );
    return false;
    function callback(json){
        var json_object = eval(‘(‘ + json.result + ‘)’);
        var suc = json_object.suc;
        var msg = json_object.msg;
        alert(msg);
      if(suc==0 ){
            $(“#inputtext1″).val(“”);
            $(“#inputtext2″).val(“”);
        }
        if(suc== 1){
          $(“#name”).html(“<p>\u60a8\u5df2\u6210\u529f\u767b\u9646<\u548c\u8c10\u4ea4\u901a>\u4e3b\u9875</p>” + $(“#inputtext1″).val() );
          $(“#inputtext1″).hide();
          $(“#password”).html(“<p> \u6b22\u8fce\u60a8 \uff01</p>”);
          $(“#inputtext2″).hide();
          $(“#inputsubmit1″).val(“Back”);
        }
    }
}

 
3.后台部分,完全按照MVC思想 ,建立6个包

Model包 info.yilee.person.model
Action层 info.yilee.action
Service层 info.yilee.person.service 及其实现层info.yilee.person.service.impl
Dao层的包为 info.yilee.person.dao及其实现层info.yilee.person.dao.impl

4,编写java文件

1 Person.java

package info.yilee.person.model;
import java.sql.Timestamp;

/**
*
* @author yilee
*/
public class Person {

    private int id;
    private String personRelationId;
    private String personName;
    private Timestamp birthday;
    private boolean sex;
    private String email;
    private String mobile;
    private Timestamp createDate;
    private Timestamp modifyDate;
    private String enableStatus;
    private String username;

   /**
   * 省略getter和setter, 必须加上!
   */
}

2 LoginAction.java

package info.yilee.person.action;

import com.opensymphony.xwork2.ActionSupport;
import info.yilee.person.model.Person;
import info.yilee.person.service.PersonService;

import org.apache.log4j.Logger;

/**
*
* @author yilee
*/
public class LoginAction extends ActionSupport {

    private static Logger log = Logger.getLogger(LoginAction.class);

    static {
        log.debug(“login action active”);
    }
    private String result;    //JSON字符串,JS与Action传递数据的载体

    public void setPersonService(PersonService personService) {
        this.personService = personService;
    }
    private String inputtext1;
    private String inputtext2;
    private PersonService personService;

    public void setInputtext1(String inputtext1) {
        this.inputtext1 = inputtext1;
    }

    public void setInputtext2(String inputtext2) {
        this.inputtext2 = inputtext2;
    }

    public String getResult() {
        return result;
    }

    @Override
    public String execute() throws Exception {
        log.debug(“loginAction execute begin”);
        String loginName = inputtext1;
        log.debug(“user name is “ + inputtext1);
        String password = inputtext2;
        log.debug(“password is “ + inputtext2);

        Person person = personService.getPersonByUsername(loginName);    //查询是否有用户名存在

        if (person == null) {
            log.debug(“user is not found!………..”);
            result = “{suc:0, msg:’用户名不存在’}”;    //构造JSON格式的字符串
        } else if (!password.equals(person.getPassword())) {
            log.debug(“user is found ! but password is wrong………..”);
            result = “{suc:0, msg:’密码不正确!’}”;
        } else {
            log.debug(“user is login successful!……………..”);
            result = “{suc:1, msg:’登录成功!’}”;
        }
        log.debug(“loginAction execute end”);
        return SUCCESS;
    }
}

3 PersonService.java

package info.yilee.person.service;

import info.yilee.person.model.Person;

/**
*
* @author yilee
*/
public interface  PersonService {
    public Person getPersonByUsername(String username);
}

4 PersonServiceImpl.java
 
package info.yilee.person.action;

import com.opensymphony.xwork2.ActionSupport;
import info.yilee.person.model.Person;
import info.yilee.person.service.PersonService;

import org.apache.log4j.Logger;

/**
*
* @author yilee
*/
public class LoginAction extends ActionSupport {

    private static Logger log = Logger.getLogger(LoginAction.class);

    static {
        log.debug(“login action active”);
    }
    private String result;    //JSON字符串,JS与Action传递数据的载体

    public void setPersonService(PersonService personService) {
        this.personService = personService;
    }
    private String inputtext1;
    private String inputtext2;
    private PersonService personService;

    public void setInputtext1(String inputtext1) {
        this.inputtext1 = inputtext1;
    }

    public void setInputtext2(String inputtext2) {
        this.inputtext2 = inputtext2;
    }

    public String getResult() {
        return result;
    }

    @Override
    public String execute() throws Exception {
        log.debug(“loginAction execute begin”);
        String loginName = inputtext1;
        log.debug(“user name is “ + inputtext1);
        String password = inputtext2;
        log.debug(“password is “ + inputtext2);

        Person person = personService.getPersonByUsername(loginName);    //查询是否有用户名存在

        if (person == null) {
            log.debug(“user is not found!………..”);
            result = “{suc:0, msg:’用户名不存在’}”;    //构造JSON格式的字符串
        } else if (!password.equals(person.getPassword())) {
            log.debug(“user is found ! but password is wrong………..”);
            result = “{suc:0, msg:’密码不正确!’}”;
        } else {
            log.debug(“user is login successful!……………..”);
            result = “{suc:1, msg:’登录成功!’}”;
        }
        log.debug(“loginAction execute end”);
        return SUCCESS;
    }
}

5 PersonDao.java
 
package info.yilee.person.dao;

import info.yilee.person.model.Person;

/**
*
* @author yilee
*/
public interface PersonDao {
    /**
    *根据username查找用户
     */
    Person get(String username);

}

6 PersonDaoImpl.java
 
package info.yilee.person.dao.impl;

import info.yilee.person.dao.PersonDao;
import info.yilee.person.model.Person;
import java.util.List;
import org.apache.log4j.Logger;
import org.springframework.orm.hibernate3.HibernateTemplate;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;

/**
*
* @author yilee
*/
public class PersonDaoImpl extends HibernateDaoSupport implements PersonDao {

    private static Logger log = Logger.getLogger(PersonDaoImpl.class);
    private HibernateTemplate ht;

    public Person get(String username) {
        ht = getHibernateTemplate();
        log.debug(“begin to hql”);
        List ul = getHibernateTemplate().find(“from Person p where p.username = ?”, username);
        log.debug(“dao is working and user name is “ + username);
        if (ul.size() == 0) {
            return null;
        } else {
            return (Person) ul.get(0);
        }
    }
}

5.完成配置文件

1 struts.xml
因为整合了JSON,所以和一般的struts.xml稍有不同

<?xml version=”1.0″ encoding=”UTF-8″ ?>
<!DOCTYPE struts PUBLIC
“-//Apache Software Foundation//DTD Struts Configuration 2.0//EN”
“http://struts.apache.org/dtds/struts-2.0.dtd”>
<struts>
    <package name=“person”  extends=“json-default”>
        <action name=“loginAction” class=“loginAction”>
            <result type=“json”/>
        </action>
    </package>
</struts>

2 applicationContext.xml
整合Spring

<?xml version=”1.0″ encoding=”UTF-8″?>
<!DOCTYPE beans PUBLIC “-//SPRING//DTD BEAN//EN” “/WEB-INF/dtd/spring-beans.dtd”>
<beans default-lazy-init=“true”>
    <bean id=“personDao” class=“edu.bjtu.person.dao.impl.PersonDaoImpl”>
        <property name=“sessionFactory” ref=“sessionFactory”></property>
    </bean>

    <bean id=“personService” class=“edu.bjtu.person.service.impl.PersonServiceImpl”>
        <property name=“personDao”>
            <ref local=“personDao”/>
        </property>
    </bean>

    <bean id=“loginAction” class=“edu.bjtu.person.action.LoginAction” lazy-init=“false”>
        <property name=“personService”>
            <ref local=“personService”/>
        </property>
    </bean>
</beans>

3  person.hbm.xml
整合Hibernate

<?xml version=”1.0″ encoding=”UTF-8″?>
<!DOCTYPE hibernate-mapping
PUBLIC “-//Hibernate/Hibernate Mapping DTD 3.0//EN”
“http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd”>
<hibernate-mapping package=“edu.bjtu.person.model”>
    <class name=“Person” table=“person”>
        <id name=“id” type=“int” column=“person_id”>
            <generator class=“increment”/>
        </id>
        <property name=“username” column=“person_username” type=“string”
                  not-null=“true” length=“50″/>
        <property name=“password” column=“person_password” type=“string”
                  not-null=“true” length=“50″/>
    </class>
</hibernate-mapping>
这样基本上就完成了 登陆模块 在此SSH框架下 加其它功能也基本上没问题了,按照LoginAction的顺序一样即可,当然,,该模块还顺便加入了 log4j配置,输出日志,便于查看bug:)….

无觅相关文章插件

This entry was posted in 技术 and tagged , . Bookmark the permalink.

3 Responses to 轻量级框架整合SSH(Struts2+Spring+Hibernate)+JSON实现登录

  1. Pingback: SSH(STRUTS2+SPRING+HIBERNATE)实现文件上传功能 | 异泪的博客

  2. Pingback: Java生成MD5算法 | 异泪的博客

  3. Pingback: "入侵"学院服务器 | 异泪的博客

发表评论

电子邮件地址不会被公开。 必填项已被标记为 *

*

您可以使用这些 HTML 标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>


验证码