getProperty/>12
7.5.将bean属性和request关联12
7.6.MVC模式12
第八章EL表达式13
8.1.EL访问4个范围对象13
8.2.EL访问JavaBean13
8.3.EL访问集合对象13
8.4.EL隐式对象13
8.5.EL运算符13
8.5.1.算术运算符13
8.5.2.关系运算符13
8.5.3.逻辑运算符14
8.5.4.empty14
第九章Filter和Listener14
9.1.Filter14
9.2.Linstener14
9.2.1.ServletContextListener14
9.2.2.ServletContextAttributeListener14
9.2.3.HttpSessionListener14
9.2.4.HttpSessionAttributeListener14
第十章综合应用15
10.1.javamail15
10.2.分页15
10.3.文件上传15
10.4.web应用的国际化19
10.5.工厂模式和抽象工厂模式19
第一章javaweb基础
1.1.web模型
web应用就是浏览器和服务器进行交换的过程。
用户在浏览器中输入需要访问的web的地址,通过浏览器使用http协议发送到服务器上,服务器使用http协议将用户请求的网页返回到客户端的浏览器中。
:
80/mail/index.jsp
http:
web服务的协议
:
域名,访问服务器的地址,一个域名对应一个唯一的ip地址
DNS:
域名解析服务器
80:
web服务的端口号,默认是80
mail/index.jsp:
具体访问的资源路径和名字
1.2.java平台上的web服务器
●Tomcat
●Resin
●webSphere
●WebLogic
1.3.Tomcat服务器
Tomcat是一个开源的,轻量级的web服务器,一般初学者学习都是用这个服务器。
Tomcat服务器的默认端口是:
8080,如果该端口被其他应用程序占用,需要修改tomcat目录下的conf子目录中的配置文件server.xml文件。
将端口号改为其他的。
●使用tomcat建立一个web程序。
在tomcat目中的webapps目录下,创建一个自己的网站目录myweb。
在目录中加入自己的网页index.html。
文件
●启动tomcat服务器
在tomcat目录中的bin目录下,运行startup.bat,启动tomcat服务器
●访问服务器中的资源
打开浏览器在地址栏中输入
http:
//localhost:
8080/myweb/index.html
1.4.Tomcat的目录结构
●/bin:
存放各种平台下启动和关闭tomcat服务器的脚本文件。
●/lib:
包含tomcat所使用到的jar文件
●/work:
tomcat把jsp生成的servlet文件放在这个目录下
●/temp:
临时文件夹
●/logs:
日志文件夹
●/conf:
存放各种配置文件
●/webapps:
web应用的默认发布目录
第三章servlet编程
3.1.servlet简介
servlet是运行在web服务器上的一个特殊的java类,和其他java类不一样的地方是,可以在serlvet中编写生成网页代码,在服务器端动态生成网页内容。
并能够得到客户端发送过来的数据。
3.2.编写一个简单的servlet程序
1.创建一个web项目myweb
2.创建HelloWorld.java继承HttpServlet,并重写doGet方法
3.在web.xml中配置servlet映射
4.在浏览器中访问servlet
3.3.servlet的运行机制
当浏览器发送给服务器一个servlet请求时,如果servlet是第一次被调用,服务器将会创建一个servlet实例,并且运行它,如果这个servlet已经被实例化,那么服务器只会启动一个新的线程来运行它。
应为默认情况下,多个线程访问同一个servlet时,有可能会去访问到共享的全局变量,因此,在使用全局变量时,应该要考虑线程同步的问题。
比如使用synchronized关键字来保护共享对象。
3.4.servlet中的方法
●doGet()和doPost()
分别处理客户端get请求和post请求,这两个方法都有HttpRequest参数,客户端的所有数据都是存放在HttpRequest对象中的
●init()方法
servlet初始化时会调用这个方法,这个方法只有被调用一次
●service()方法
service方法用来得到客户端的请求方式,然后决定去调用doGet()还是doPost()方法。
●destroy()方法
在服务器销毁servlet实例的时候会调用这个方法。
通常用来释放资源。
比如关闭数据库连接,关闭打开的文件等。
3.5.servlet生命周期
serlvet生命周期就是创建servlet实例到销毁servlet实例的这一个过程。
servlet的生命周期:
实例化—》初始化—》服务—》销毁
●在初始化的时候会调用init()方法
●服务的时候会调用service方法,service方法根据客户端的请求方式决定调用doPost()或者doGet()方法。
●在servlet实例未被销毁的时候,对于用户请求,web服务器会反复调用service()方法。
而init()方法只会在第一次实例化对象的时候调用。
3.6.处理Http请求报头
客户端的浏览器向服务器发送请求的时候,除了用户输入的表单数据之外,通常浏览器还会自动加上一些附加信息。
服务器在响应请求的时候也会自动向客户端发送一些附加信息。
我们将这些信息称为HTTP报头。
HTTP:
超文本传输协议,(无状态协议)断开式协议
3.6.1.在servlet中取得HTTP请求报头
常用的HTTP请求报头以及各自的含义
accept:
浏览器可以接受的MIME类型(浏览器返回文件类型)
accept-Charset:
浏览器可接受的字符集
accept-Encoding:
浏览器能够进行编码的数据编码方式
accept-Language:
浏览器所希望的语言种类
authorization:
授权信息
Connection:
是否需要持久连接,如果值为“Keep-Alive”,当页面包含多个元素时,可以减少下载时间。
Context-Length:
请求消息正文的长度
Cookie:
向服务器返回服务器之前设置的Cookie值
Host:
初始URL中的主机和端口号
Referer:
包含一个URL,表示的是从哪一个页面进入servlet的
User-Agent:
浏览器相关信息
Pragma:
指定“no-cache”值表示不使用浏览器缓存
注意:
并不是所有浏览器都会发送这些HTTP请求报头的。
编写代码:
如果是中文编码格式,accept显示的:
*/*如果不设置编码格式,才会显示所有后缀。
@Override
protectedvoiddoGet(HttpServletRequestreq,HttpServletResponseresp)
throwsServletException,IOException{
//设置输出编码格式
resp.setContentType("text/html;charset=gb2312");
//得到输出流
PrintWriterout=resp.getWriter();
out.print("
浏览器可以接受的MIME类型:
"+req.getHeader("ACCept"));
out.print("
是否需要持久连接:
"+req.getHeader("connection"));
out.print("
向服务器返回服务器之前设置的Cookie值:
"+req.getHeader("Cookie"));
out.print("
初始URL中的主机和端口号:
"+req.getHeader("Host"));
out.print("
表示的是从哪一个页面进入servlet的:
"+req.getHeader("Referer"));
3.6.2.在servlet中设置HTTP响应头
设置响应头使用方法:
setHeader(StringheadName,StringheadValue);
以下是HTTP1.1常用的响应报头
Content-Encoding:
标明页面在传输过程中的编码格式
Content-Type:
设置servlet输出的MIME类型(浏览器返回文件类型)
Content-Language:
设置页面所使用的语言。
例如en
Expires:
标明页面过期时间,可以用来设值页面缓存时间。
0为不缓存
Refresh:
标明浏览器自动调用最新的的页面。
对于一些常用的报头,可以使用更简单的方法来设置
setContentType(Stringname):
设置Content-Type报头。
addCook(Cookiec)设置Cookie
sendRedirect(Stringurl):
设置location报头,让servlet跳转到指定的页面。
3.6.3.使用setContentType()解决中文问题。
3.6.4.利用servlet动态生成图片
protectedvoiddoGet(HttpServletRequestreq,HttpServletResponseresp)
throwsServletException,IOException{
//设置Content-Type响应头
resp.setContentType("image/jpeg");
//设置页面不缓存
resp.setHeader("Pragma","No-cache");//设置页面不适用缓存
resp.setHeader("Cache-Control","no-cache");//不适用缓存控制
resp.setDateHeader("Expires",0);//页面过期时间0
//创建文件输出流
OutputStreamos=resp.getOutputStream();
//建立指定大小的画布
BufferedImageimage=newBufferedImage(80,20,BufferedImage.TYPE_INT_RGB);
//创建画笔
Graphicsg=image.getGraphics();
//填充指定的矩形
g.fillRect(0,0,80,20);
//设置字体名称,斜体,大小
g.setFont(newFont("TimesNewRoman",Font.ITALIC,18));
Randomrandom=newRandom();
//随机生成4个数字和颜色
for(inti=0;i<4;i++){
//产生10以内的随机数
StringsRand=String.valueOf(random.nextInt(10));
//设置随机颜色
g.setColor(newColor(random.nextInt(110),random.nextInt(110),random.nextInt(110)));
//绘制
g.drawString(sRand,20*i+6,16);
}
//释放资源
g.dispose();
//输出图像到页面
ImageIO.write(image,"JPEG",os);
}
3.6.5.在servlet中跳转到其他页面
跳转分为:
内部跳转和外部跳转
内部跳转地址栏不会发生变化,外部跳转地址栏会发生变化
内部跳转可以将request对象的值传递到下一个页面,
在跳转后,当前页面无法向浏览器输出任何东西
3.7.利用servlet读取HTML数据
1)创建reg .html文件,编写注册页面,包含基本的表单元素
2)创建RegServlet.java,读取表单提交的数据,并显示。
3)在浏览器中访问RegServlet
例子:
实现用户注册和登录
3.8.处理Cookie
3.8.1.了解Cookie
cookie就是服务器在客户端存放的一些信息。
http协议是一个无状态的协议,当浏览器获得他所请求的资源后,浏览器和服务器就失去了联系,当浏览器下一次去请求服务器的时候,服务器只把他当成一个新的连接。
服务器也不知道浏览器是否以前访问过。
要想建立服务器对浏览器的追踪,就可以使用Cookie。
3.8.2.在servlet中处理Cookie
cookie中的几个方法:
getMaxAge():
读取Cookie的过期时间
setMaxAge():
设置Cookie的过期时间,如果是0,表示删除cookie,负值表示浏览器关闭就删除cookie,正数表示多少秒后删除,单位是秒
getValue():
读取Cookie的value值
setValue():
设置Cookie的value值
例子:
3.9.会话跟踪
3.9.1.会话跟踪的意义和用途
Cookie只能保存文本,不能保存对象
Cookie可以在客户端被禁用
Cookie不安全
基于以上的问题,sun公司使用了一种替代Cookie的方法:
session
session是存放在服务器上的一块内存空间,默认销毁时间是30分钟,客户端通过URL地址重写的方式将session的id进行传递。
达到服务器跟踪浏览器的目的。
3.9.2.在servlet中使用session
session常用的方法:
getAttribute(Stringname):
根据属性名称得到属性值
setAttribute(Stringname,Objectvalue):
在session中存值
removeAttribute(Stringname):
移除一个属性值
invalidate():
销毁session
getMaxInactiveInterval():
得到session过期时间,单位是秒
setMaxInactiveInterval():
设置session过期时间
session是浏览器为客户端,一个浏览器对应一个sessinon,session过期时间是以最有一个访问服务器开始算。
例子:
3.10.ServletContext接口
ServletContext(servlet上下文通常称为公共区域),在服务器启动的时候就已经被创建。
同一个项目中的所有jsp和servlet共用这个容器中的属性。
getAttribute(Stringname):
根据属性名称得到属性值
setAttribute(Stringname,Objectvalue):
在session中存值
removeAttribute(Stringname):
移除一个属性值
例子:
小项目:
聊天室
第四章jsp编程初步
4.1.编写一个简单的jsp
在jsp页面上输出当前时间
4.2.jsp基本架构
4.2.1.jsp注释
--这个注释能在客户端看见<%=newDate()%>-->
<%--这个注释不能在客户端看见<%=newDate()%>--%>
4.2.2.jsp表达式
<%=%>
4.2.3.jspsriptlet(jsp小脚本)
<%%>
4.3.jsp和servlet的关系
jsp转译成servlet
第五章jsp指令和动作
5.1.jsp指令
jsp 指令格式:
<%@%>
5.1.1.page指令
contentType="application/vnd.ms-excel"指定网页以excel格式打开
errorPage
5.1.2.include指令
包含
5.2.jsp动作
5.2.1.include动作
include指令是将源文件合并之后,再编译成一个servlet
include动作是将源文件分别编译成servlet,然后将最后生成的html合并。
5.2.2.forword动作
第六章jsp隐式对象
6.1.out
6.2.response
6.3.request
6.4.session
6.5.application
6.6.exception
第七章javabean
7.1.JavaBean的规范
●必须放在一个包里面
●必须有一个无参的构造方法
●所有的属性不能是public的,属性的首字母必须小写
●通过getter和setter方法来读取或者设置属性的值,getter和setter方法的原则是:
get/set+变量名首字母大写。
●如果是Boolean类型,getter方法必须写成is+变量名首字母大写,setter方法不变
7.2.userBean>
7.3.setProperty/>
7.4.getProperty/>
7.5.将bean属性和request关联
7.6.MVC模式
第八章EL表达式
EL表达式只能从4个范围对象中取出值,jsp表达式<%=%>取java变量
EL表达式,取值的时候,如果没有指定范围,默认从范围小的开始。
8.1.EL访问4个范围对象
8.2.EL访问JavaBean
${name}
8.3.EL访问集合对象
8.4.EL隐式对象
pageScope
requestScope
sessionScope
applicationScope
param:
表单提交的数据
8.5.EL运算符
8.5.1.算术运算符
+
-
*
/div
%mod
8.5.2.关系运算符
==eq
!
=ne
>gt
<=le
>=ge
8.5.3.逻辑运算符
&&and
||or
!
not
8.5.4.empty
判断是否为空
${emptynull}
${empty“”}
以上两个将得到结果true
第九章Filter和Listener
9.1.Filter
filter1
com.web.Filter1
filter1
/index.jsp
filter1
/showInfo.jsp
过滤后缀
filter1
*.jsp
过滤文件夹
filter1
/back/*
按filter在xml中写的顺序执行
9.2.Linstener
9.2.1.ServletContextListener
主要用于系统初始化就需要加载的数据,比如得到项目路径,用来将文件写入指定目录
9.2.2.ServletContextAttributeListener
得到属性的key
System.out.println(arg0.getName());
得到属性的值
System.out.println(arg0.getValue());
9