zoukankan      html  css  js  c++  java
  • Struts2+Spring+Hibernate step by step 03 整合Spring之中的一个(在DAO层验证username和password)

    注:该系列文章部分内容来自王健老师编写SSH整合开发教程

    目的:通过Spring创建数据库的连接,并通过Spring进行事务管理。

    第一步:将Spring的包拷贝至当前项目的lib文件夹下,例如以下图-1所看到的:

    图-1

    第二步:在web.xml中加入下面配置,即加入listener(监听器)和配置载入的Spring文件例如以下:

    图-2

    第三步:在WEB-INF文件夹下,建立spring的配置文件applicationContext.xml,文件内容例如以下图-3所看到的:

    图-3

    提示:下面内容,能够直接复制到xml文件其中,然后再将xml文件命名为applicationContext.xml.

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
    		xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    		xmlns:context="http://www.springframework.org/schema/context"
    		xmlns:tx="http://www.springframework.org/schema/tx"
    		xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
    				http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd
    				http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd">
    	
    	<!-- 此处暂不加入代码内容,先保留为空 -->
    	
    </beans>

     

    第四步:公布并启动程序,看是否能正常启动。直到正常启动后才干够进行下一步的工作:

    提示:当启动tomcat后,看Console(控制台)的输出是否正常,若有异常信息,应进行代码或者配置文件的调整。能正常启动为止,例如以下图-4所看到的:

    图-4

     

    第五步:配置系统日志信息的输出(该部分不是必须)

    如上面第四步所看到的。程序的日志,仅仅有部分显示到控制台中,为了能看到更加丰富的启动、以及程序执行信息,建议配置log4j日志系统。

    5.1、将log4j的日志包,复制到WEB-INF/lib文件夹下:

    图-5

    将此文件复制到WEB-INF/lib文件夹下后。启动项目,会再Console控制台发现下面警告信息:

    图-6

    以上信息,说明没有配置log4j.properties资源文件。

    5.2、配置log4j.properties资源文件,文件位于WEB-INF/classes文件夹下。例如以下图-7所看到的:

    图-7

     


    提示:log4.properties中的内容,主要配置日志信息的级别,和日志信息输出的目的地,能够拷贝下面内容到log4j.properties文件里:

    图-8

    5.3、此时再启动项目。能够看到Console控制台发现很多其它丰富的载入启动信息,而且能再d盘的根文件夹下发现root.log的日志文件。

    提示:请打开D盘文件夹下的root.log文件,查看日志信息。

     

    第六步:书写訪问数据库(模拟)的DAO(Data Access Object数据库訪问层)和Service(服务层)。

    同一时候给Action注入(DI) Service,给Service实现类注入Dao,文件夹结构例如以下图-9所看到的:

    图-9

    上面首先应该写接口,按规范,建议接口都以I大写字母开头。当中Dao的实现类都以impl结尾,Service相同以impl结尾。

    下面是IOneDao.java的源码:

    package com.xuzheng.dao;
    import java.util.Map;
    public interface IOneDao {
    	Map login(Map map);
    }
    


    下面是OneDaoImpl.java的源码:

    package com.xuzheng.dao.impl;
    import java.util.Map;
    import com.xuzheng.dao.IOneDao;
    public class OneDaoImpl implements IOneDao{
    	public Map login(Map map) {
    		String name = (String) map.get("name");
    		String pwd = (String) map.get("pwd");
    		if(name.equals("xuz") && pwd.equals("1234")){
    			System.out.println("验证成功....");
    			map.put("result", "1");//假设成功将信息放入map中,且向map中存入1值
    		}
    		return map;
    	}
    }
    


    下面是IOneService.java的源码:

    package com.xuzheng.service;
    import java.util.Map;
    public interface IOneService {
    	Map login(Map map);
    }
    

    下面是OneServiceImpl.java的源码:

    package com.xuzheng.service.impl;
    import java.util.Map;
    import com.xuzheng.dao.IOneDao;
    import com.xuzheng.service.IOneService;
    public class OneServiceImpl implements IOneService{
    	private IOneDao dao;//通过配置文件注入Dao
    	public Map login(Map map) {
    		return getDao().login(map);//调用Dao的方法验证登录
    	}
    	public IOneDao getDao() {
    		return dao;
    	}
    	public void setDao(IOneDao dao) {
    		this.dao = dao;
    	}
    }
    

    下面是经过改动并注入Service的OneAction.java的源码:

    package com.xuzheng.one;
    import java.util.HashMap;
    import java.util.Map;
    import com.xuzheng.service.IOneService;
    public class OneAction {
    	private String name;//username
    	private String pwd;//password
    	private IOneService service;
    	public String execute(){
    		System.out.println("name:"+getName()+",pwd:"+pwd);
    		Map map = new HashMap();
    		map.put("name", getName());
    		map.put("pwd", getPwd());
    		map = getService().login(map);
    		if(map.get("result")==null){
    			return "error";
    		}else{
    			return "success";
    		}
    	}
    	public String getName() {
    		return name;
    	}
    	public void setName(String name) {
    		this.name = name;
    	}
    	public String getPwd() {
    		return pwd;
    	}
    	public void setPwd(String pwd) {
    		this.pwd = pwd;
    	}
    	public IOneService getService() {
    		return service;
    	}
    	public void setService(IOneService service) {
    		this.service = service;
    	}
    }
    

    同一时候。对于getName的getPwd方法作例如以下改动。目的是防止抛出NullPointerException,改动例如以下:

    public String getName() {
    		return name == null?"":name;
    	}
    	public void setName(String name) {
    		this.name = name;
    	}
    	public String getPwd() {
    		return pwd == null?

    "":pwd; } public void setPwd(String pwd) { this.pwd = pwd; }


    第七步:将上面写好的类,全面配置到Spring配置文件applicationContext.xml中,例如以下图-10所看到的:

    图-10

    提示:1、上面箭头为引用关系 2、OneAction的Bean的模式为原型模式,必须这样设置。

     

    第八步:改动struts.xml文件例如以下图-11所看到的:

    图-11

    第九步:公布启动程序,假设程序启动有错误。则是配置错误,应当检查配置文件,直到能够正常启动为止。

    第十步:调整index.jsp页面的布局,让其变的美观:

    <%@ page language="java" contentType="text/html; charset=UTF-8"%>
    <%@ taglib prefix="s" uri="/struts-tags"%>
    <html>
    	<body style="text-align:center;">
    		<form name="form1" action="<s:url value='/one.action'/>" method="post">
    			<table border="0">
    				<tr>
    					<td colspan="2" bgcolor="#FDDDE" align="center">
    						用户登录
    					</td>
    				</tr>
    				<tr>
    					<td align="right">
    						username:
    					</td>
    					<td>
    						<input type="text" name="name" style=" 100px;" />
    					</td>
    				</tr>
    				<tr>
    					<td align="right">
    						password:
    					</td>
    					<td>
    						<input type="password" name="pwd" style="100px;" />
    					</td>
    				</tr>
    				<tr>
    					<td colspan="2" align="center">
    						<input type="submit" value="登录" />
    					</td>
    				</tr>
    			</table>
    		</form>
    	</body>
    </html>


    第十一步:公布程序,并执行測试,输入username:xuz ,password:1234看是否能正常登录,例如以下图-12所看到的:

    图-12

    登录成功后,例如以下图-13所看到的:

    图-13

     

    源码下载:

    http://download.csdn.net/detail/u014548782/7213743

  • 相关阅读:
    ansible用普通用户执行root权限的命令 + script模块
    screen 实用操作
    Kibana did not load properly
    1500元让我写一个api接口!没问题
    python实现四种出行路线规划(公交、步行、驾车、骑行)
    35行代码下载任意网页的图片
    Comparison of long-read sequencing technologies in the hybrid assembly of complex bacterial genomes
    A single-molecule long-read survey of the human transcriptome
    Long-read sequencing and de novo assembly of a Chinese genome 一个中国人基因组的长读测序和重新组装
    Combination of short-read, long-read, and optical mapping assemblies reveals large-scale tandem repeat arrays with population genetic implications
  • 原文地址:https://www.cnblogs.com/mfrbuaa/p/5162830.html
Copyright © 2011-2022 走看看