孙豪杰的博客

[JavaWeb教程]第三章-Servlet开发

前面我们介绍到了form表单,其中action属性是把表单数据提交的路径,那么数据在服务器端是怎么处理的呢?我们一起来学习一下java servlet开发实现数据在服务器端的处理。
request,请求,前面我们学习Socket时,讲到了socket有一个输入流,一个输出流,用于客户端和服务器端之间通信。这里的request就可以理解为输入流的封装,实现了客户端和服务器端的http交互。
response,应答,输出流的封装。
session,每次点击,提交数据都是一次交互,客户端(这里可以理解为浏览器)和服务器端的一段时间内的全部的交互称为回话(session),session有过期时间,两次请求超出了服务器设置(可变更)的session过期时间,第二次请求就会创建新的回话。
cookie,客户端按照域名存储的键值对信息,可以持久化到硬盘。键值对中有一个key sessionId(也可以变更,但是作用类似)是实现session的关键数据。当客户端访问服务器端时,服务器端会查看是否存在sessionId如果存在,则会把本次请求和session关联,如果不存在则创建新的session,并把sessionId赋值给请求的cookie,客户端会把cookie信息在本地保存。大部分的sessionId的cookie信息时内存存储,没有持久化到硬盘,所以重启浏览器会导致创建新的session。
servletContext,实例容器,每个web服务器存在一个servletContext,启动时创建,关闭时销毁,所以我们重启服务后学生信息个数被清空。

[JavaWeb教程]第二章-jQuery简明开发教程

为了给网页增加动态效果,设计了在浏览器(最近新出的note.js技术,可以使用javascript在服务端运行,这里不讨论这点)上运行的javascript,直接使用javascript不太方便,所以基于javascript语言开发了很多工具包,其中最常用的一个就是jquery,也是本章学习的主题。
我们基本把jquery常用的方法都介绍了一遍,包括各种选择器,数据获取,文档处理以及数组遍历,Ajax提交工具等,一篇不到1万字的文章肯定不能完全介绍jquery,开发中需要不断的查参考手册才能使用更快速的方法解决问题。

[JavaWeb教程]第一章-HTML简明开发教程

网页界面一般会有网页设计师开发,程序员在开发好的静态界面上做动态扩展,所以也需要学习html语言,会一些简单的开发和修改。另外很多小公司没有专业的网页设计师,程序员会在一些基础上(就是扒别人做好的网页)做开发和变更,因此作为一个Java工程师有必要学习一下HTML基础开发。本文介绍常用的h,span,div,br,font,i,b,a,img,ul,ol,li,tatble,form等常用标签。

[Java基础教程]第十三章-Java多线程

main方法启动的线程,做为主线程一直在监听新的链接,每当有新的用户链接进来会创建一个新的线程”Thread thread = new SessionProcessor(sessionName, acceptSocket);”,并启动线程”thread.start()”.
新创建的线程执行逻辑是我们在继承了Thread的类SessionProcessor的run方法。从socket中获取输入流,读取客户端发送的字符串。
多线程实现的关键点:
1、继承Thread类或者实现Runnable接口,并重写run方法
2、创建线程并调用start方法。
为了解决资源竞争,需要保持线程串行访问共享资源,Java中关键字”synchronized”和接口“java.util.concurrent.locks.Lock”相关的类可以解决这种问题。
多线程能很大的提升程序员运行的效率,但是如果处理不好同步会得到不一样的预期结果。所以线程有风险,使用需谨慎。

[Java基础教程]第十二章-Java输入输出流

20世纪人类使用电位表示2进制(0,1),计算机才有了飞速的发展。计算机的存储和网络传输都是2进制,每个位为一个bit,每8bit为一个字节。后来计算机的用途逐渐从纯粹的数学计算扩展到各个方面,为了表示文字使用固定2进制串表示各种字符集,这种方式叫编码。
通常文件(文本文件)的访问需要至少3个流,因为文件的存储和传输都是2进制数字,所以先获取字节流OutputStream/InputStream,然后把字节流使用相应的编码方式转换成字符流Writer/Reader,字符流只能单字符传输效率太低,所以又引入一个缓冲字符流BufferedWriter/BufferedReader,缓冲区满了才做输入或者输出操作。BufferedWriter.write(String)作用是把参数的字符串输入到文件中,如果需要换行字符串中添加”n”就可以。如果入参数据太少可能会导致缓冲区没有写满,如果我们不调用flush,可能数据没有真正的写入文件,所以使用BufferedWriter写入后一定要flush。最后记得关闭流,否则可能导致内存丢失。
通过网络的数据交互使用的也是输入流和输出流,多了ServerSocket,Socket用于描述网络连接。网络就是IP:Port进行连接的。

[Java基础教程]第十一章-Java类和对象

继承是面向对象的三个特性之一,Java语言通过继承父类和实现接口两种方式实现继承。Java的继承有两个比较重要的特点:单继承结构,每个类只能有一个父类;所有的类继承java.lang .Object类。Object类中包含了多个默认实现的方法,其中常用的有3个,hashCode,equals,toString:
在前面几章中我们定义类的属性和方法前面会加一个单词修饰,比如private,public等,这些是对属性和方法访问权限的定义。这些修饰符共4个分别为,private,protected,default(没有修饰符),public。
类的类,有点拗口,面向对象的思想,一切都是对象,那么类的定义也是对象,也有类描述-Class类,类的属性,类的方法等都是有类定义,通过这种方式访问类和对象的方式叫做反射

[Java基础教程]第十章-Java容器

总结一下,常用容器有4种:
List容器,主要特点有序,值可以重复,主要子类ArrayList,另外一个文章没有提到的LinkedList,在容器中值更新频繁的场合下使用。
Set容器,主要特点,无序,值不可重复,主要子类HashSet
Map容器,键值对存储,无序,不可重复,主要子类HashMap
数组,主要特点有序

[Java基础教程]第九章-Java日期处理

中国古代是否有自己的历法是朝代是否确立的标志之一,可见日期时间对人们生活的重要性,在计算机中日期和时间仍然占有非常重要的地位。Java中日期是以1970-01-01 08::00:00为基准,其他时间为这个基准的相加(或者相减)的毫秒数。jdk为格式化Date提供了一个工具类java.text.DateFormat,这是一个抽象类,最常用的子类为java.text.SimpleDateFormat,我们把当前时间输出为”2016-02-01 23:27:72″的格式。

[Java基础教程]第八章-Java字符串

Java的字符串类(java.lang.String)也被称为第九种基础数据类型,它是jdk中最常用的类,没有之一。前面学习数学运算符的时候在控制台输出了所有运算的结果值,我们输出结果值的时候同时也输出了方程式结果会更清晰,比如”3 + 7 = 10″。前面我们一起学习过几次数据类型,那么基础数据类型和String之间是怎么转换的呢?”==”比较运算符是判断符号两侧的变量是否相等,如果两个字符串直接比较会是什么结果呢。获取字符串长度length(),字符串截取substring(begin,end),index位置上的字符charAt(index),这里的begin,end和Index都是字符在字符串中的位置,起始inex为0,这点需要注意.

[Java基础教程]第七章-Java流程控制

小明帮妈妈打酱油,临出门了妈妈就会说:”如果有瓶装的就买个瓶装的,否则就买一个袋装的。”这种场景在计算机中非常常见,一起来看下怎么用Java实现吧。
目前一共介绍了3种运算符,数学运算符(+-*/%),比较运算符(<,>,<=,>=)和逻辑运算符(&&,||),基本能满足日常开发。当一起使用的时候优先级是:数学运算符>比较运算符>逻辑运算符,”()”大于数学运算符。
流程控制:分支流程if else,switch case,循环流程while和for,以及中断循环的语句break,和continue。