2015年01月31日星期五09时00分10秒day011.什么是servletsun公司制定的一种用来扩展web服务器功能的组件规范(1)扩展web服务器功能早期的web服务器(apache,iis等)只能处理静态资源的请求(即需要事先将html文件写好),不能处理动态资源的请求(即需要计算生成动态页面)cgi程序可以扩展web服务器的功能。注:cgi(commongetewayinterface通用网关接口),可以使用c,perl等语言来开发符合cgi标准的程序,web服务器收到请求之后,如果需要计算,可以调用cgi程序来处理cgi程序编写复杂,不可移植,性能也不是很好。servlet可以扩展web服务器功能,即web服务器可以调用servlet来进行计算。(2)组件规范1)什么是组件符合一定规范,实现部分功能,并且需要部署到容器当中才能运行的软件模块。servlet是一个组件,需要部署到servlet容器中才能运行。2)什么是servlet容器容器是符合一定规范提供组件运行环境的程序。2.如何开发一个servlet?step1:写一个java类,实现Servlet接口(或者继承HttpServlet抽象类)step2:编译step3:打包建立一个具有如下结构的文件夹:appname------------------------工程名WEB-INFclasses(放.class文件)lib(可选,放.jar文件)web.xml(部署描述文件)step4:部署将step3创建好的文件夹拷贝到servlet容器里就可以了注:也可以使用jar命令将step3创建好的文件夹压缩成.war为后缀的文件。step5:运行启动容器,访问servlethttp://ip:port/appname/url-pattern3.安装tomcat(下载)tomcat是一个开源的servlet容器,同时,也是一个简单的web容器step1:解压tomcat/opt/apache-tomcat7.tar.gz------------解压到/home/soft01step2:配置环境变量JAVA_HOME:jdk安装路径,比如/opt/jdkCATALINA_HOME:tomcat安装路径,比如/home/soft01/tomcat7PATH:/home/soft01/tomcat7/binstep3:启动tomcat打开终端:cd/home/soft01/../binshstartup.sh(如果是windowsstartup.bat)打开浏览器,输入:关闭tomcatcd/home/soft01/tomcat7/binshshutdown.sh4.使用eclipse开发一个servlet5.servlet是如何运行的?比如,在浏览器地址栏输入:浏览器依据ip,port建立连接。step2:浏览器将相关数据(比如,请求参数)打包并发送给servlet容器。step3:容器解析请求数据包(拆包),将解析到的结果保存到request对象上,同时,还会创建一个request对象。step4:容器创建servlet对象,然后调用该对象的service方法(会将request,response作为参数传递过来)。注:在service方法里面可以通过request对象获得请求参数值,也可以将处理结果写到request对象上。step5:容器获得response对象上存放的处理结果,然后打包发送给浏览器。step6:浏览器解析响应数据包,然后生成相应的页面。6.常见错误及解决方式(1)404注:404是一个状态码(是一个三位数字,表示服务器处理请求的一种状态)1)含义:服务器依据请求地址找不到对应的资源2)错误原因:a:应用没有部署b:请求地址写错http://ip:port/appname/url-patternc:servlet-name不一致(2)5001)含义:系统错误2)错误原因:a:程序运行出错b:没有严格按照规范来写servlet类,比如,没有继承HttpServlet,servlet-class类名写错(3)4051)含义:找不到方法2)错误原因:service方法没有严格按照规定来写练习:写一个DataServlet,输出当前的系统时间年02月02日星期一09时00分10秒day021.http协议(1)什么是http协议由w3c制定的一种网络应用层协议,规定了浏览器与web服务器之间如何通信以及相应的数据包的结构1)如何通信a.建立连接b.打包发送请求c.打包发送响应d.关闭连接如果浏览器要再发送请求,需要重新建立新的连接即“一次请求,一次连接”2)优点web服务器可以利用有限的连接数为尽可能多的请求服务3)缺点(2)两种请求数据包的结构1)请求数据包:a,请求行:请求方式请求资源路径协议类型和版本b,消息头是一些键值对(使用“:”隔开),表示特定的含义c,实体内容只有当请求方式为post时,才会有数据(请求参数)如果请求方式为get,请求参数会添加到请求资源路径的后面2)响应数据包a,状态行:协议类型和版本状态码状态描述状态码是一个三位数字,表示服务器处理请求的一种状态比如:200:正确500:系统错误404:找不到资源b,消息头服务器也可以发送一些消息头给浏览器,比如“content-type”,告诉浏览器,服务器返回的数据类型。c,实体内容程序处理的结果,浏览器会解析其中的数据,生成相应的页面(3)两种请求方式1)get请求a,哪些情况,浏览器会发送get请求直接输入某个地址点击连接表单默认提交b,get请求的特点将请求参数添加到请求资源路径的后面,只能提交少量的数据(请求行只能存放大约2k左右的数据)将请求参数显示在地址栏,不安全(比如路由器会记录请求地址)。2)post请求a,哪一写情况,浏览器会发送post请求将表单的method属性设置为“post”b,post请求特点会将请求参数添加到实体内容里面,可以提交大量的数据不会将请求添加到浏览器的地址栏,相对安全注:不管是那种请求方式,都不会对请求参数加密,如果有敏感数据,一定要加密处理。2.servlet如何使用中文(1)为什么会有乱码out.println语句,默认使用iso-8859-1编码(2)解决方式response.setContentType(text/html;charset=utf-8);3.如何处理表单中的中文参数值?(1)为什么会有乱码表单提交时,浏览器会对中文参数使用打开该表单所在的页面时的字符集来编码服务器端默认会使用iso8859-1来解码(2)如何解决step1:保证表单所在的页面按照指定的字符集打开metahttp-equiv=content-typecontent=text/html;charset=utf-8step2:服务器端按照指定的字符集来解码方式一:request.setCharacterEncoding(utf-8)---只针对post请求有效方式二:uname=newString(uname.getBytes(iso-8859-1),utf-8);---针对get和post请求都有效4.如何获得请求参数值(1)Stringrequest.getParamater(Stringparaname);注:a,该方法有可能返回null请求参数名与实际发送过来的参数名不一致b,有可能返回空字符串。(2)String[]request.getParameterValues(StringparamName);注:a,当有多个参数名相同时,用该方法b,对于多选框,如果一个选项都不选择,会获得null5.servlet使用jdbc访问数据库step1:将jdbc驱动(.jar文件)拷贝到WEB-INF\lib下step2:使用jdbc提供的API来访问数据库mysql:开源,免费,性能强大(1)登录mysql打开终端,输入mysql-uroot(2)查看当前有哪些数据库showdatabases(3)创建一个新的数据库(同时设置缺省的字符集)createdatabasejsd1411defaultcharactersetutf8;注:a,如果刚开始编码集设置错误可以用alterdatabasejsd1411charactersetutf8;修改b,如果终端有乱码,可以用setnamesutf8设置c,显示数据库的编码集showcreatedatabasejsd1411;d,删除数据库用dropdatabasejsd1411;(4)使用指定的数据库usejsd1411(5)查看当前数据库有哪些表showtables(6)建表createtableli_emp(idintprimarykeyauto_increment,unamevarchar(50),salarydouble,ageint);insertintoli_emp(name,salary,age)values('King',20000,25);注:auto_increment,自增长列,在插入记录时,数据库会自动为该列赋一个自增长的值-----------------------------------------------------------------------------------------------------------2015年02月03日星期二09时00分10秒day031.将中文插入到数据库需要注意的问题(1)数据库要设置好字符集createdatabasejsd1411defaultcharactersetutf8;(2)jdbc驱动要能够进行正确的编码和解码注:有一些jdbc驱动默认会使用“iso-8859-1”来编码和解码,特别是mysql的驱动对于jdbc驱动,可以添加如下两个参数jdbc:mysql://localhost:3306/jsd1411?useUnicode=true&characterEncoding=utf8;2.重定向(1)什么是重定向服务器通知浏览器向一个新的地址发请求,通常,服务器可以发送一个302状态码和一个Location消息头(包含了一个地址,称之为重定向地址),浏览器收到之后,会立即向重定向地址发请求(2)如何重定向response.sendRedirect(Stringurl);注:a,url就是重定向地址b,重定向之前,容器会先清空response上缓存的内容(3)特点a,重定向地址是任意的b,重定向后,浏览器地址栏的地址会有变化--------------------------------------------------------------------------------------------------------------2015年02月04日星期三08时56分22秒day041.servlet的生命周期(1)什么是生命周期?容器创建servlet对象,然后为该对象分配资源,调用该对象的方法处理请求,以及销毁该对象的整个过程。(2)生命周期分为哪几个阶段?1)实例化(创建servlet对象)a,什么时候实例化?情形1:收到请求之后才会创建情形2:启动容器之后就创建b,容器在默认情况下,对于某个类型的servlet只会创建一个实例。需要配置load-on-startup1/load-on-startup注:参数值是一个大于等于0的整