`
serisboy
  • 浏览: 172549 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

struts2+spring实现简单用户登录注册

    博客分类:
  • java
阅读更多
在前面demo的基础上再做一个涉及数据库访问,分层结构的简单用户登录注册例子,步骤如下:

1.新建user表,sql语句如下

DROP TABLE IF EXISTS `user`;
CREATE TABLE `user` (
  `id` int(11) NOT NULL auto_increment,
  `name` char(128) NOT NULL,
  `credits` int(11) default '0',
  `password` varchar(32) NOT NULL,
  `last_visit` datetime default NULL,
  `last_ip` varchar(23) NOT NULL,
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

2.新建注册页面register.jsp,登录的页面还是前面的index.jsp,两者很相似

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
    <title>My JSP 'register.jsp' starting page</title>
    <meta http-equiv="pragma" content="no-cache">
    <meta http-equiv="cache-control" content="no-cache">
    <meta http-equiv="expires" content="0">   
    <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
    <meta http-equiv="description" content="This is my page">
    <!--
    <link rel="stylesheet" type="text/css" href="styles.css">
    --> 
  </head>
  <body>
    <form action="Register" method="post">
    <Table>
        <Tr>
            <td>用户名:</Td>
            <td><input type="text" name="username" /></Td>
        </Tr>
        <Tr>
            <td>密码:</Td>
            <td><input type="password" name="password" /></Td>
        </Tr>
        <Tr>
            <td><input type="submit" name="submit" value="注册"/></Td>
            <td><input type="reset" name="reset" value="重置"/></Td>
        </Tr>
    </Table>
    </form> 
  </body>
</html>

3.导入所需要的包mysql-connector-java(jdbc驱动),spring里的jdbc,transaction包,commoms-dbcp,commons-pool(两者配合使用完成数据库连接池),导入完成后要在spring配置文件中进行配置,配置文件在后面给出

4.由于用户注册需对密码进行md5加密,所以先给出md5加密的工具类Md5Encode.java,此文件为网上看到的,直接拿来用的
package com.struts2.util;
import java.security.MessageDigest;
public class Md5Encode {
    private final static String[] hexDigits={
        "0","1","2","3","4","5","6","7","8","9","a","b","c","d","e","f"};
    public static String byteArrayToHexString(byte[] b){
        StringBuffer resultSb=new StringBuffer();
        for(int i=0;i<b.length;i++){
            resultSb.append(byteToHexString(b[i]));
        }
        return resultSb.toString();
    }
    private static String byteToHexString(byte b){
        int n=b;
        int d1=0;
        int d2=0;
        if(n<0){
            n=256+n;
            d1=n/16;
            d2=n%16;
        }
        return hexDigits[d1]+hexDigits[d2];
    }
    public static String MD5Encode(String origin){
   String resultString=null;
        try{
            resultString=new String(origin);
            MessageDigest md=MessageDigest.getInstance("MD5");
            resultString=byteArrayToHexString(md.digest(resultString.getBytes()));
        }catch(Exception e){
        }
        return resultString;
    }
}

5.在程序里添加dao,model与service(前面例子已经添加过)

    加好后,先在model package里加入实体类Usre.java

package com.struts2.model;
import java.io.Serializable;
import java.util.Date;
public class User implements Serializable{
    private int uid;
    private String username;
    private String password;
    private int credits;
    private String lastIp;
    private Date lastVisit;
    public int getUid() {
        return uid;
    }
    public void setUid(int uid) {
        this.uid = uid;
    }
    public String getUsername() {
        return username;
    }
    public void setUsername(String username) {
        this.username = username;
    }
    public String getPassword() {
        return password;
    }
    public void setPassword(String password) {
        this.password = password;
    }
    public int getCredits() {
        return credits;
    }
    public void setCredits(int credits) {
        this.credits = credits;
    }
    public String getLastIp() {
        return lastIp;
    }
    public void setLastIp(String lastIp) {
        this.lastIp = lastIp;
    }
    public Date getLastVisit() {
        return lastVisit;
    }
    public void setLastVisit(Date lastVisit) {
        this.lastVisit = lastVisit;
    }
     
}

dao与Service里最好加上接口包,在这里,我只在dao里加了接口包,并在里面写了dao接口类IUserDao.java


package com.struts2.dao.impl;
 
import com.struts2.model.User;
public interface IUserDao  {
    public void addUser(User user);
    public void delUser(User user);
    public User findUserByName(String username);
    public void updateUser(User user);
    public boolean checkUser(String username,String password);
    public boolean register(User user);
}

下面是实现接口的UserDao.java

package com.struts2.dao;
import org.springframework.dao.DataAccessException;
import org.springframework.jdbc.core.JdbcTemplate;
import com.struts2.dao.impl.IUserDao;
import com.struts2.model.User;
public class UserDao implements IUserDao  {
    private JdbcTemplate jdbcTemplate;
    //注入
    public void setJdbcTemplate(JdbcTemplate jdbcTemplate) {
        this.jdbcTemplate = jdbcTemplate;
    }
    public void addUser(User user) {
        // TODO Auto-generated method stub
    }
    public void delUser(User user) {

        // TODO Auto-generated method stub
    }
    public User findUserByName(String username) {

        // TODO Auto-generated method stub

        return null;

    }
    public void updateUser(User user) {

        // TODO Auto-generated method stub
    }

 

    public boolean checkUser(String username, String password) {

        // TODO Auto-generated method stub

        System.out.println(password);

        String sql="select count(*) from user where name=? and password=? ";

        int count=jdbcTemplate.queryForInt(sql,new Object[]{username,password});

        return count>0;

    }
    public boolean register(User user)  {

        // TODO Auto-generated method stub

        System.out.println("beign dao");

        String sql="insert into  user (name,credits,password,last_visit,last_ip) values (?,?,?,?,?)";

        Object[] args={user.getUsername(),user.getCredits(),user.getPassword(),user.getLastVisit(),user.getLastIp()};

        try{

            jdbcTemplate.update(sql, args);
        }catch (DataAccessException e)

        {

            e.printStackTrace();

            return false;

        }
        return true;
    }

}

有些方法加上了,没实现,其中对数据库的操作是使用了spring里封装的jdbc

最后就是Service了,我把登录和注册写成了两个Service类,好的做法应该写成一个UserService类,里面写两个方法就可以了

既然写了两个文件,就都贴出来吧

LoginService.java
package com.struts2.service;
import com.struts2.dao.UserDao;
import com.struts2.model.User;
public class LoginService {
    private UserDao userdao;

    public boolean login(User user) throws Exception{

        boolean flag=false;

        if(userdao.checkUser(user.getUsername(), user.getPassword())){

            flag=true;

        }

        return flag;

    }

    public void setUserdao(UserDao userdao) {

        this.userdao = userdao;

    }
}

RegisterService.java


package com.struts2.service;
import com.struts2.dao.UserDao;
import com.struts2.model.User;
public class RegisterService {
    private UserDao userDao;
    public boolean Register(User user){
        System.out.println("begin Service");
        return userDao.register(user);
    }

    public void setUserDao(UserDao userDao) {

        this.userDao = userDao;

    }
}

6.在编写完分层后,添加ReigsterAction.java并修改前面的LoginAction.java

RegisterAction.java
package com.struts2.action;
import java.util.Date;

import java.util.Map;
import com.opensymphony.xwork2.Action;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
import com.struts2.model.User;
import com.struts2.service.RegisterService;
import com.struts2.util.Md5Encode;
import org.apache.struts2.ServletActionContext;
public class RegisterAction extends ActionSupport implements Action{

    private String username;

    private String password;
    private RegisterService registerService;
    public String execute() throws Exception{
        System.out.println("begin action");
        User user=new User();
        user.setUsername(username);
        user.setPassword(Md5Encode.MD5Encode(password));
        user.setCredits(10);
        user.setLastVisit(new Date());
        user.setLastIp(ServletActionContext.getRequest().getRemoteAddr());
        if(this.registerService.Register(user)){
            return this.SUCCESS;
        } else{
            return this.ERROR;
        }
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }
    public void setRegisterService(RegisterService registerService) {
        this.registerService = registerService;
    }
}
LoginAction.java

package com.struts2.action;
import java.util.Map;
import com.opensymphony.xwork2.Action;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
import com.struts2.model.User;
import com.struts2.service.LoginService;
import com.struts2.util.Md5Encode;
public class LoginAction extends ActionSupport implements Action{
    private static final long serialVersionUID  =   1L ;
    private String username;
    private String password;
    private LoginService loginService;
    @Override
    public void validate()
    {
    }
    public String execute() throws Exception

    {  
        User user=new User();
        user.setUsername(username);
        user.setPassword(Md5Encode.MD5Encode(password));
        boolean result=this.loginService.login(user);
        if(result){
            return this.SUCCESS;
        }else{
            return this.ERROR ;
        }  
    }
    public String getUsername() {
        return username;
    }
    public void setUsername(String username) {
        this.username = username;
    }
    public String getPassword() {
        return password;
    }
    public void setPassword(String password) {
        this.password = password;
    }
    public LoginService getLoginService() {
        return loginService;
    }
    public void setLoginService(LoginService loginService) {
        this.loginService = loginService;
    }
}

7.配置struts.xml,配置新的action

<?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>
   <constant name="struts.i18n.encoding" value="utf-8"></constant>
   <constant name="struts.objectFactory" value="spring"></constant>
    <package name="strutsqs"  extends="struts-default">
        <action name="Login" class="com.struts2.action.LoginAction">
            <result name="success">/welcome.jsp</result>
            <result name="error">/error.jsp</result>
        </action>
        <action name="Register" class="com.struts2.action.RegisterAction">
            <result name="success">/welcome.jsp</result>
            <result name="error">/error.jsp</result>
        </action>
    </package>
</struts>

8.最后给出最重要的spring配置文件applicationContext.xml

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE beans PUBLIC   
    "-//SPRING//DTD BEAN//EN"  
    "http://www.springframework.org/dtd/spring-beans.dtd"> 
<beans>
    <!-- 数据源配置 -->
    <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
        <property name="driverClassName" value="com.mysql.jdbc.Driver"></property>
        <property name="url" value="jdbc:mysql://localhost:3306/spring"></property>
        <property name="username" value="root"></property>
        <property name="password" value="root"></property>
    </bean>
    <!-- 定义Spring JDBC模板类bean -->
    <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
        <property name="dataSource" ref="dataSource"></property>
    </bean>
    <!-- dao -->
    <bean id="userDao" class="com.struts2.dao.UserDao">
        <property name="jdbcTemplate" ref="jdbcTemplate" ></property>
    </bean>
    <!-- service -->
    <bean id="registerService" class="com.struts2.service.RegisterService">
        <property name="userDao" ref="userDao"></property>
    </bean>
    <bean id="loginService" class="com.struts2.service.LoginService">
        <property name="userdao" ref="userDao"></property>
    </bean>
    <!-- action -->
    <bean id="login" class="com.struts2.action.LoginAction">
        <property name="loginService" ref="loginService"></property>
    </bean>
    <bean id="register" class="com.struts2.action.RegisterAction">
        <property name="registerService" ref="registerService"></property>
    </bean>
</beans>

从上面明显可以看出层之间的依赖关系,action-->service-->dao--->jdbc模板--->数据源
分享到:
评论

相关推荐

    基于Struts2+Spring+Hibernate+MySql的注册登录系统.zip

    总的来说,基于Struts2+Spring+Hibernate+MySql的注册登录系统是利用这些技术协同工作,实现了用户注册、登录的基本功能。Struts2处理请求,Spring管理组件和事务,Hibernate负责数据持久化,而MySql存储数据。...

    Struts2+maven+spring+mybatis整合实现注册功能实例

    这个实例是关于如何将这些技术融合在一起,实现一个用户注册的功能。 首先,Struts2是一个基于MVC设计模式的Action框架,它负责处理用户的请求并转发到相应的业务逻辑。在注册功能中,Struts2会接收前端的注册表单...

    struts2 + spring 3 + hibernate3.3整合实现图书馆管理管理

    通过Struts2处理请求和响应,Spring管理对象和事务,Hibernate进行数据库操作,实现了用户管理与书籍管理的核心功能。对于开发者而言,理解并掌握SSH的整合开发,能够提升开发效率,构建出稳定高效的Web应用。

    Struts2+Hibernate+Spring4 整合微信登录demo

    该项目是一个综合示例,旨在帮助初学者了解如何将流行的Java开发框架Struts2、Hibernate和Spring4整合在一起,并实现微信登录功能。这三个框架在企业级Java应用开发中广泛使用,它们各自负责不同的职责:Struts2处理...

    AJAX实现用户登录注册(Struts+Spring+Hibernate+Ajax框架)

    AJAX实现用户登录注册(Struts+Spring+Hibernate+Ajax框架) AJAX实现用户登录注册(Struts+Spring+Hibernate+Ajax框架) AJAX实现用户登录注册(Struts+Spring+Hibernate+Ajax框架)

    struts+spring+hibernate整合实现用户注册

    一个简单的struts+spring+hibernate整合实现用户注册的例子,我花了一个下午整出来的,希望对想学习的同志有所帮助。 mysql sql文: DROP TABLE IF EXISTS `user`; CREATE TABLE `user` ( `password` varchar(32) ...

    struts2+hibernate+spring实现的博客系统

    1. **用户模块**:用户注册、登录、个人信息管理等功能,Struts2处理HTTP请求,Spring管理用户服务层(UserService),Hibernate负责用户数据的持久化。 2. **文章模块**:用户可以发布、编辑、删除自己的文章,...

    在Netbeans中使用Struts2.0+Spring2.5+Hibernate框架

    本文旨在通过一个简单的登录示例项目,详细介绍如何在Netbeans IDE环境下构建基于Struts2.0、Spring2.5与Hibernate框架的应用程序。 #### 二、环境搭建与准备 ##### 1. 软件需求 - JDK 1.6:确保安装了正确的Java...

    注解 Struts2+Spring3+Hibernate3框架整合AJAX+JQuery实现登录、注册以及验证码和验证注册用户信息

    Struts2+Spring3+Hibernate3框架整合AJAX+JQuery实现登录、注册以及验证码和验证注册用户的用户名唯一性 代码简单易懂且肯定正确,有丰富的注释肯定能看明白,本来不想设资源分,但是看到凡是上传代码的都设了资源分...

    struts2+spring+ibatis用户管理

    本项目"struts2+spring+ibatis用户管理"是一个整合示例,旨在展示如何将这三个框架集成到一起,实现一个基本的用户管理系统。 **Struts2** 是一个基于MVC设计模式的Action框架,主要用于处理HTTP请求,提供了一系列...

    一个简单的基于Struts2+Spring+Hibernate+MySql的注册登录系统

    3. **业务逻辑**:编写Struts2 Action,处理用户提交的注册和登录请求,调用Spring管理的Service层进行具体业务处理。 4. **持久化操作**:在Service层中,使用Hibernate的Session接口进行数据库交互,如save()方法...

    Struts2 + spring + hibernate + dwr 完美整合代码

    综合以上,本项目通过Struts2、Spring、Hibernate和DWR的整合,构建了一个具备用户注册、多级下拉联动和表格刷新功能的Web应用。这种整合不仅提高了开发效率,也提升了用户体验,展示了Java Web开发的强大能力。在...

    struts1+spring+hibernate+freemarker一个小例子

    在这个初级示例中,开发者可能创建了一个简单的用户登录或注册功能,涉及到Struts1的动作映射,Spring的依赖注入,Hibernate的数据操作,以及Freemarker的模板渲染。虽然描述中提到内容简单,但实际操作中,这四个...

    网上购物系统Struts2+Spring2.5+Hibernate3

    5. 系统架构与功能:该系统可能包含了用户注册登录、商品浏览、购物车管理、订单处理、支付接口集成等核心模块。通过Struts2和Spring2.5的配合,实现了业务逻辑与展示层的分离,提高了代码的可读性和可测试性。同时...

    图书管理系统spring+struts+hibernate

    library_ssh2可能是一个包含系统源代码的压缩文件,"ssh2"可能表示系统使用了Struts2、Spring2和Hibernate2这三个框架的早期版本。这个文件中应包含所有必要的Java源代码、配置文件、Web应用相关的资源(如JSP页面、...

    struts2+spring+hibernate Demo

    测试SSH Demo时,可以创建一个简单的用户登录或注册功能,涉及Action、Service、DAO以及相应的数据库交互。"testSSH"可能是一个测试用例或者测试目录,用于验证整个SSH整合是否正常工作,比如可以包含测试用户的账号...

    java struts2+hibernate+spring开发简易电子商城+实验报告

    使用java ssh框架(struts2+hibernate+spring)开发的简易电子商城系统,有用户登录注册功能、商城购物功能,有前端页面,开发环境:编译器为eclipse,数据库为mysql5.7(mysql8.0用不了,需要重新修改配置文件),...

    论坛系统(Struts 2+Hibernate+Spring实现)

    此外,Struts 2与Spring的集成使得依赖注入变得简单,提高了代码的可测试性。 **Hibernate** 是一个对象关系映射(ORM)框架,它将Java对象与数据库表进行映射,从而消除了传统的JDBC编程的繁琐。通过Hibernate,...

    struts2+hibernate+spring+mysql 简单注册功能实现

    在这个简单的注册功能实现中,我们将深入探讨这些技术如何协同工作来完成用户注册。 首先,Struts2 是一个基于 MVC(Model-View-Controller)模式的Web应用框架,它负责处理HTTP请求并将其映射到相应的Action,进而...

    struts2+spring+hibernate整合实例

    - 测试整合:创建简单的示例项目,如用户登录注册,验证整合是否成功。 5. **优势**:这种整合提供了模型层、服务层和视图层的分离,降低了组件之间的耦合度,提高了代码的可读性和可维护性。同时,Spring的事务...

Global site tag (gtag.js) - Google Analytics