• struts2+spring3+hibernate3+mysql简单登录实现


    1.导入相关的jar包

    2.建立数据库

    复制代码
    1 create table account(
    2 id int(10),
    3 user varchar(50),
    4 paw varchar(50)
    5 );
    6 insert into account values(1,'admin','admin');
    复制代码

    3.建立包结构

    4.配置文件的配置及代码

    4.1 数据库配置文件:db.properties

    1 #jdbc
    2 jdbc.driver=com.mysql.jdbc.Driver
    3 jdbc.url=jdbc:mysql://127.0.0.1:3306/test
    4 jdbc.username=root
    5 jdbc.password=

    4.2 spring配置文件:applicationContext.xml

    复制代码
     1 <?xml version="1.0" encoding="UTF-8"?>
     2 <beans xmlns="http://www.springframework.org/schema/beans"
     3     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
     4     xmlns:util="http://www.springframework.org/schema/util" xmlns:jee="http://www.springframework.org/schema/jee"
     5     xmlns:tx="http://www.springframework.org/schema/tx" xmlns:jpa="http://www.springframework.org/schema/data/jpa"
     6     xmlns:mvc="http://www.springframework.org/schema/mvc"
     7     xsi:schemaLocation="
     8         http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
     9         http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.2.xsd
    10         http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-3.2.xsd
    11         http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-3.2.xsd
    12         http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.2.xsd
    13         http://www.springframework.org/schema/data/jpa http://www.springframework.org/schema/data/jpa/spring-jpa-1.3.xsd
    14         http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd">
    15     <context:component-scan base-package="ssh.ft"></context:component-scan>
    16 
    17     <context:property-placeholder location="classpath:configs/db.properties" />
    18     <!-- datasource -->
    19     <bean id="dataSource"
    20         class="org.springframework.jdbc.datasource.DriverManagerDataSource">
    21         <property name="driverClassName" value="${jdbc.driver}" />
    22         <property name="url" value="${jdbc.url}" />
    23         <property name="username" value="${jdbc.username}" />
    24         <property name="password" value="${jdbc.password}" />
    25     </bean>
    26     <!-- spring与hibernate整合 spring来管理session的创建、打开和关闭 -->
    27     <bean id="sessionFactory"
    28         class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
    29         <!-- 通过配置文件的方式获取数据源,出现异常,未解决 -->
    30         <property name="hibernateProperties">
    31             <props>
    32                 <prop key="connection.useUnicode">true</prop>
    33                 <prop key="connection.characterEncoding">utf-8</prop>
    34                 <prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
    35                 <prop key="hibernate.show_sql">true</prop>
    36                 <prop key="hibernate.hbm2ddl.auto">update</prop>
    37             </props>
    38         </property>
    39         <property name="dataSource" ref="dataSource" />
    40         <property name="mappingResources">
    41             <list>
    42                 <!-- 以下用来列出所有的PO映射文件 -->
    43                 <value>configs/account.hbm.xml</value>
    44             </list>
    45         </property>
    46     </bean>
    47     <!-- 定义事物管理器,并位事物管理器配置上述所定义的session -->
    48     <!-- <bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager"> 
    49         <property name="sessionFactory"> <ref bean="sessionFactory" /> </property> 
    50         </bean> <tx:annotation-driven transaction-manager="transactionManager"/> -->
    51 
    52     <!-- 对事物管理器进行设置 表示对save、del、update开头的方法应用事物 -->
    53     <!-- <tx:advice id="txAdvice" transaction-manager="transactionManager"> 
    54         <tx:attributes> <tx:method name="save*" propagation="REQUIRED" /> <tx:method 
    55         name="del*" propagation="REQUIRED" /> <tx:method name="update*" propagation="REQUIRED" 
    56         /> </tx:attributes> </tx:advice> -->
    57 
    58     <!-- 注入dao -->
    59     <bean class="ssh.ft.dao.impl.AccountDaoImpl" id="accountDao">
    60         <property name="sessionFactory" ref="sessionFactory"></property>
    61     </bean>
    62 
    63     <!--注入service -->
    64     <bean class="ssh.ft.service.impl.AccountManagerImpl" id="accountManager">
    65         <property name="dao" ref="accountDao"></property>
    66     </bean>
    67 
    68     <!--写action和业务逻辑层依赖注入 -->
    69     <!--将scope设置成prototype,预防了线程安全问题 -->
    70     <bean class="ssh.ft.action.LoginAction" id="loginAction" scope="prototype">
    71         <property name="accountManager" ref="accountManager"></property>
    72     </bean>
    73 </beans>
    复制代码

    注:上述配置中注释掉的事物部分,因为小编未使用到,所以也没有认证,在配置时可去掉

    4.4 配置完spring,可以先测试下配置是否正确

    复制代码
     1 package ssh.ft.test;
     2 
     3 import java.util.List;
     4 
     5 import org.hibernate.SessionFactory;
     6 import org.junit.Test;
     7 import org.springframework.context.ApplicationContext;
     8 import org.springframework.context.support.ClassPathXmlApplicationContext;
     9 
    10 import ssh.ft.entity.Account;
    11 
    12 public class DBTest {
    13     @Test
    14     public void test1() {
    15         String config = "configs/applicationContext.xml";
    16         ApplicationContext ac = new ClassPathXmlApplicationContext(config);
    17         SessionFactory sf = ac.getBean(SessionFactory.class);
    18         String sql = "from Account";
    19         @SuppressWarnings("unchecked")
    20         List<Account> list = sf.openSession().createQuery(sql).list();
    21         System.out.println(list.size());
    22     }
    23 }
    复制代码

    若配置正确则有如下结果:红色框中的数字1表示数据库中表account中有一条数据,若未出现正确结果,则需要检查上述代码哪里出错,或者是jar的问题

    因为小编也遇到过很多jar包不全之类的问题,务必正确之后再往下编写,否则到后面错误或更多导致无法查找

    4.5 struts配置文件:struts.xml

    复制代码
     1 <?xml version="1.0" encoding="UTF-8" ?>
     2 <!DOCTYPE struts PUBLIC
     3     "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
     4     "http://struts.apache.org/dtds/struts-2.3.dtd">
     5 <struts>
     6     <!-- 开发模式 -->
     7     <constant name="struts.devMode" value="true" />
     8     <!-- 将Action的创建交给spring来管理 -->
     9     <constant name="struts.objectFactory" value="spring" />
    10 
    11     <!-- 包含的配置文件 <include file="/configs/struts-user.xml"></include> -->
    12     <package name="s2sh" extends="s2sh1">
    13         <!-- Action的配置在这里 -->
    14         <action name="login" class="loginAction" method="login">
    15             <result name="success">/WEB-INF/index.jsp</result>
    16             <result name="error">/WEB-INF/login.jsp</result>
    17         </action>
    18     </package>
    19     <package name="s2sh1" extends="struts-default">
    20         <action name="tologin" >
    21             <result >/WEB-INF/login.jsp</result>
    22         </action>
    23     </package>
    24 </struts>
    复制代码

    4.6 hibernate配置文件:hibernate.cfg.xml 

    复制代码
     1 <!DOCTYPE hibernate-configuration PUBLIC
     2     "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
     3     "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
     4 <hibernate-configuration>
     5     <session-factory>
     6 
     7         <!-- 配置数据库方言 -->
     8         <property name="dialect"> org.hibernate.dialect.MySQLDialect</property>
     9         <!-- 配置打印语句 -->
    10         <property name="show_sql">true</property>
    11         <property name="format_sql">true</property>
    12         <!-- 配置线程安全的session -->
    13         <property name="hibernate.current_session_context_class">thread</property>
    14         <!--如果表不存在,则会帮你新建 -->
    15         <property name="hbm2ddl.auto">create</property> 
    16         <!-- 映射文件 -->
    17         <mapping resource="configs/account.hbm.xml" />
    18     </session-factory>
    19 </hibernate-configuration>
    复制代码

    hibernate配置文件还有一个实体映射文件:account.hbm.xml

    复制代码
     1 <!DOCTYPE hibernate-mapping PUBLIC 
     2     "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
     3     "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
     4 <hibernate-mapping>
     5     <class name="ssh.ft.entity.Account" table="account">
     6         <!-- 主键 -->
     7         <id name="id">
     8             <!-- 固定值:主键生成策略 -->
     9             <generator class="native"></generator>
    10         </id>
    11         <!-- 普通属性 -->
    12         <property name="user"></property>
    13         <property name="paw"></property>
    14     </class>
    15 </hibernate-mapping>
    复制代码

    在hibernate.cfg.xml中的

      <mapping resource="configs/account.hbm.xml" />

    这个语句里面的account.hbm.xml就是指上述的account.hbm.xml配置文件

    4.7 web.xml配置文件

    复制代码
     1 <?xml version="1.0" encoding="UTF-8"?>
     2 <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0">
     3   <display-name>ssh</display-name>
     4     <!-- spring -->
     5     <listener>
     6         <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
     7     </listener>
     8     <context-param>
     9         <param-name>contextConfigLocation</param-name>
    10         <param-value>classpath:configs/applicationContext.xml</param-value>
    11     </context-param>
    12   <filter>
    13         <filter-name>struts2</filter-name>  
    14         <filter-class>  
    15           org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter  
    16         </filter-class>
    17         <!-- 将struts.xml配置文件放置在src的其他位置无法访问,未解决
    18         <init-param>  
    19                <param-name>filterConfig</param-name>  
    20             <param-value>classpath:configs/struts.xml</param-value>  
    21         </init-param> 
    22          -->
    23     </filter>  
    24     <filter-mapping>  
    25         <filter-name>struts2</filter-name>  
    26         <url-pattern>/*</url-pattern>  
    27     </filter-mapping>
    28 </web-app>
    复制代码

    注:上述小编注释了一个未解决的问题,就是struts.xml文件一定要在src目录下方,否则会报错,如果想放在其他地方的话,若有人解决希望一定要留言告诉小编

    4.8 实体类:Account.java

    复制代码
     1 package ssh.ft.entity;
     2 
     3 public class Account {
     4     private Integer id;
     5     private String user;
     6     private String paw;
     7 
     8     public Integer getId() {
     9         return id;
    10     }
    11 
    12     public void setId(Integer id) {
    13         this.id = id;
    14     }
    15 
    16     public String getUser() {
    17         return user;
    18     }
    19 
    20     public void setUser(String user) {
    21         this.user = user;
    22     }
    23 
    24     public String getPaw() {
    25         return paw;
    26     }
    27 
    28     public void setPaw(String paw) {
    29         this.paw = paw;
    30     }
    31 
    32 }
    复制代码

    4.9 dao和daoImpl:AccountDao.java

    复制代码
    1 package ssh.ft.dao;
    2 
    3 import ssh.ft.entity.Account;
    4 
    5 public interface AccountDao {
    6     public Account findByUser(String user);
    7 }
    复制代码

    AccountDaoImpl.java

    复制代码
     1 package ssh.ft.dao.impl;
     2 
     3 import java.util.List;
     4 
     5 import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
     6 
     7 import ssh.ft.dao.AccountDao;
     8 import ssh.ft.entity.Account;
     9 
    10 public class AccountDaoImpl extends HibernateDaoSupport implements AccountDao {
    11 
    12     @Override
    13     public Account findByUser(String user) {
    14         @SuppressWarnings("unchecked")
    15         List<Account> list = this.getHibernateTemplate().find("from Account a where a.user=?", user);
    16         if (list == null || list.isEmpty()) {
    17             return null;
    18         }
    19         return list.get(0);
    20     }
    21 }
    复制代码

     4.10 service和serviceImpl:AccountManager.java

    1 package ssh.ft.service;
    2 
    3 public interface AccountManager {
    4     public boolean login(String user, String paw);
    5 }

    AccountManagerImpl.java

    复制代码
     1 package ssh.ft.service.impl;
     2 
     3 import ssh.ft.dao.AccountDao;
     4 import ssh.ft.entity.Account;
     5 import ssh.ft.service.AccountManager;
     6 
     7 public class AccountManagerImpl implements AccountManager {
     8     private AccountDao dao;
     9 
    10     public AccountDao getDao() {
    11         return dao;
    12     }
    13 
    14     public void setDao(AccountDao dao) {
    15         this.dao = dao;
    16     }
    17 
    18     @Override
    19     public boolean login(String user, String paw) {
    20         Account account = dao.findByUser(user);
    21         if (account == null) {
    22             return false;
    23         }
    24         if (account.getPaw().equals(paw)) {
    25             return true;
    26         }
    27         return false;
    28     }
    29 
    30 }
    复制代码

    4.11 account处理类:LoginAction.java

    复制代码
     1 package ssh.ft.action;
     2 
     3 import com.opensymphony.xwork2.ActionSupport;
     4 
     5 import ssh.ft.entity.Account;
     6 import ssh.ft.service.AccountManager;
     7 
     8 public class LoginAction extends ActionSupport {
     9     private static final long serialVersionUID = 1L;
    10 
    11     private Account account;
    12 
    13     public Account getAccount() {
    14         return account;
    15     }
    16 
    17     public void setAccount(Account account) {
    18         this.account = account;
    19     }
    20 
    21     private AccountManager accountManager;
    22 
    23     public AccountManager getAccountManager() {
    24         return accountManager;
    25     }
    26 
    27     public void setAccountManager(AccountManager accountManager) {
    28         this.accountManager = accountManager;
    29     }
    30 
    31     private String msg;
    32 
    33     public String getMsg() {
    34         return msg;
    35     }
    36 
    37     public void setMsg(String msg) {
    38         this.msg = msg;
    39     }
    40 
    41     public String login() {
    42         System.out.println("login........");44         if (accountManager.login(account.getUser(), account.getPaw())) {
    45             return SUCCESS;
    46         }
    47         setMsg("用户或密码错误");
    48         return ERROR;
    49     }
    50 }
    复制代码

    5.页面部分

    5.1 页面结构

     5.2 登录页面:login.jsp

    复制代码
     1 <%@page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
     2 <%@ taglib uri="/struts-tags" prefix="s"%>
     3 <!DOCTYPE html>
     4 <html>
     5 <head>
     6 <meta charset="UTF-8">
     7 <title>Login</title>
     8 </head>
     9 <body>
    10     <s:form action="login.action">
    11         <s:textfield name="account.user" label="用户" />
    12         <s:password name="account.paw" label="密码" />
    13         <s:submit value="提交" />
    14     </s:form>
    15     <s:property value="msg"/>
    16 </body>
    17 </html>
    复制代码

     5.3 登录成功页面:index.jsp

    复制代码
     1 <%@page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
     2 <%@ taglib uri="/struts-tags" prefix="s"%>
     3 <!DOCTYPE html>
     4 <html>
     5 <head>
     6 <meta charset="UTF-8">
     7 <title>Login</title>
     8 </head>
     9 <body>
    10     <span style="font-family: KaiTi_GB2312; font-size: 18px;">欢迎【<s:property value="account.user" />】登陆!</span>
    11 </body>
    12 </html>
    复制代码

    6.测试,在浏览器输入:http://localhost:8080/ssh/tologin

    成功页面:

  • 相关阅读:
    sort
    usaco-3.1-humble-pass
    usaco-3.1-inflate-pass
    usaco-3.1-agrinet-pass
    usaco-2.4-fracdec-pass
    usaco-2.4-comhome-pass
    usaco-2.4-cowtour-pass
    usaco-2.4-maze1-pass
    usaco-2.4-ttwo-pass
    usaco-2.3-concom-pass
  • 原文地址:https://www.cnblogs.com/Jansens520/p/6504686.html
Copyright © 2020-2023  润新知