新建web工程spring-netcross
1.导入spring文件夹里的七个jar包,另外还要导入jdbc-lib的四个jar包,ojdbc.jar,commoms-pool,commons-dbcp-1.2.1.jar,commons-collections4-4.0.jar

2.复制springmvc02下的spring-mvc.xml文件,新建com.tarena.oss包

3.com.tarena.oss包下新建entity包,新建Admin这个实体类,属性get/set方法,以及toString方法(方便测试输出)

package com.tarena.oss.entity;

import java.io.Serializable;
import java.sql.Timestamp;

public class Admin implements Serializable{
private Integer adminId;
private String adminCode;
private String password;
private String name;
private String telephone;
private String email;
private Timestamp enrolldate;
public Integer getAdminId() {
return adminId;
}
public void setAdminId(Integer adminId) {
this.adminId = adminId;
}
public String getAdminCode() {
return adminCode;
}
public void setAdminCode(String adminCode) {
this.adminCode = adminCode;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getTelephone() {
return telephone;
}
public void setTelephone(String telephone) {
this.telephone = telephone;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public Timestamp getEnrolldate() {
return enrolldate;
}
public void setEnrolldate(Timestamp enrolldate) {
this.enrolldate = enrolldate;
}
@Override
public String toString() {
return "Admin [adminId=" + adminId + ", adminCode=" + adminCode
+ ", password=" + password + ", name=" + name + ", telephone="
+ telephone + ", email=" + email + ", enrolldate=" + enrolldate
+ "]";
}

}

4.com.tarena.oss包下新建dao包,新建AdminDAO接口,添加findByAdminCode方法,再新建dao包下的jdbc包,新建AdminDAOImpl实现接口

AdminDAO接口:

package com.tarena.oss.dao;

import com.tarena.oss.entity.Admin;

public interface AdminDAO {
public Admin findByAdminCode(String adminCode);
}

AdminDAOImpl实现接口:

package com.tarena.oss.dao.jdbc;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

import javax.annotation.Resource;
import javax.sql.DataSource;

import org.springframework.stereotype.Repository;

import com.tarena.oss.dao.AdminDAO;
import com.tarena.oss.entity.Admin;

@Repository("adminDAO")
public class AdminDAOImpl implements AdminDAO{

/*数据源与连接池的关系
*
* 数据源负责管理连接池*/

@Resource(name="ds")
private DataSource ds;

public Admin findByAdminCode(String adminCode) {
if(adminCode==null){
return null;
}
Connection conn = null;
try {
conn = ds.getConnection();
String sql = "select * from admin_info_lch where admin_code=?";
PreparedStatement ps = conn.prepareStatement(sql);
ps.setString(1, adminCode);
ResultSet rs = ps.executeQuery();

if(rs.next()){
Admin admin = new Admin();
admin.setAdminId(rs.getInt("admin_id"));
admin.setAdminCode(rs.getString("admin_code"));
admin.setPassword(rs.getString("password"));
admin.setName(rs.getString("name"));
admin.setTelephone(rs.getString("telephone"));
admin.setEmail(rs.getString("email"));
admin.setEnrolldate(rs.getTimestamp("enrolldate"));

return admin;
}
} catch (Exception e) {

e.printStackTrace();
throw new RuntimeException("根据编码查询管理员失败");
}finally{
try {
conn.close();
} catch (SQLException e) {

e.printStackTrace();
}
}
return null;
}

}

5.复制netctoss项目下的db.properties文件,到该项目下的src下

driver=oracle.jdbc.OracleDriver
url=jdbc:oracle:thin:@localhost:1521:xe
user=system
pwd=1234

6.修改spring-mvc.xml文件,使用集合的方式读取db.properties文件的内容

<!-- 配置组件扫描 -->
<context:component-scan base-package="com.tarena.oss" />

<!-- 配置spring mvc注解扫描 -->
<mvc:annotation-driven/>

<!-- 配置视图解析器 -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/"/>
<property name="suffix" value=".jsp"/>
</bean>

<!-- 读取db.properties文件的内容 -->
<util:properties id="jdbc" location="classpath:db.properties">
</util:properties>

7.新建test包,新建测试类test1用于测试读取db.properties文件的内容是否成功。

@Test //测试db.properties文件是否正确读取
public void test1(){
ApplicationContext ac =
new ClassPathXmlApplicationContext("spring-mvc.xml");
System.out.println(ac.getBean("jdbc"));
}

8.在AdminDAOImpl添加成员变量数据源DadaSource ds,并且使用@Resource(name="ds")注入该属性。同时,在AdminDAOImpl这个类前面添加@Repository("adminDAO")。

9.在findByAdminCode方法中添加代码,根据管理员账号查询管理员。

10.在spring-xml中添加ds的参数配置。bean的id为ds是根据@Resource(name="ds")命名为ds的。然后根据db.properties为ds配置相关参数。

xml中修改代码如下:

<!-- 配置组件扫描 -->
<context:component-scan base-package="com.tarena.oss" />

<!-- 配置spring mvc注解扫描 -->
<mvc:annotation-driven/>

<!-- 配置视图解析器 -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/"/>
<property name="suffix" value=".jsp"/>
</bean>

<!-- 读取db.properties文件的内容 -->
<util:properties id="jdbc" location="classpath:db.properties">
</util:properties>

<bean id="ds"
class="org.apache.commons.dbcp.BasicDataSource"
destroy-method="close">
<property name="url" value="#{jdbc.url}"/>
<property name="driverClassName" value="#{jdbc.driver}"/>
<property name="username" value="#{jdbc.user}"/>
<property name="password" value="#{jdbc.pwd}"/>
</bean>

11.组件扫描中检查包名是否为com.tarena.oss,然后对AdminDAOImpl这个类中的方法进行测试。因为此时还没有涉及到springMVC模式(无controller类),故spring-mvc.xml不会自动读取,我们需要在测试代码中写上开启容器的代码。

@Test
public void test2(){
ApplicationContext ac =
new ClassPathXmlApplicationContext("spring-mvc.xml");
AdminDAO dao =
ac.getBean("adminDAO",AdminDAO.class);
Admin admin = dao.findByAdminCode("caocao");
System.out.println(admin);
}

12..com.tarena.oss包下新建Service包,在新建LoginService接口,添加checkLogin方法。再新建LoginServiceImpl实现类,实现该方法。首先添加注解@Service("loginService"),再在类中添加dao成员变量,并使用@Resource(name="daminDAO")注解,name是参考AdminDAOImpl类,它最开始就被注解为@Repository("adminDAO")。调用dao的方法,如果管理员为空或者密码错误,则抛出自定义异常,否则返回该admin。所以,此时,在Service包下新建spring包,再新建ApplicationException类。

LoginService 接口:

package com.tarena.oss.Service;

import com.tarena.oss.Service.spring.ApplicationException;
import com.tarena.oss.entity.Admin;
import com.tarena.oss.entity.ResultData;

/*
* 业务层接口
* */
public interface LoginService {

public Admin checkLogin(String adminCode,String pwd) throws ApplicationException;

}

LoginServiceImpl实现类:

package com.tarena.oss.Service;

import javax.annotation.Resource;

import org.springframework.stereotype.Service;

import com.tarena.oss.Service.spring.ApplicationException;
import com.tarena.oss.dao.AdminDAO;
import com.tarena.oss.entity.Admin;
import com.tarena.oss.entity.ResultData;

/*
* 业务层的实现
* */
@Service("loginService")
public class LoginServiceImpl implements LoginService {

@Resource(name="adminDAO")
private AdminDAO dao;

public Admin checkLogin(String adminCode, String pwd) throws ApplicationException{

System.out.println("checkLogin方法");
//保持好习惯,先定义为null,再初始化。
Admin admin = null;

admin = dao.findByAdminCode(adminCode);
try{
if(admin==null){
throw new ApplicationException("账号不存在");
}
if(!admin.getPassword().equals(pwd)){
throw new ApplicationException("密码错误");
}
}catch(Exception e){
e.printStackTrace();

}
return admin;
}
}

13.在测试中写test3,测试loginService

@Test
public void test3(){
ApplicationContext ac =
new ClassPathXmlApplicationContext("spring-mvc.xml");
LoginService service =
ac.getBean("loginService",LoginService.class);
Admin admin = null;
try {
admin = service.checkLogin("caocao", "123");
} catch (ApplicationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println(admin);
}

14.复制netctoss中的styles文件夹,复制styles文件夹到WebRoot下。

15.在WebRoot/WEB-INF下新建login.jsp(拷贝原来netctoss项目做相应修改),添加<form></form>,修改<input>中的name,修改其代码提交表单时采用js脚本。

springday05-go1的更多相关文章

  1. Go1.7改善了编译速度并且会生成更快的代码

    Go1.7的开发周期正在接近它的下一个里程碑,Go的提交者Dave Cheney报告了子即将发布的版本中,团队成员在语言工具链上的努力. Cheney称,基于当前的开发状态,Go1.7将会很容易就成为 ...

  2. python2.7 与 go1.2简单性能比较

    过完年刚上班,项目还没有开始,对于即将到来的项目,想尝试是否可以找到一个开发效率接近python,运行效率接近静态语言的编程语言,选择基本就是scala和go,公司的技术组成基本都是c派的,scala ...

  3. go1.8之安装配置具体步骤

    操作系统: CentOS 6.9_x64 go语言版本: 1.8.3 安装go 这里直接安装二进制,其它方式请自行搜索. 1.下载并安装go 命令如下: ? 1 2 3 wget https://st ...

  4. go1.8之安装配置

    说明: 之前学习过go语言(大概是0.9版本),后来更新太快,也没怎么使用,就荒废掉了,今年有项目需要用go开发,重新捡起. 这是我在学习go语言过程中整理的内容,这里记录下,也方便我以后查阅. 操作 ...

  5. Ubuntu16.04 LTS上安装Go1.10

    原因 Ubuntu资源库上默认使用的是Go1.6.2版本,给最新版本代码编译带来了不少问题.本文就记录下在Ubuntu下直接安装Go最新版1.10的步骤. 准备工作 1.卸载已有版本 # 卸载已经安装 ...

  6. GO1.6语言学习笔记2-安装配置及代码组织

    一.关于GO开发环境的安装和配置        在linux环境中安装编译好的go安装包,参考官方指南的步骤一步步走下来就可以了.需要注意的是以下几个环境变量的配置:        GOROOT - ...

  7. Go程序开发---Go环境配置:CentOS6.5+Go1.8标准包安装

    1.Go安装 1.1Go的三种安装方式 Go有多种安装方式,可以选择自己习惯的方式进行,这里介绍三种安装方式: 1)Go源码安装 2)Go标准包安装 3)第三方工具安装 这里主要介绍下Go标准包在Ce ...

  8. 【linux】【Go】Centos7安装go1.13环境

    前言     Go(又称Golang)是Google开发的一种静态强类型.编译型.并发型,并具有垃圾回收功能的编程语言. 罗伯特·格瑞史莫(Robert Griesemer),罗勃·派克(Rob Pi ...

  9. go1.13 mod 实践和常见问题

    实践建议 0,go mod 要求所有依赖的 import path 的path 以域名开头,如果现有项目转1.13的go mod 模式,且不是以域名开头则需要修改. eg: code.be.mingb ...

  10. Go1.13 标准库的 http 包爆出重大 bug,你的项目中招了吗? 原创: 王亚楼 Go语言中文网 今天

    Go1.13 标准库的 http 包爆出重大 bug,你的项目中招了吗? 原创: 王亚楼 Go语言中文网 今天

随机推荐

  1. Android源码剖析之Framework层基础版(窗口、linux、token、Binder)

    本文来自http://blog.csdn.net/liuxian13183/ ,引用必须注明出处! 关于Framework,就是应用层底下的控制层,离应用层最近,总想找个机会,写写WindowMang ...

  2. zepto源码--插入节点--学习笔记

    与生成width和height使用的方法类似,通过`after`, `prepend`, `before`, `append`,这四者之间的共性,生成对应的函数.并根据这四个函数,生成 `insert ...

  3. angularJS自定义属性作为条件中转

    <html> <head> <meta charset="utf-8"/> <title></title> </h ...

  4. 【android学习4】Eclipse中Clean作用

    今天修改Servlet中代码,重启服务端程序之后发现没有启作用,于是Clean了一把,果然生效. 查阅资料得知,Eclipse中是根据时间戳去编译代码,如果某个类对应的时间戳没有发生改变就不会重新编译 ...

  5. IOS证书的申请和使用

    苹果的证书繁锁复杂,制作管理相当麻烦,今天决定重置一个游戏项目中的所有证书,做了这么多次还是感觉很纠结,索性直接记录下来,日后你我他查阅都方便: 关于证书 苹果使用密文签名技术来验证App的合法性,不 ...

  6. response.setCharacterEncoding方法未定义

    代码一搬家,就报这错.之前几次稀里糊涂搞好忘记总结. 问题原因: 项目中用到Tomcat和weblogic.jar包,先引入weblogic.jar包时,HttpServletResponse下的se ...

  7. [LeetCode] Letter Combinations of a Phone Number(bfs)

    Given a digit string, return all possible letter combinations that the number could represent. A map ...

  8. 查看sqlserver版本及其补丁

    select @@version select serverproperty('productlevel')

  9. JS的基础类型与引用类型

    两种类型: ECMAScript变量包含两种不同类型的值:基本类型值.引用类型值: 基本类型值:指的是保存在栈内存中的简单数据段: 引用类型值:指的是那些保存在堆内存中的对象,意思是,变量中保存的实际 ...

  10. web页面的适配问题

    一个web页面既要在宽屏上显示,又要在窄屏上显示,既要在电脑上显示,又要在手机上显示,这个适配问题相当的麻烦. 其实解决电脑与手机的适配问题,一般有两个思路:一个是做判断,根据不同条件在css和js做 ...