xsi="http:
//www.w3.org/2001/XMLSchema-instance"xsi:
schemaLocation="version="2.4">
WebModel
MyServlet
demo.MyServlet
其中demo是创建MyServlet时指定的包名,如果没有包名
则直接写上"MyServlet"
MyServlet
/MyServlet
不过这个文件Jbulider已经绑我们做好了,我们不需要修改
7)启动TomCat,在IE中输入:
http:
//localhost:
8080/WebModel/MyServlet来访问
8)上面的配置只适合于开发阶段调试时使用,一旦Web应用程序开发完毕之后,要进行移植时,
就要把Web应用程序打包成War文件(Web归档文件)。
具体步骤:
A)进入开发Web应用程序的模块文件下面。
比如为:
WebModel下面
B)执行jarcvfWebModel.war*.*(注意要先设置Jdk环境变量,jar是jdk的一个工具)
C)在模块文件下面就会产生一个WebModel.war文件
D)把WebModel.war文件复制到Tomcat的webapps下面。
E)启动Tomcat,TomCat会自动把WebModel.war解压成为一个WebModel文件夹,
*****注意要删除在TomCat的\conf\Catalina\localhost文件夹下面创建一个与Web模块名相同的Xml文件,否则不会解压
F)在IE里面执行:
http:
//localhost:
8080/WebMod[模块名]/MyServlet[Servlet类名]
注意Servlet会区分大小写
http:
//localhost:
8080/webmod[模块名]/myservlet[Servlet类名]会出现错误
第二章Servlet使用入门
在这一章里面我们将要学习以下几点内容:
1:
CGI与Servlet的区别
2:
Servlet体系结构
3:
Servlet的基础知识
4:
Servlet的输出
5:
Servlet的生命周期
6:
HttpServletResponse与HttpServletRequest几个重要方法
CGI与Servlet的区别
1)在最早期的Web应用程序主要是CGI(CommonGateWayInterface通用网关接口)。
2)这类Web应用程序是使用如Perl这样的语言来编写的。
3)CGI有个致命的缺点,就是对每一个客户端,必须创建一个新的实例,这将占用大量的内存
4)为了解决这个问题,Servlet出现了。
5)Servlet是一个用Java编写的类,在服务器上运行,处理客户端的请求,并把结果放给客户端。
6)对于每一个客户端的请求,只需要创建一个Servlet的实例。
从而大大的节省了内存
Servlet体系结构
客户端:
客户端----------->Web服务器----->Web容器---->Servlet
http请求
服务器端:
Servlet------->Web容器----->Web服务器---->客户端
Servlet的基础知识
1)要编写一个Servlet,一般继承自HttpServlet抽像类。
所以一般要导入包javax.servlet.*与javax.servlet.http.*;
2)自定义的Servlet一般要重写doGet()方法和doPost()方法
3)doGet方法用来处理客户端通过Get方法发出的请求
publicvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)throws
ServletException,IOException
4)doPost()方法用来处理客户端通过Post方法发出的请求
publicvoiddoPost(HttpServletRequestrequest,HttpServletResponseresponse)throws
ServletException,IOException
5)request参数用来表示客户端的请求,response参数用来服务器对客户端的响应
6)为了让一个Serlvet能够处理Get请求与Post请求。
一般会在doPost的方法里面写上
doGet(request,response)表示把所有的请求转化成为Get请求
Servlet的输出
1)Servlet可以通过两种方法来输出运算的结果
A:
通过System.out.Print方法。
此方法会把结果输出到Cmd中,也就是TomCat中。
B:
通过response参数的getWriter()方法得到一个PrintWriter对像进行输出,
此输出会把计算结果输出到IE上,一般用此方法
PrintWriterout=response.getWriter();
out.println
Servlet的生命周期
1)Servlet的生命周期是指从一个Servle的创建开始到消亡的全过程
2)Servlet的生命周期各阶段如下:
A:
实例化:
也就是创建一个Servlet类的实例
B:
初始化:
向window申请资源。
此时会自动去执行Init方法
C:
服务:
去不断地接受客户端的请求,并做出响应
D:
释放:
把以前分配的资源进行归还给操作系统,此时会自动执行destroy方法
举例:
做一个servlet计数器,用来输出servlet被调用了多少次
步骤:
1)定义一个全局变量
2)在Init中赋初值为0
3)在doGet把变量加1,并输出
提问:
1)同时打开另外一个IE浏览器,做一个新的客户端,讨论计数器会不会清零
结论:
不管有多少个客户端,都只有一份实例。
2)讨论什么时候计数器才会清零,关闭TomCat容器
结论:
说明Web容器一旦关闭,则容器里面的servlet也就会消亡
HttpServletResponse与HttpServletRequest几个重要方法
1:
HttpServletResponse
A:
response.setContentType("编码")
设置向客户端输出的文本的编码,一般设为"text/html;charset=GBK"
response.setContentType("text/html;charset=GBK");
如果不设置,可能会出现乱码
B:
PrintWriterout=response.getWriter();
产生一个PrintWriter对像,此对像能够把信息输入到网页中去
此对像不仅可以输出普通字符,还可以输出html标记
在不使用此对像时,应该关闭该对像。
out.close();
C:
response.sendRedirect("Index.html");
使页面进行跳转
2:
HttpServletRequest
A:
request.getParameter("变量名")
B:
如果接受中文再输出会是乱码,为了解决这个问题,可以在接受之间加上
request.setCharacterEncoding("GBK");
request.getParameter("变量名")
可以得到客户端以Post或Get方法提交过来的变量
举例:
1:
创建一个登录的Html页面,通过Post提交到Servlet中,通过Servlet来判断数据库中用户名是否正确,
如果正确则跳到主页面,否则打印错误,并提供"返回"超链接
2:
编写一个用于注册会员的html页面,让用户填写会员的资料后,能够把这些资料保存到数据库中去
第三章会话跟踪简介
在这一章里面我们将要学习以下几点内容:
1:
Servlet中页面跳转的方法
2:
Sevlet中session对像
3:
Serlvet中Cookie对像
4:
Serlvet上下文
Servlet中页面跳转的方法
1:
request.getRequestDispatcher("目标").forward(request,response);
2:
response.sendRedirect("目标");
3:
forward与sendRedirect的区别:
A:
forward跳转之后在地址栏中显示依然是旧网页的地址,sendRedirect显示的是新网页的地址
B:
forward只能跳转到当前Web程序中的页面,而sendRedirect可以跳到任何目录。
比如:
request.getRequestDispatcher("").forward(request,response);错误
response.sendRedirect("");正确
什么是Session对像
1:
首先你应该把session想像成为一个大盒子,里面用来存放客户的数据
2:
当你打开一个网站的首页时,服务器就会为你创建一个大盒子,并且为这个大盒子编一个号,
于是这个大盒子就可以让你在这个网站的不同页面之间共享,直到你离开这个网站的时候,这服务器又会收回这个大盒子
3:
可见session对像的其中的一个功能就是为了实现让同一个客户端在不同页面之间实现数据共享.
但是一旦用户离开这个网站,那么session也就会自动消失
4:
一个网站可以被很多人同时访问,访问的每一个人在打开主页时,都会有一个大盒子,即session.
如果另一个用户也同时访问网站,他也拥有自己的Session,但两个用户之间无法通过Session共享信息
5:
以游泳分配一个柜子为例来说明sesson的用法
6:
session对像的常用手法:
A:
在一个页面里面创建一个session变量.
B:
在另外一个页面里面去使用该session变量.
Session对像的方法
1)在Servlet中要使用Session,必须要使用HttpSession接口
2)Session对像是一个数据集合,也就是一个Session对像里面可以放很多session变量,
每一个Session变量都可以存放数据
3)if(request.getSession().getAttribute("IsLogin")!
=null)
判断一个Session变量IsLogin是否存在,只有存在才可以继续读取里面的数据
3)得到一个IsLogin变量的值
if(request.getSession().getAttribute("IsLogin")!
=null)只有判断存在了,才可以读数据
request.getSession().getAttribute("IsLogin"):
4)request.getSession().setAttribute("IsLogin","Yes");设置session中IsLogin里面的值
什么是Cookies对像
cookies对像可以客户端长期保存信息。
在客户端的计算机里面会有一个cookies文件夹,那里就是存放客户端的信息的。
当客户端第一次去访问某个网站时,该网站就会在客户端的计算机里面偷偷地写入一个Cookies
下一次再访问该网站时,它就会读取你的计算机硬盘上cookies,并将新的信息保存在你的计算机上。
跟session不同的,cookies是把信息存储在客户端,不是在服务器里面。
操作cookies
1:
得到所有的Cookies
Cookie[]cookies=request.getCookies();
2:
得到指定Cookies的名字:
Cookie.getName()
3:
得到指定Cookies的值
Cookie.getValue();
4:
设置指定Cookies的值
cookie.setValue(值)
5:
添加一个Cookies
cookie=newCookie("Visted","1");
cookie.setMaxAge(10000);设置cookie的过期时间以钞为单位
response.addCookie(cookie);
4:
修改指定cookie的值:
注意修改之后也要重新添加,否则添加之后无效
cookie.setValue(值);
cookie.setMaxAge(1000);
response.addCookie(cookie);
应用举例:
1:
证明正常情况下,一个网页或Servlet的数据是不能给另外一个网页或servelt共享
做两个servlet,一个servlet里面给一个session变量赋值,给一个私有变量赋值
在另外一个ser