Java web实现图片上传服务器、同步保存数据库以及如何在前端页面展示教程

Java web实现图片上传服务器、同步保存数据库以及如何在前端页面展示教程


大概流程:
1.上传插件的选择:此篇博文选择的是jQuery的zyupload文件上传插件;
2.上传请求发起后,java代码的处理:你是要将上传的图片只保存在服务器还是只保存在数据库还是说两者都采取。上传到服务器很简单,保存到数据库也很简单,但是此处需要考虑业务,图片保存在数据库时采用哪种保存方式(本博文业务来自于项目,因为图片数量巨多,故在数据库是通过保存图片的路径实现的,并非二进制流);
3.图片保存在数据库后,在前段页面的回显功能。

一、上传

目前上传图片的插件很多,我在做这个需求的时候也用到了好几款图片上传插件,没有一个完美的插件,多多少少都有问题,必要的时候需要改作者的源码。我选择的是zyupload插件。下面说说使用教程。
1.点击此处下载zyupload,网上也有一大堆,大家可以随便去找都可以。
2.使用方法:
下载插件压缩包后,解压。把css文件zyupload-1.0.0.css和js文件zyupload-1.0.0.js以及图标文件夹images引入到你的项目,images文件夹跟zyupload.css文件在同一个目录下。如图:
在这里插入图片描述
3.创建一个上传组件对象:

<input type="button"onclick="javascrtpt:window.location.href='<%=path%>/uploadPhotoIndex'" value="上传照片">

这行代码就是创建了一个按钮,点击后打开上传图片的页面。因为我用的是SSM加shiro框架,所有页面都是在Controller中统一处理的,(我的处理代码如下)这里显得有点啰嗦,大家可以直接转xxx.jsp就可以了。

	/**
	 * 上传图片主页
	 */
	@RequestMapping(value = "/uploadPhotoIndex")
	public String uploadPhotoIndex() {
		return "bs/uploadPhoto";
	}

4.上传页面代码:

<%@ page language="java" contentType="text/html; charset=utf-8"
	pageEncoding="utf-8"%>
<%
	String path = request.getContextPath();
%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="multipart/form-data; charset=utf-8">
<title>Insert title here</title>
<link rel="stylesheet" type="text/css"href="<%=path%>/css/bootstrap.min.css">
<link rel="stylesheet" type="text/css" href="<%=path%>/css/zyupload-1.0.0.css" />
<script type="text/javascript" src="<%=path%>/js/jquery-3.1.1.min.js"></script>
<script type="text/javascript" src="<%=path%>/js/zyupload-1.0.0.js"></script>
</head>
<body>
	<div id="demo" class="demo"></div>
</body>
<script type="text/javascript">
	var path='<%=path%>';
	$(function(){
		// 初始化插件
		$("#demo").zyUpload({
			width            :   "100%",                 // 宽度
			height           :   "400px",                 // 宽度
			itemWidth        :   "150px",                 // 文件项的宽度
			itemHeight       :   "210px",                 // 文件项的高度
			url              :  path+"/test/uploadPhoto",  // 上传文件的路径
			fileType         :   ["jpg","png","PNG","JPG"],// 上传文件的类型
			multiple         :   true,                    // 是否可以多个文件上传
			dragDrop         :   true,                    // 是否可以拖动上传文件
			del              :   true,                    // 是否可以删除文件
			finishDel        :   false,  				  // 是否在上传文件完成后删除预览
			/* 外部获得的回调接口 */
			onSelect: function(files, allFiles){                    // 选择文件的回调方法
				console.info("当前选择了以下文件:");
				console.info(files);
				console.info("之前没上传的文件:");
				console.info(allFiles);
			},
			onDelete: function(file, surplusFiles){                     // 删除一个文件的回调方法
				console.info("当前删除了此文件:");
				console.info(file);
				console.info("当前剩余的文件:");
				console.info(surplusFiles);
			},
			onSuccess: function(file,response){                    // 文件上传成功的回调方法
				console.info("此文件上传成功:");
				console.info(file);
			},
			onFailure: function(file){                    // 文件上传失败的回调方法
				console.info("此文件上传失败:");
				console.info(file);
			},
			onComplete: function(responseInfo){           // 上传完成的回调方法
				console.info("文件上传完成");
				console.info(responseInfo);
				myConfirm('提示', '所有照片上传成功!是否将已上传的照片更新到数据库?', insertPhoto, function(){});
			}
		});
	});
	function insertPhoto(){
		$.ajax({
			type : 'post',
			contentType : 'application/json',
			url : path + '/test/insertPhoto',
			processData : false,
			dataType : 'json',
			data : JSON.stringify({}),
			success : function(data) {
				if (data.requestResult.success) {
					myAlert("提示", data.requestResult.successMsg);
				} else {
					myAlert("提示", data.requestResult.errorMsg);
				}
			},
			error : function() {
				myAlert("警告", "请求失败");
			}
		});
	}
</script>
</html>

body里面就一句,创建一个实例对象就可以,然后通过$("#demo").zyUpload({})去初始化它。下面的五个方法特别重要,可以借用来扩展你的业务。我是在图片全部上传到服务器后调用了onComplete: function(responseInfo){}这个方法,去询问是否将上传的图片更新到数据库,为什么这么做,因为保存图片到数据库的时候如果throw异常不好处理,可能后端保存失败了,但是前端提示成功了,或者压根就不提示。为了方便处理异常,我还是选择了通过ajax去保存图片路径到数据库。
5.前端上传效果:
创建一个上传按钮
上传页面
在这里插入图片描述

二、后端代码处理

1.先贴上传到服务器代码:

	@RequestMapping(value = "test/uploadPhoto")
	public String uploadPhoto(@RequestParam("file") MultipartFile[] file, HttpServletRequest request) throws Exception {
		String firstPath = "E:\\tempPhotos";// 存入数据库的路径前缀
		for (int i = 0; i < file.length; i++) {// 循环存入文件并组合路径
			MultipartFile thisfile = file[i];
			String fileName = thisfile.getOriginalFilename();// 得到文件名称
			File tempFile = new File(firstPath, fileName);
			if (fileName != "" && !thisfile.isEmpty()) {
				if (!tempFile.getParentFile().exists()) {// 检测是否存在目录
					tempFile.getParentFile().mkdirs();
				}
				thisfile.transferTo(tempFile);// 写入文件
			}
		}
		return "bs/uploadPhoto";//上传成功返回上传图片页面。
	}

2.保存图片到数据库代码:

	前端通过ajax请求实现插入的,图片上传完成后会调用此请求,上述前段代码已提及,上传和保存分开是为了便于处理异常,ajax实现的异步刷新感觉体验好
	@RequestMapping(value = "test/insertPhoto")
	public @ResponseBody Response insertPhoto1()throws Exception {
		Response response = new Response();//这个是我用来消息处理的工具类。你们可以用自己的替换
		String temppath = "E:\\tempPhotos";// 临时上传的图片目录
		String targetpath = "E:\\photos";// 最终备份的图片目录
		File tempfile = new File(temppath);
		File targetfile = new File(targetpath);
		if (!targetfile.getCanonicalFile().exists()) {// 检测是否存在目录
			targetfile.getCanonicalFile().mkdirs();
		}
		String[] fileName = tempfile.list();
		Photos = null;声明一个图片实体
		List<Photos> photos = new ArrayList<>();
		try {
			for (int i = 0; i < tempfile.list().length; i++) {
					photos = new Photos();
					//因为图片命名是编号_姓名的方式,所以这里做了一个处理,
					int index = fileName[i].indexOf("_");
					photos .setBh(fileName[i].substring(0, index));
					//这里是关键,存入图片的路径。比如图片命名是:123_张三.jpg
					存进去就是  /photos/123_张三   这样的,采用相对路径的办法,实际地址是E:\photos\tempPhotos\123_张三.jpg,关键就在于图片在前端展示的时候有个大坑,稍后会讲到。
					photos.setPhoto("/photos/" + fileName[i]);
					photolist.add(photos );
			}
				//通过mybatis框架通过list插入图片数据。效率比使用for循环好多了
				int m = photosService.updatePhotoList(photolist);
				if (m > 0) {
					response.getRequestResult().setSuccess(true);
					response.getRequestResult().setSuccessMsg("照片更新到数据库成功!");
				}else {
					response.getRequestResult().setSuccess(false);
					response.getRequestResult().setErrorMsg("<font color=\"red\">照片更新到数据库失败!<br/>请检查照片名称是否正确或者上传时照片类型是否选对!</font>");
				}
		} catch (java.lang.StringIndexOutOfBoundsException e) {
			response.getRequestResult().setSuccess(false);
			response.getRequestResult().setErrorMsg("照片更新到数据库失败!<br/>失败原因:照片名称分割时出现字符串下标越界异常!<br/>解决方案:检查上传图片的命名是否符合规范要求!<br/>");
		}catch (Exception e) {
			response.getRequestResult().setSuccess(false);
		response.getRequestResult().setErrorMsg(e.getMessage().substring(e.getMessage().lastIndexOf(":")));
		}
		// 插入图片到数据库以后先将临时上传的图片备份(复制整个临时图片文件夹到photos目录下)
		org.apache.commons.io.FileUtils.copyDirectoryToDirectory(tempfile, targetfile);
		// 删除临时图片文件夹
		org.apache.commons.io.FileUtils.deleteDirectory(tempfile);
		return response;

三、数据库读取图片在前端页面展示(重点)

1.采用MySQL数据库进行存储,存储图片的方式是通过保存图片的相对路径(非blob),如图:
在这里插入图片描述
2.前端绑定:
既然数据库存储的是路径,那么就直接把图片路经查询出来放到图片标签img里面不就美滋滋了!(这里会打脸,尤其新手)。
在这里插入图片描述
前端我用的knockout js,绑定数据就是通过data-bind方式,大家用自己熟悉的就可以。上面一行代码就等同于:
在这里插入图片描述
大家看看src="",是不是跟数据库存的值是一样的。但是显示效果是什么样子呢?看下图:
在这里插入图片描述
图片找不到?找不到?哪里的问题?原因在于Tomcat服务器只能扫描到项目下的资源,很明显咱们图片上传后存放的真实路径在这里:
在这里插入图片描述
这个不是项目的路径,并且咱们用的是相对路径存放的照片在数据库。解决办法就是通过Tomcat添加虚拟路径来解决。看下面:
1.双击你的Tomcat服务器打开。
在这里插入图片描述
2.选择Modules ,再在右上角选择Add External Web Module,出现如图小弹出框。在第一个输入框填入存放图片的物理路径,第二个输入框填映射地址(比如数据库你存放的格式是/photos/abc.png,那么这里就是/photos),为了更清楚解释,请下图看关系:
在这里插入图片描述
3.再上一步的操作基础上,还需要一一步操作就可以完成了,打开发布该项目的Tomcat,找到conf下的server.xml打开,在标签内加上一句
在这里插入图片描述
到此,一切结束了。
4.测试结果:一切正常了
在这里插入图片描述
5,由于是项目里面的一个功能,所以源码没办法分享,大家要是哪里遇到困难,请留言,一起讨论,或者觉得本文有不足之处,望各路大神指出。感激不尽!

  • 24
    点赞
  • 158
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 10
    评论
超级有影响力的Java面试题大全文档 1.抽象: 抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面。抽象并不打算了解全部问题,而只是选择其中的一部分,暂时不用部分细节。抽象包括两个方面,一是过程抽象,二是数据抽象。 2.继承:  继承是一种联结类的层次模型,并且允许和鼓励类的重用,它提供了一种明确表述共性的方法。对象的一个新类可以从现有的类中派生,这个过程称为类继承。新类继承了原始类的特性,新类称为原始类的派生类(子类),而原始类称为新类的基类(父类)。派生类可以从它的基类那里继承方法和实例变量,并且类可以修改或增加新的方法使之更适合特殊的需要。 3.封装:  封装是把过程和数据包围起来,对数据的访问只能通过已定义的界面。面向对象计算始于这个基本概念,即现实世界可以被描绘成一系列完全自治、封装的对象,这些对象通过一个受保护的接口访问其他对象。 4. 多态性:  多态性是指允许不同类的对象对同一消息作出响应。多态性包括参数化多态性和包含多态性。多态性语言具有灵活、抽象、行为共享、代码共享的优势,很好的解决了应用程序函数同名问题。 5、String是最基本的数据类型吗?  基本数据类型包括byte、int、char、long、float、double、boolean和short。  java.lang.String类是final类型的,因此不可以继承这个类、不能修改这个类。为了提高效率节省空间,我们应该用StringBuffer类 6、int 和 Integer 有什么区别  Java 提供两种不同的类型:引用类型和原始类型(或内置类型)。Int是java的原始数据类型,Integer是java为int提供的封装类。Java为每个原始类型提供了封装类。 原始类型 封装类 boolean Boolean char Character byte Byte short Short int Integer long Long float Float double Double  引用类型和原始类型的行为完全不同,并且它们具有不同的语义。引用类型和原始类型具有不同的特征和用法,它们包括:大小和速度问题,这种类型以哪种类型的数据结构存储,当引用类型和原始类型用作某个类的实例数据时所指定的缺省值。对象引用实例变量的缺省值为 null,而原始类型实例变量的缺省值与它们的类型有关。 7、String 和StringBuffer的区别  JAVA平台提供了两个类:String和StringBuffer,它们可以储存和操作字符串,即包含多个字符的字符数据。这个String类提供了数值不可改变的字符串。而这个StringBuffer类提供的字符串进行修改。当你知道字符数据要改变的时候你就可以使用StringBuffer。典型地,你可以使用 StringBuffers来动态构造字符数据。 8、运行时异常与一般异常有何异同?  异常表示程序运行过程中可能出现的非正常状态,运行时异常表示虚拟机的通常操作中可能遇到的异常,是一种常见运行错误。java编译器要求方法必须声明抛出可能发生的非运行时异常,但是并不要求必须声明抛出未被捕获的运行时异常。 9、说出Servlet的生命周期,并说出Servlet和CGI的区别。  Servlet被服务器实例化后,容器运行其init方法,请求到达时运行其service方法,service方法自动派遣运行与请求对应的doXXX方法(doGet,doPost)等,当服务器决定将实例销毁的时候调用其destroy方法。 与cgi的区别在于servlet处于服务器进程中,它通过多线程方式运行其service方法,一个实例可以服务于多个请求,并且其实例一般不会销毁,而CGI对每个请求都产生新的进程,服务完成后就销毁,所以效率上低于servlet。 10、说出ArrayList,Vector, LinkedList的存储性能和特性  ArrayList 和Vector都是使用数组方式存储数据,此数组元素数大于实际存储的数据以便增加和插入元素,它们都允许直接按序号索引元素,但是插入元素要涉及数组元素移动等内存操作,所以索引数据快而插入数据慢,Vector由于使用了synchronized方法(线程安全),通常性能上较ArrayList差,而LinkedList使用双向链表实现存储,按序号索引数据需要进行前向或后向遍历,但是插入数据时只需要记录本项的前后项即可,所以插入速度较快。 11、EJB是基于哪些技术实现的?并说出SessionBean和EntityBean的区别,StatefulBean和StatelessBean的区别。 EJB包括Ses
简介 Symphony([ˈsɪmfəni],n.交响乐)是一个现代化的社区平台,因为它: 实现了面向内容讨论的论坛 包含了面向用户分享、交友、游戏的社交网络 集成了聚合独立博客的能力,共建共享优质资源 并且 100% 开源 欢迎到 Sym 官方讨论区了解更多。另外,如果你需要搭建一个企业内网论坛,请使用 SymX。 动机 Sym 的诞生是有如下几点原因: (正版) 很多系统界面上仍然保持着老式风格,远远没有跟上时代发展的脚步,它们没有创新、好玩的特性,缺少现代化的交互元素和用户体验 大部分系统是从程序员的角度进行设计的,没有考虑实际的产品、运营需求,这类系统功能过于简陋、细节不够精致、缺乏长期维护 另外,我们正在探索新的社区模式,实现独奏(Solo)与协奏(Symphony)相结合的社区新体验 (野版) 万能的 GitHub 上连个能用的 Java 社区系统都找不到,Sym 填补了这个宇宙级空白 做最 NB 的开源社区系统,预计几年以后 82% 的社区都将是 Sym 搭建的 作者技痒,炫技之作,Ruby/Python/Node.js/(特别是)PHP 怎么能比得过 Java 案例 个人维护: 黑客派 宽客网 贵州IT 超级产品经理 Titandb 学习主站 呆萌狮 - Demo's 公司维护: 四方环视 如果你也搭建好了,欢迎通过 Pull Request 将你的站点加到这个列表中 :-p 功能特性 具体功能点细节可浏览 Sym 功能点脑图,下面列出了 Sym 的主要特性,说明 现代化 的由来。 好用的编辑器 Markdown:支持 GFM 语法以及一些扩展语法 格式调整:粗体、斜体、超链接、引用、列表等可以通过工具栏按钮,同时也支持快捷键 文件上传:支持复制粘贴或者拖拽上传图片;支持上传普通文件;对 MP3 会使用在线播放器进行渲染 剪贴板处理:自动将复制的内容转换为 Markdown 格式;外链的图片自动上传站内 @用户:根据用户名自动补全,支持快捷键 Emoji:支持大部分主流 Emoji 表情,快捷键自动补全 数学公式:支持 LaTex 数学公式渲染 数据暂存:支持本地浏览器暂存数据,避免意外情况导致编辑内容丢失 智能、灵活的信息架构 传统的节点式社区要求帖子必须 分类 到某一个节点下,信息架构方式属于自上而下。Sym 不是自上而下的节点式信息架构,帖子不需要固定分类,通过标签 聚合 到某个领域下。 标签:根据帖子内容智能抽取关键字进行标签自动补全,一篇帖子关联多个标签。标签和标签之间以带边权重的图结构进行描述,方便进行相关计算 领域:一个领域下包含了多个标签,通过标签将帖子自动聚合到具体领域,随时可以通过增减关联标签从而达到调整领域范围,最终聚合出适合的帖子列表 满足多样化的发帖需求 目前支持 4 中帖子类型,满足不同用户的偏好: 普通帖子:提问或分享对别人有帮助的经验与见解 思绪:写作过程的记录与重放,文字版的沙画表演 (?) 小黑屋:邀请好友在私密空间中进行交流 同城广播:发起你所在城市的招聘、Meetup 等 另外,所有帖子都可以设置 打赏区 ,打赏区可以放置一些“珍藏”内容,只有打赏后的用户才能浏览。打赏区编辑器同样支持 Markdown、Emoji 和文件上传等特性。打赏区支持内容更新,并可以随时调整打赏积分值。 对于测试帖,可以使用 Sandbox 机制:带有 Sandbox 标签的帖子将视为测试帖,不会显示在首页或是某领域内,只会展现在发帖者自己的帖子列表中。 人性化的回帖交互 实时呈现:回帖提交后其他浏览者可以不刷新页面就实时看到你的回帖 随时滚动:浮出式回帖编辑器方便回帖者随时滚动屏幕查看其他内容,不必担心焦点丢失 真正的回复:回复是针对回帖而言的,而 @ 是针对用户而言的,@ 是提及不是回复,很多系统都没有考虑到这一点。回复/引用可以在当前位置进行展开浏览,也可以跳转到回帖处,并支持跨分页跳转 智能机器人:回帖时可以让机器人也参与到讨论中来,活跃气氛的同时说不定机器人真的能解决一些问题呢 用户个性化设置 用户可以自己设置很多参数以满足个性化需求: 帖子列表浏览分页每页条目数 回帖浏览模式:传统(按发布时间升序,无实时推送刷新);实时(按发布时间降序,实时推送新回帖) 头像浏览模式:原图(支持 gif 动图);静态图 Chrome 通知/邮件订阅/键盘快捷键开关 设置常用 Emoji,方便发布内容时快速插入表情 除了功能个性化配置项,还有很多隐私项开关: 是否公开帖子/回帖列表 是否公开
.Net精品就业班课程表 : 1、.Net基础加强(10天) 核心技术课程 常用数据结构(List、Dictionary、Array)、多态、常用设计模式、反射、常用.net类库、泛型、IO流、委托事件、正则表达式、XML、反射、GC等。 2、数据库开发及ADO.Net(6天) 核心技术课程 数据库开发基础、Microsoft SQLServer基础、SQL语言基础、索引、事务、SQL语言高级技术(空值处理、聚合与分组、数据分页、Union、日期函数、类型转换函数、流控函数、表连接、子查询、存储过程、触发器)、数据库设计范式、数据库调优。 ADO.Net(行集、数据集、类型化数据集、SQLHelper、SQL注入漏洞防范、数据绑定)。 3、三层架构MIS项目(5天) 查看项目演示 功能点 本项目基于流行的三层架构(DAL+BLL+UI)。 主要功能点:高安全性的用户管理体系、高安全性的异构系统数据导入导出、拼音检索、复合检索、无限级次数据管理、个性化邮件群发、Excel文件导入导出。 技术点 ADO.Net技术应用、SQLServer、MD5安全算法、基于NPOI的Excel文件处理、树状结构数据处理、递归、CodeSmith、代码生成器、三层架构。 项目说明 这是一个用WinForm技术实现的系统,传智播客在开课的半个月就安排一个项目,体现了传智播客“项目驱动学习”的先进教学理念。 4、网页开发与JavaScript(7天) 查看案例演示 核心技术课程 HTML基础加强、css(包含Div+CSS布局)、JavaScript、Dom(事件、window对象、document对象、对话框、定时器、粘贴板、动态Dom、跨浏览器兼容性解决方案、JS压缩和CDN、Internet Explorer Developer Toolbar)、JQuery(JQuery函数、隐式迭代、链式编程、id选择器、tag选择器、CSS选择器、层次选择器、表单选择器、过滤选择器、复合选择器、节点导航、节点操作、样式操作、事件、动画、JQuery Cookie、JQuery Live、JQueryUI)。 课程说明 CSS、JavaScript是ASP.Net开发的基础,把这些掌握好了就能很轻松的学会ASP.Net;Dom是实现网页动态效果的技术,在网站越来越个性化年代,招聘企业对应聘者的Dom水平要求非常高;JQuery是近几年异军突起的JavaScript框架库,几乎成了Web前端开发事实上的标准,大部分企业都是使用JQuery进行Web前端的开发。 学完了这阶段课程,学员将学会开发主流网站的前端效果,比如:焦点图、滚动展示图、网页防复制、网页自定义菜单、WebOS、美女时钟、无刷新评论、评分控件、表格特效、图片悬浮详细信息、微博界面、QQ消息框效果、Div对话框等。 5、ASP.Net开发(12天) 核心技术课程 自己动手写Web服务器(Socket、多线程)、ashx模式Web开发、ViewState、Cookie、Session、Http协议、Web开发基本原则、XSS漏洞防范、Request对象、Response对象、Server对象、虚拟路径、HttpHandler深入、ASP.Net生命周期、WebForm原理、服务端基本控件、WebShell漏洞防范、HTML服务端控件、验证框架、MasterPage、数据绑定控件(ObjectDataSource、列表类绑定控件、GridView、FormView、ListView、Repeater、高效率分页)、CKEditor、Membership、缓存、互联网调优(SEO、HTML压缩、页面静态化、移除ViewState、表单GET化)、URL重写、错误处理、AJAX(XMLHTTP、JQuery AJAX、Json)、全局文件、HttpHandler与HttpModule、IIS配置。 课程说明 由于微软对ASP.Net进行高度封装,因此ASP.Net入门非常简单,开发人员不需要了解HTML、JavaScript、Http协议也可以快速开发出一个Web系统,正因为如此,社会上充斥着大量这样的“拖控件的开发人员”,使得很多Java、PHP等语言的开发人员诋毁ASP.Net开发人员的时候经常会说“你们什么都不懂,就会拖控件”。ASP.Net的快速开发是ASP.Net非常大的一个优点,可以加快开发效率,这是行业的发展趋势,但是局限于这样的“傻瓜化开发方式”的开发人员的竞争力和成长性都是非常有限的,遇到ASP.Net一些高级技术(比如ASP.Net MVC、SEO、网站调优、服务端客户端混合编程、AJAX等)的时候就完全不能胜任。通过上一个阶段的HTML、JavaScript、Dom的学习,学员已经有了很好的HTML、JavaScript基础;在ASP.Net课程的一开始,不是直接教学员怎么拖ASP.Net控件进行快速开发,而是通过ashx的模式开发原始的动态网站,让学员明白“请求—处理—响应模型”、“Http协议、Http无状态”、“c#代码渲染生成浏览器端JavaScript”、“ViewState的作用”、“Session的原理”等这些基本而又重要的原理,从而扫清后面ASP.Net知识学习的基础性障碍。 由于访问量非常大,因此互联网项目的开发对ASP.Net开发人员的要求非常高,所以我们安排了互联网调优、缓存、网站防黑等内容。 ASP.Net中控件数量是非常多的,讲解ASP.Net的教材通常要上千页,让初学者望而生畏,其实ASP.Net大部分控件相似性非常强的,同类型的控件学会了一个那么其他控件也就很容易学会了。比如只要学会了DropDownList,那么RadioButtonList、ListBox、CheckBoxList、BulletedList等几乎不用学就会用;再比如只要学会了ListView,那么Repeater、GridView、FormView等控件也是触类旁通。传智播客认真钻研教学,对知识进行分类、整理、提炼精华,让学员在短时间内掌握ASP.Net技术。 ASP.Net中有一些技术是有局限性的,传智播客根据这些技术在企业中的实际应用情况进行了调整、补充。比如项目中几乎没有在UI层直接访问数据库的,而是采用三层架构,因此我们不讲解UI层直连数据库的控件SQLDataSource,而是把主要精力放在讲解三层架构开发模式。再比如ASP.Net内置的AJAX解决方案UpdatePanel只在部分要求不高的内网项目中才被使用,因此我们在讲解UpdatePanel的使用和原理之外,把更多的时间放在讲解企业中用的最多的JQuery AJAX解决方案上。 6、B/S系统项目(7天) 项目说明 1、网上图书商城。这是一个典型的B2C网上商城,使用经典的复杂三层架构(工厂模式)进行开发。涉及图书管理、搜索、订单管理、导航管理等核心模块。在讲解ASP.Net基础后安排这样一个B2C网上商城系统,让学员在实际项目中将学到的知识学以致用。 2、办公自动化OA系统。这是一个典型的基于ASP.Net技术的OA协同办公项目,包含了权限管理、公告管理、文档管理、工作流、论坛管理、新闻模块管理、人员管理等典型的OA系统模块。 3、数据采集和邮件群发。这是一个基于多线程的邮件营销平台,核心技术包括网络爬虫、多线程、HTML解析、邮件发送、生产者消费者模式等。 注:以上三个案例,上课时会根据每个班的课堂反馈选择其中一个案例予以讲解学习。 7、如鹏网项目(9天) 查看项目演示 功能点 站内搜索、栏目管理、视频播放(完全模仿优酷视频页面)、焦点图、静态页面生成(新浪、搜狐等大型网站普遍采用的技术)、文章管理、无刷新评论、评论的无刷新分页、敏感词过滤、用户管理、友情链接管理、缓存管理、广告位管理、RSS输出、水印设置、无刷新上传图片、搜索引擎优化设置、数据备份恢复、伪静态设置、网上商城、订单管理、在线支付(支持支付宝、财付通、块钱等第三方支付平台)、网站调优(数据库优化、缓存、静态页、CSS Spirit、js压缩)。 技术点 搜索引擎技术:Lucene.Net、多线程开发、爬虫技术、网页分析、正则表达式、Log4Net日志框架、Quartz.Net定时作业调度。 大型互联网开发技术:代码生成、网页静态化、基于JQuery的Web2.0页面开发、AJAX、SEO、网站调优、采集器、RSS/XML、网站防黑(防XSS攻击、防注入漏洞攻击、防CC攻击、防挂马、防盗链、敏感词过滤、广告帖智能过滤)、IIS管理与调优、流量分析、第三方脚本嵌入(广告、统计代码、内容联盟等)、图片服务器分离。 项目说明 如鹏网项目是已经上线三年的网站,日访问量最高20000人次,网址www.rupeng.com。本系统旧版本基于PHP、J2EE技术,由如鹏网开发者亲手操刀用.net重写新版本。系统分为前台Web界面、后台管理界面、站内搜索、监控客户端四个子系统。 大型互联网站由于访问量非常大,因此不是那些单纯用ASP.Net控件拖拽开发的开发人员能够开发的,也不是闭门造车能够造出来的,必须是在实际项目中经过无数访问者的使用、反馈、修改才能做出来的。搜房网、汽车之家等大型网站中用到的网站静态化、图片服务器分离、高性能缓存、HTML/JS压缩、CDN、CSS Sprite、负载均衡、Memcached、镜像服务器同步等问题不是那些随手写出来的所谓在线商城、电子商务系统所所能够涉及到的。 这个项目完全按照高访问量互联网站进行设计,通过这个项目,学员不仅可以在实战中巩固对前面学习的ASP.Net、ADO.Net、WinForm等知识的掌握,还可以掌握网站防黑、缓存、SEO、静态化、搜索引擎技术、AJAX等大型互联网开发中涉及到的技术。 8、.Net新技术(Windows Phone、ASP.Net MVC)(6天) 项目说明 未来是移动互联网的时代,未来将是Windows Phone、Android、iphone三足鼎立的时代,掌握了移动开发的技能的人是就业市场的抢手货。微软推出的Windows Phone平台是微软在移动互联网时代的一个重量级产品,微软对于WindowsPhone7的推广力度非常大,因此很多公司也开始进行Windows Phone7产品的研发,2011年下半年Windows Phone7开发人员的需求将会出现井喷,为了帮助学员掌握移动3G开发技术,传智播客.Net班加入了Windows Phone开发课程,采用传智播客独创的WP7Simulator教学平台,学员可以做出一个基于云计算架构的LBS系统。点击查看传智播客独创WP7Simulator教学平台。 ASP.Net MVC是微软推出的区别于ASP.Net WebForm的Web开发新技术,由于ASP.Net MVC解决了ASP.Net WebForm的很多缺点,非常适合大型、中型项目的开发,一经推出就受到了.Net开发社区的追捧,很多.Net开发人员的职位要求中都提到了MVC,可见掌握ASP.Net MVC技术必将提升自己就业的砝码。 9、就业指导(2天) 项目说明 总结以往所学知识,讲解《传智播客.Net面试、笔试宝典》,介绍简历、笔试、面试等所需的知识和技巧。
JAVA相关基础知识 1、面向对象的特征有哪些方面 1.抽象: 抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面。抽象并不打算了解全部问题,而只是选择其中的一部分,暂时不用部分细节。抽象包括两个方面,一是过程抽象,二是数据抽象。 2.继承: 继承是一种联结类的层次模型,并且允许和鼓励类的重用,它提供了一种明确表述共性的方法。对象的一个新类可以从现有的类中派生,这个过程称为类继承。新类继承了原始类的特性,新类称为原始类的派生类(子类),而原始类称为新类的基类(父类)。派生类可以从它的基类那里继承方法和实例变量,并且类可以修改或增加新的方法使之更适合特殊的需要。 3.封装: 封装是把过程和数据包围起来,对数据的访问只能通过已定义的界面。面向对象计算始于这个基本概念,即现实世界可以被描绘成一系列完全自治、封装的对象,这些对象通过一个受保护的接口访问其他对象。 4. 多态性: 多态性是指允许不同类的对象对同一消息作出响应。多态性包括参数化多态性和包含多态性。多态性语言具有灵活、抽象、行为共享、代码共享的优势,很好的解决了应用程序函数同名问题。 2、String是最基本的数据类型吗? 基本数据类型包括byte、int、char、long、float、double、boolean和short。 java.lang.String类是final类型的,因此不可以继承这个类、不能修改这个类。为了提高效率节省空间,我们应该用StringBuffer类 3、int 和 Integer 有什么区别 Java 提供两种不同的类型:引用类型和原始类型(或内置类型)。Int是java的原始数据类型,Integer是java为int提供的封装类。Java为每个原始类型提供了封装类。 原始类型封装类 booleanBoolean charCharacter byteByte shortShort intInteger longLong floatFloat doubleDouble 引用类型和原始类型的行为完全不同,并且它们具有不同的语义。引用类型和原始类型具有不同的特征和用法,它们包括:大小和速度问题,这种类型以哪种类型的数据结构存储,当引用类型和原始类型用作某个类的实例数据时所指定的缺省值。对象引用实例变量的缺省值为 null,而原始类型实例变量的缺省值与它们的类型有关。 4、String 和StringBuffer的区别 JAVA平台提供了两个类:String和StringBuffer,它们可以储存和操作字符串,即包含多个字符的字符数据。这个String类提供了数值不可改变的字符串。而这个StringBuffer类提供的字符串进行修改。当你知道字符数据要改变的时候你就可以使用StringBuffer。典型地,你可以使用StringBuffers来动态构造字符数据。 5、运行时异常与一般异常有何异同? 异常表示程序运行过程中可能出现的非正常状态,运行时异常表示虚拟机的通常操作中可能遇到的异常,是一种常见运行错误。java编译器要求方法必须声明抛出可能发生的非运行时异常,但是并不要求必须声明抛出未被捕获的运行时异常。 6、说出Servlet的生命周期,并说出Servlet和CGI的区别。 Servlet被服务器实例化后,容器运行其init方法,请求到达时运行其service方法,service方法自动派遣运行与请求对应的doXXX方法(doGet,doPost)等,当服务器决定将实例销毁的时候调用其destroy方法。 与cgi的区别在于servlet处于服务器进程中,它通过多线程方式运行其service方法,一个实例可以服务于多个请求,并且其实例一般不会销毁,而CGI对每个请求都产生新的进程,服务完成后就销毁,所以效率上低于servlet。 7、说出ArrayList,Vector, LinkedList的存储性能和特性 ArrayList和Vector都是使用数组方式存储数据,此数组元素数大于实际存储的数据以便增加和插入元素,它们都允许直接按序号索引元素,但是插入元素要涉及数组元素移动等内存操作,所以索引数据快而插入数据慢,Vector由于使用了synchronized方法(线程安全),通常性能上较ArrayList差,而LinkedList使用双向链表实现存储,按序号索引数据需要进行前向或后向遍历,但是插入数据时只需要记录本项的前后项即可,所以插入速度较快。 8、EJB是基于哪些技术实现的?并说出SessionBean和EntityBean的区别,StatefulBean和StatelessBean的区别。 EJB包括Session Bean、Entity Bean、Message Driven Bea

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员劝退师·咩

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值