扫描二维码,详细整合教程

2019-12-23 09:10栏目:网络技术
TAG:

Python编写的ARP扫描工具,pythonarp扫描工具

源码如下:

 1 rom scapy.all import *
 2 import threading
 3 import argparse
 4 import logging
 5 import re
 6 
 7 logging.getLogger('scapy.runtime').setLevel(logging.ERROR)
 8 
 9 def parse_ip(targets):
10     '''
11     解析192.168.1.1-254形式的IP段,分解成IP列表
12     '''
13     _split = targets.split('-')
14     first_ip = _split[0]
15     ip_split = first_ip.split('.')
16     ipdot4 = range(int(ip_split[3]),int(_split[1])+1)
17     ipaddrs = [ip_split[0]+'.'+ip_split[1]+'.'+ip_split[2]+'.'+str(p) for p in ipdot4]
18     return ipaddrs
19 
20 def arp_scan(target_ip):
21     '''
22     通过scapy的sr1函数进行ARP扫描
23     '''
24     try:
25         ans = sr1(ARP(pdst=target_ip),timeout=1,verbose=False)
26         if ans:
27             return ans
28     except Exception:
29         print '[-]发包错误'
30         exit(1)
31 
32 def parse_arp(target_ip):
33     '''
34     解析收到的ARP reply包,采集IP及其对应的MAC
35     '''
36     ans = arp_scan(target_ip)
37     if ans:
38         if ans.haslayer('ARP') and ans.fields['op'] == 2:
39             print '[+] IP:%s => MAC:%s' % (ans.fields['psrc'],ans.fields['hwsrc'])
40 
41 if __name__ == '__main__':
42     usage = 'python %(prog)s -t [targets]'
43     parser = argparse.ArgumentParser(usage=usage,epilog='以上做为说明,祝好运!',description='说明:指定IP或IP段进行ARP扫描.',version='V1.0')
44     parser.add_argument('-t',action='store',dest='targets',help='targets为IP或IP段,如192.168.1.x或192.168.1.1-254')
45 
46     args = parser.parse_args()
47     if args.targets == None:
48         parser.print_help()
49     elif (not re.match(r'd{1,3}.d{1,3}.d{1,3}.d{1,3}$',args.targets)) and 
50             (not re.match(r'd{1,3}.d{1,3}.d{1,3}.d{1,3}-d{1,3}$',args.targets)):
51         parser.print_help()
52     else:
53         targets = args.targets
54 
55 
56     if re.match(r'd{1,3}.d{1,3}.d{1,3}.d{1,3}$',targets):
57         ip = targets
58         parse_arp(ip)
59     elif re.match(r'd{1,3}.d{1,3}.d{1,3}.d{1,3}-d{1,3}$',targets):
60         ips = parse_ip(targets)
61         for ip in ips:
62             t = threading.Thread(target=parse_arp,args=(ip,))
63             t.start()

运转结果如下:

1 python exp2.py -t 192.168.1.1-254
2 [+] IP:192.168.1.1 => MAC:14:75:90:XX:XX:XX
3 [+] IP:192.168.1.111 => MAC:c6:36:55:XX:XX:XX
4 [+] IP:192.168.1.100 => MAC:68:3e:34:XX:XX:XX
5 [+] IP:192.168.1.112 => MAC:84:38:38:XX:XX:XX
6 [+] IP:192.168.1.114 => MAC:6c:8d:c1:XX:XX:XX
7 [+] IP:192.168.1.103 => MAC:84:38:38:XX:XX:XX
8 [+] IP:192.168.1.102 => MAC:58:1f:28:XX:XX:XX

 

源码如下: 1 rom scapy.all import * 2 import threading 3 import argparse 4 import logging 5 import re 6 7 logging.getLog...

图片 1图片 2

摘要: 基本概念 1.1、Spring spring是二个开源框架,Spring是于二〇〇〇年兴起的四个轻量级的Java开垦框架,由Rod Johnson 在其文章Expert One-On-One J2EE Development and Design中演讲的局部观点和原型衍生而来。它是为着缓慢解决集团应用开拓的树大根深而创设的。Spring使用基本的JavaBean来成功早先只恐怕由EJB达成的事情。不过,Spring的用场不仅仅限于服务器端的支付。从轻松性、可测量检验性和松耦合的角度来说,任何Java应用都得以从Spring中收益。 轻松的话,Spring是三个轻量级的支配反转(IoC)和面向切面(A

 

1、基本概念

 

1.1、Spring

 

spring是一个开源框架,Spring是于二零零三 年兴起的多少个轻量级的Java支付框架,由Rod Johnson 在其作品Expert One-On-One J2EE Development and Design中阐释的有些理念和原型衍生而来。它是为着解决公司应用开荒的复杂而创办的。Spring使用基本的JavaBean来成功早前只可能由EJB完毕的事体。但是,Spring的用项不仅仅限于服务器端的开荒。从轻松性、可测试性和松耦合的角度来说,任何Java行使都足以从Spring中受益。 轻易的话,Spring是三个轻量级的调控反转(IoC)和面向切面(AOP)的容器框架。

二维码生成

1.2、SpringMVC

 

Spring MVC归属SpringFrameWork的继续付加物,已经融入在Spring Web Flow里面。Spring MVC 抽离了控制器、模型对象、分派器以至管理程序对象的角色,这种抽离让它们更易于进行定制。

//MARK: 传进去字符串,生成二维码图片(>=iOS7)  text:要生成的二维码内容   WH:二维码高宽
    private func creatQRCodeImage(text: String,WH:CGFloat) -> UIImage{

        //创建滤镜
        let filter = CIFilter(name: "CIQRCodeGenerator")
        //还原滤镜的默认属性
        filter?.setDefaults()
        //设置需要生成二维码的数据
        filter?.setValue(text.data(using: String.Encoding.utf8), forKey: "inputMessage")
        //从滤镜中取出生成的图片
        let ciImage = filter?.outputImage
        //这个清晰度好
        let bgImage = createNonInterpolatedUIImageFormCIImage(image: ciImage!, size: WH)

        return bgImage
    }

1.3、MyBatis

 

MyBatis 本是apache的叁个开源项目iBatis, 二零零六年这几个体系由apache software foundation 迁移到了google code,何况改名称叫MyBatis 。MyBatis是贰个基于Java的持久层框架。iBATIS提供的持久层框架包蕴SQL Maps和Data Access Objects(DAO)MyBatis 消除了差相当少具备的JDBC代码和参数的手工业安装以致结果集的搜寻。MyBatis 使用简易的 XML或注解用于配置和原始映射,将接口和 Java 的POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录。

 

2、开采条件搭建

 

手艺选型(只列了生龙活虎部分本领)

地点生成的image,需求选择一个方式,原因是直接生产的图形二维码清晰度相当不够,要求管理一下

1、后端

//MARK: - 根据CIImage生成指定大小的高清UIImage
    private func createNonInterpolatedUIImageFormCIImage(image: CIImage, size: CGFloat) -> UIImage {

        let extent: CGRect = image.extent.integral
        let scale: CGFloat = min(size/extent.width, size/extent.height)

        let width = extent.width * scale
        let height = extent.height * scale
        let cs: CGColorSpace = CGColorSpaceCreateDeviceGray()
        let bitmapRef = CGContext(data: nil, width: Int(width), height: Int(height), bitsPerComponent: 8, bytesPerRow: 0, space: cs, bitmapInfo: 0)!

        let context = CIContext(options: nil)
        let bitmapImage: CGImage = context.createCGImage(image, from: extent)!

        bitmapRef.interpolationQuality = CGInterpolationQuality.none
        bitmapRef.scaleBy(x: scale, y: scale)
        bitmapRef.draw(bitmapImage, in: extent)
        let scaledImage: CGImage = bitmapRef.makeImage()!
        return UIImage(cgImage: scaledImage)
    }

服务框架:Dubbo、zookeeper、Rest服务

 

缓存:Redis、ehcache

 

音信中间件:ActiveMQ

如此,我们就能够获得想要的二维码图片了

负载均衡:Nginx

有时候,大家须求在二维码中间增加log水印等,笔者试过二种办法,第风度翩翩种是一向用图片上下文UIGraphicsBeginImageContext这种实现,非常不足完结起来某些模糊,后来就径直用最原始方法了:直接add图片上去(也说糟糕是本人首先种达成慰藉题,这里大家能够团结试一下先)

分布式文件:法斯特DFS

加多log:(一些参数能够慈爱调,这里做个示范)

数据库连接池:Alibaba Druid 1.0

 

基本框架:Spring framework

//MARK: - 根据背景图片和头像合成头像二维码
    private func creatIconImage(iconImage:UIImage,sizeWH:CGFloat,superImgView:UIImageView){

        let iconImgView = UIImageView(image: iconImage)
        iconImgView.contentMode = .scaleAspectFit
        iconImgView.frame = CGRect(x: (superImgView.bounds.size.width-sizeWH)/2, y: (superImgView.bounds.size.height-sizeWH)/2, width: sizeWH, height: sizeWH)
        iconImgView.layer.cornerRadius = 5
        iconImgView.layer.borderColor = UIColor.white.cgColor
        iconImgView.layer.borderWidth = 4
        iconImgView.layer.masksToBounds = true
        superImgView.addSubview(iconImgView)

    }

康宁框架:Apache Shiro 1.2

 

视图框架:Spring MVC 4.0

 

服务端验证:hibernateValidator 5.1

二维码扫描

构造框架:SiteMesh 2.4

运用AVCaptureDevice,基于系统的AVFoundation框架,所以利用前,先import

行事流引擎:Activiti 5.15

import UIKit
import AVFoundation

职分调解:quartz 1.8.5

1、定义扫描的片段性质

悠久层框架:MyBatis 3.2

    //扫描定义属性
    var device:AVCaptureDevice! = nil
    var input:AVCaptureDeviceInput! = nil
    var output:AVCaptureMetadataOutput! = nil
    var session:AVCaptureSession! = nil
    var preview:AVCaptureVideoPreviewLayer! = nil

日志管理:SLF4J 1.7、Log4j

2、设置扫描

工具类:Apache Commons、Jackson 2.2、Xstream 1.4、Dozer 5.3、POI

/// 设置扫描参数
    func setupCamera() {
        DispatchQueue.global().async {
            if (self.device == nil){
                self.device = AVCaptureDevice.defaultDevice(withMediaType: AVMediaTypeVideo)
                do{
                    self.input = try AVCaptureDeviceInput.init(device: self.device)
                }catch{
                    print("self.input init error")
                }

                self.output = AVCaptureMetadataOutput.init()
                self.output.setMetadataObjectsDelegate(self, queue: DispatchQueue.main)

                self.session = AVCaptureSession.init()
                self.session.canSetSessionPreset(AVCaptureSessionPresetHigh)
                if self.session.canAddInput(self.input){
                    self.session .addInput(self.input)
                    self.canOpen = true
                }else{
                    DispatchQueue.main.async {
                        let alert = UIAlertView(title: "提示", message: "打开相机权限", delegate: self, cancelButtonTitle: "取消", otherButtonTitles: "设置")
                        alert.show()
                    }
                }

                if self.canOpen{
                    if self.session.canAddOutput(self.output){
                        self.session.addOutput(self.output)
                    }
                    // 只支持二维码
                    self.output.metadataObjectTypes = [AVMetadataObjectTypeQRCode]

                    self.preview = AVCaptureVideoPreviewLayer(session: self.session)
                    self.preview.videoGravity = AVLayerVideoGravityResizeAspectFill
                    DispatchQueue.main.async {
                        self.preview.frame = CGRect(x: 0, y: 0, width: KScreenWidth, height: KScreenHeight)
                        self.view.layer.insertSublayer(self.preview, at: 0)
                    }

                }

            }
            if self.canOpen{
                DispatchQueue.main.async {
                    //开启定时器,构造移动动画效果
                    self.timer = Timer(timeInterval: 0.02, target: self, selector: #selector(self.lineAnimation), userInfo: nil, repeats: true)
                    RunLoop.current.add(self.timer!, forMode: .defaultRunLoopMode)
                    //开始采集数据
                    self.session.startRunning()
                }
            }
        }

    }

2、前端

环影后,会触发四个代理,这里大家可以收获到扫描内容

js框架:jQuery1.9。

// MARK: - 扫描二维码后的代理
extension QRCodeScanViewController:AVCaptureMetadataOutputObjectsDelegate{
    func captureOutput(_ captureOutput: AVCaptureOutput!, didOutputMetadataObjects metadataObjects: [Any]!, from connection: AVCaptureConnection!) {
        var strValue:String = ""
        if metadataObjects.count>0{
            let obj:AVMetadataMachineReadableCodeObject = metadataObjects.first as! AVMetadataMachineReadableCodeObject
            strValue = obj.stringValue
        }

        self.session.stopRunning()
        self.timer?.invalidate()
        self.timer = nil

        self.playBeep()

        self.showQRCode(qrcodeString: strValue)
    }

}

CSS框架: Bootstrap 4 metronic

上述都以部分宗旨代码,当然,我们还须求对它实行局地UI自定义,举例扫描背景观,扫描提醒表达,红线的动漫片移动等

客商端验证:jqueryValidation Plugin。

此间作者就不意气风发后生可畏贴出来了,小说最后会有获取源码的链接地址。

富文本:CKEcitor

 

文本管理:CKFinder

实在到此地,我们都足以依赖系统提供的API完成二维码的改换和围观效能,最低需求的种类为iOS7。

动态页签:Jerichotab

上面,要是是从相册获取呢?

数据表格:jqGrid

二维码相册读取

对话框:jQuery jBox

ios从相册读取二维码,在ios8上述,苹果照旧提供了自带的识别图片二维码的效应,这种方法效能最棒,也是最推荐的,但在宽容ios7时,大家就务须用别样办法贯彻。

树构造控件:jQuery zTree

慎选第三方框架:

别的构件:Bootstrap 4 metronic

ZXingObjC  OR  ZBar   ??

3、支持

 

服务器中间件:汤姆cat 6、7、Jboss 7、WebLogic 10、WebSphere 8

那边自个儿接收的是 ZXingObjC,相比较于ZBar,那一个库一贯有人在保卫安全,并且易用性相比较前面一个也好一点(个人感到哈,当然也可以有广大人采撷的ZBar,其实都大致)。

数据库帮忙:近日仅提供MySQL数据库的扶助,但不免强数据库,下个本子升级超多据源切换和数据库读写分离: 如:Oracle、SqlServer、H2等

 

支撑开荒条件:Eclipse、MyEclipse、Ras、Idea等

1、pod导入ZXingObjc

精粹介绍:

pod 'ZXingObjC', '~> 3.0'

源码布局

 

图片 3

代码达成记录如下:

接待大家一起学习商量有关才具愿意理解框架手艺如故源码的敌人一直加求求(企鹅):2042849237

留意:这里自身事情发生前测量检验的代码是用oc写的,还没有赶趟转成swift3,我们先看思路哈,勿怪~~

更加的多详细源码参考来源:http://minglisoft.cn/technology

2、从相册选取好图片  

3、Maven Web项目创制

-(void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary<NSString *,id> *)info{
    UIImage *image = [info objectForKey:@"UIImagePickerControllerOriginalImage"];

    [self dismissViewControllerAnimated:YES completion:^{

        [self getInfoWithImage:image];
    }];

}

4、SSM整合

 

下边首要介绍三大框架的结合,至于遇到的搭建以至项指标开创,参看上边的博文。本次结合作者分了2个布局文件,分别是spring-mybatis.xml,包罗spring和mybatis的配置文件,还应该有个是spring-mvc的配置文件,别的有2个能源文件:jdbc.propertis和log4j.properties。完整目录构造如下(最终附上源码下载地址,不建议直接使用源码,因为此教程已经有了整个代码):

3、深入分析图片二维码-(void卡塔尔(قطر‎getInfoWithImage:(UIImage *)image{

图片 4

//8系统以上用系统提供的方法
    if(SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"8.0")){
        CIDetector*detector = [CIDetector detectorOfType:CIDetectorTypeQRCode context:nil options:@{ CIDetectorAccuracy : CIDetectorAccuracyHigh }];
        NSArray *features = [detector featuresInImage:[CIImage imageWithCGImage:image.CGImage]];

        if (features.count >= 1){

            for (int index = 0; index < [features count]; index ++) {
                CIQRCodeFeature *feature = [features objectAtIndex:index];
                NSString *scannedResult = feature.messageString;
                NSLog(@"result:%@",scannedResult);
                //进行自己业务处理
            }
        }else{
            NSLog(@"no image");
        }

    }else{
        NSLog(@"ios8  以下系统");
        CGImageRef imageToDecode=[image CGImage];

        ZXLuminanceSource * source = [[ZXCGImageLuminanceSource alloc] initWithCGImage:imageToDecode];
        ZXBinaryBitmap * bitmap = [ZXBinaryBitmap binaryBitmapWithBinarizer:[ZXHybridBinarizer binarizerWithSource:source]];
        NSError *error = nil;
        ZXDecodeHints *hints = [ZXDecodeHints hints];
        ZXMultiFormatReader * reader = [ZXMultiFormatReader reader];
        ZXResult *result = [reader decode:bitmap hints:hints error:&error];

        if (result) {
            NSString *contents = result.text;
            NSLog(@"解析成功:%@",contents);
       //进行自己业务处理
     }else{ 
        NSLog(@" --- 解析失败"); 
     }
 }

}

使用框架都以较新的本子:

 

Spring 4.0.2 RELEASE

聊起底,获取源码地址

Spring MVC 4.0.2 RELEASE

点击这里得到源码

MyBatis 3.2.6

 

4.1、Maven引进必要的JAHaval包

Enjoy~

为了有扶持后边说的时候无需引进JA宝马7系包,笔者这里直接付出全体供给的JAGL450包,那都是骨干的JA哈弗包,每种包的是为何的都有注释,就不再多说了。

pom.xml

4.0.2.RELEASE

3.2.6

1.7.7

1.2.17

junit

junit

4.11

test

org.springframework

spring-core

${spring.version}

org.springframework

spring-web

${spring.version}

org.springframework

spring-oxm

${spring.version}

org.springframework

spring-tx

${spring.version}

org.springframework

spring-jdbc

${spring.version}

org.springframework

spring-webmvc

${spring.version}

org.springframework

spring-aop

${spring.version}

org.springframework

spring-context-support

${spring.version}

org.springframework

spring-test

${spring.version}

org.mybatis

mybatis

${mybatis.version}

org.mybatis

mybatis-spring

1.2.2

javax

javaee-api

7.0

mysql

mysql-connector-java

5.1.30

commons-dbcp

commons-dbcp

1.2.2

jstl

jstl

1.2

log4j

log4j

${log4j.version}

com.alibaba

fastjson

1.1.41

org.slf4j

slf4j-api

${slf4j.version}

org.slf4j

slf4j-log4j12

${slf4j.version}

org.codehaus.jackson

jackson-mapper-asl

1.9.13

commons-fileupload

commons-fileupload

1.3.1

commons-io

commons-io

2.4

commons-codec

commons-codec

1.9

4.2、Spring与MyBatis的整合

不无供给的JAOdyssey包都引进今后,首先举行Spring与MyBatis的重新整合,然后再进行JUnit测试,先看二个档期的顺序组织图:

图片 5

4.2.1、创设JDBC属性文件

jdbc.properties(文件编码改进为utf-8)

driver=com.mysql.jdbc.Driver

url=jdbc:mysql://10.221.10.111:8080/db_zsl

username=demao

password=demao

#概念初阶连接数

initialSize=0

#概念最辛辛那提接数

maxActive=20

#概念最大空闲

maxIdle=20

#概念最小空闲

minIdle=1

#概念最长等待时间

maxWait=60000

4.2.2、创设spring-mybatis.xml配置文件

本条文件便是用来成功spring和mybatis的结缘的。那之中也十分少行布置,重要的正是自行扫描,自动注入,配置数据库。注释也很详细,我们看看就知晓了。

spring-mybatis.xml

xmlns:xsi="" xmlns:p=""

xmlns:context=""

xmlns:mvc=""

xsi:schemaLocation="

;

class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">

destroy-method="close"

class="org.springframework.jdbc.datasource.DataSourceTransactionManager">

4.2.3、Log4j的配置

为了有扶助调节和测试,通常都会动用日志来输出音信,Log4j是Apache的二个开放源代码项目,通过使用Log4j,大家可以调整日志音讯输送的指标地是控制台、文件、GUI零器件,以至是套接口服务器、NT的平地风波记录器、UNIXSyslog护理进度等;大家也得以垄断(monopoly卡塔尔每一条日志的出口格式;通过定义每一条日志音信的等第,大家能够进一层周全地调控日志的变化进程。

Log4j的构造很简短,并且也是通用的,下边给出一个主干的配置,换成别的门类中也没有必要做多大的调动,假使想做调度可能想询问Log4j的各类配置,参看笔者转发的风流倜傥篇博文,很详细:

上面给出配置文件目录:

图片 6

log4j.properties

#定义LOG输出品级

log4j.rootLogger=INFO,Console,File

#概念日志输出目标地为调节台

log4j.appender.Console=org.apache.log4j.ConsoleAppender

log4j.appender.Console.Target=System.out

#可以灵活地内定日志输出格式,下面生机勃勃行是点名具体的格式

log4j.appender.Console.layout = org.apache.log4j.PatternLayout

log4j.appender.Console.layout.ConversionPattern=[%c] - %m%n

#文件大小达到钦赐尺寸的时候发出二个新的文本

log4j.appender.File = org.apache.log4j.RollingFileAppender

#点名输出目录

log4j.appender.File.File = logs/ssm.log

#概念文件最大尺寸

log4j.appender.File.MaxFileSize = 10MB

# 输出所以日志,假若换来DEBUG表示输出DEBUG以上级别日志

log4j.appender.File.Threshold = ALL

log4j.appender.File.layout = org.apache.log4j.PatternLayout

log4j.appender.File.layout.ConversionPattern =[%p] [%d{yyyy-MM-dd HH:mm:ss}][%c]%m%n

4.2.4、JUnit测试

经过上述步骤(到4.2.2,log4j不配也没影响),咱们早就做到了Spring和mybatis的三结合,那样我们就可以编写意气风发段测验代码来尝试是还是不是中标了。

4.2.4.1、成立测验用表

既是我们要求测试,那么大家就必要创建在数据库中国建筑工程总公司立一个测量试验表,那么些表建的非常轻易,SQL语句为:

DROP TABLE IF EXISTS `user_t`;

CREATE TABLE `user_t` (

`id` int(11) NOT NULL AUTO_INCREMENT,

`user_name` varchar(40) NOT NULL,

`password` varchar(255) NOT NULL,

`age` int(4) NOT NULL,

PRIMARY KEY (`id`)

) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;

/*Data for the table `user_t` */

insert  into `user_t`(`id`,`user_name`,`password`,`age`) values (1,'测试','sfasgfaf',24);

4.2.4.2、利用MyBatis Generator自动创制代码

这一个可依照表自动成立实体类、MyBatis映射文件以至DAO接口,当然,笔者习于旧贯将转换的接口名改为IUserDao,并不是一直用它生成的UserMapper。尽管不想麻烦就能够不改。实现后将文件复制到工程中。如图:

图片 7

4.2.4.3、建设结构Service接口和落到实处类

目录布局:

下边给出具体的内容:

IUserService.jave

package com.cn.hnust.service;

import com.cn.hnust.pojo.User;

public interface IUserService {

public User getUserById(int userId);

}

UserServiceImpl.java

package com.cn.hnust.service.impl;

import javax.annotation.Resource;

import org.springframework.stereotype.Service;

import com.cn.hnust.dao.IUserDao;

import com.cn.hnust.pojo.User;

import com.cn.hnust.service.IUserService;

@Service("userService")

public class UserServiceImpl implements IUserService {

@Resource

private IUserDao userDao;

@Override

public User getUserById(int userId) {

// TODO Auto-generated method stub

return this.userDao.selectByPrimaryKey(userId);

}

}

4.2.4.4、创设测验类

测量试验类在src/test/java中国建工总公司立,下面测验类中注释掉的生龙活虎部分是不应用Spring时,平日景色下的风姿浪漫种测量检验方法;假使利用了Spring那么就足以采纳注明的点子来引进配置文件和类,然后再将service接口对象注入,就足以开展测验了。

假诺测量检验成功,表示Spring和Mybatis已经构成成功了。输出音信运用的是Log4j打字与印刷到调控台。

package org.zsl.testmybatis;

import javax.annotation.Resource;

import org.apache.log4j.Logger;

import org.junit.Before;

import org.junit.Test;

import org.junit.runner.RunWith;

import org.springframework.context.ApplicationContext;

import org.springframework.context.support.ClassPathXmlApplicationContext;

import org.springframework.test.context.ContextConfiguration;

import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

import com.alibaba.fastjson.JSON;

import com.cn.hnust.pojo.User;

import com.cn.hnust.service.IUserService;

@RunWith(SpringJUnit4ClassRunner.class卡塔尔(英语:State of Qatar)     //表示继续了SpringJUnit4ClassRunner类

@ContextConfiguration(locations = {"classpath:spring-mybatis.xml"})

public class TestMyBatis {

private static Logger logger = Logger.getLogger(TestMyBatis.class);

//  private ApplicationContext ac = null;

@Resource

private IUserService userService = null;

//  @Before

//  public void before() {

//      ac = new ClassPathXmlApplicationContext("applicationContext.xml");

//      userService = (IUserService) ac.getBean("userService");

//  }

@Test

public void test1() {

User user = userService.getUserById(1);

// System.out.println(user.getUserName());

// logger.info("值:"+user.getUserName());

logger.info(JSON.toJSONString(user));

}

}

测验结果:

图片 8

到现在,达成Spring和mybatis这两大框架的构成,上边在世襲开展SpringMVC的组成。

4.3、整合SpringMVC

地点已经实现了2大框架的重新组合,SpringMVC的安插文件单独放,然后在web.xml中布署结合。

4.3.1、配置spring-mvc.xml

安顿内部的笺注也很详细,在那就背着了,首若是半自动扫描调整器,视图格局,注明的起步那三个。

xmlns:xsi="" xmlns:p=""

xmlns:context=""

xmlns:mvc=""

xsi:schemaLocation="

;

class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter">

text/html;charset=UTF-8

class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">

class="org.springframework.web.multipart.commons.CommonsMultipartResolver">

4.3.2、配置web.xml文件

那边面前遭受spring-mybatis.xml的引进以至配置的spring-mvc的Servlet就是为着形成SSM整合,早先2框架整合没有须求在那间进行其余配置。配置同样有详尽注明,相当少解释了。

web.xml

xmlns=""

xsi:schemaLocation=" "

version="3.0">

Archetype Created Web Application

contextConfigLocation

classpath:spring-mybatis.xml

encodingFilter

org.springframework.web.filter.CharacterEncodingFilter

true

encoding

UTF-8

encodingFilter

/*

org.springframework.web.context.ContextLoaderListener

org.springframework.web.util.IntrospectorCleanupListener

SpringMVC

org.springframework.web.servlet.DispatcherServlet

contextConfigLocation

classpath:spring-mvc.xml

1

true

SpringMVC

/

/index.jsp

4.3.3、测试

从那之后已经产生了SSM三大框架的组合了,接下去测验一下,假若成功了,那么恭喜你,若是战败了,继续调节和测量检验吧,作为技士正是不停的与BUG做努力!

4.3.3.1、新建jsp页面

图片 9

showUser.jsp   此页面仅输出一下客商名,达成贰个完完全全的差非常的少流程。

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>

测试

${user.userName}

4.3.3.2、建立UserController类

package com.cn.hnust.controller;

import javax.annotation.Resource;

import javax.servlet.http.HttpServletRequest;

import org.springframework.stereotype.Controller;

import org.springframework.ui.Model;

import org.springframework.web.bind.annotation.RequestMapping;

import com.cn.hnust.pojo.User;

import com.cn.hnust.service.IUserService;

@Controller

@RequestMapping("/user")

public class UserController {

@Resource

private IUserService userService;

@RequestMapping("/showUser")

public String toIndex(HttpServletRequest request,Model model){

int userId = Integer.parseInt(request.getParameter("id"));

User user = this.userService.getUserById(userId);

model.addAttribute("user", user);

return "showUser";

}

}

应接我们齐声读书钻研相关技巧愿意理解框架技能还是源码的对象一直加求求(企鹅):2042849237

越来越多详细源码参谋来源:http://minglisoft.cn/technology

版权声明:本文由澳门新葡亰平台游戏发布于网络技术,转载请注明出处:扫描二维码,详细整合教程