第3章 Servlet基础.docx
《第3章 Servlet基础.docx》由会员分享,可在线阅读,更多相关《第3章 Servlet基础.docx(13页珍藏版)》请在冰豆网上搜索。
第3章Servlet基础
第3章补充案例
案例3-1实现第一个Servlet程序
一、案例描述
1、考核知识点
名称:
实现第一个Servlet程序
编号:
028003003
2、练习目标
Ø掌握实际开发中Servlet程序的基本实现和使用。
3、需求分析
由于大多数Web应用都是通过HTTP协议和客户端进行交互,且在实际开发servlet中多是编写基于HTTP协议请求的servlet,在Servlet接口中,专门提供了一个抽象类javax.servlet.http.HttpServlet,它是GenericServlet的子类(GenericServlet是Servlet接口的实现类),专门用于创建应用于HTTP协议的Servlet。
为了读者可以更好地了解实际开发中的servle程序实现,本案例将演示如何编写基于HTTP协议请求的servlet。
4、设计思路(实现原理)
1)创建ServletDemo1类继承Httpservlet类,
2)在ServletDemo1中重写开发常用的doGet()方法和doPost()方法并完成处理操作
3)在web.xml中配置初始化参数和类的映射
4)通过浏览器访问ServletDemo1,展现页面servlet处理响应信息。
二、案例实现
编写ServletDemo1,其代码如下:
publicclassServletDemo1extendsHttpServlet{
@Override
protectedvoiddoGet(HttpServletRequestreq,HttpServletResponseresp)
throwsServletException,IOException{
//通过HttpServletResponse对象设置页面响应编码格式
resp.setContentType("text/html;charset=UTF-8");
//得到输出流PrinterWriter对象,Servlet使用输出流来产生响应
PrintWriterprintWriter=resp.getWriter();
//通过PrintWriter对象向页面打印信息
printWriter.write("实现第一个servlet程序");
}
@Override
protectedvoiddoPost(HttpServletRequestreq,HttpServletResponseresp)
throwsServletException,IOException{
doGet(req,resp);
}
}
配置web.xml文件:
ServletDemo1
cn.heima.chapter3.ServletDemo1
ServletDemo1
/ServletDemo1
启动Tomcat服务器,在地址栏中输入http:
//localhost:
8080/chapter03/ServletDemo1,浏览器显示的结果如下图所示:
三、案例总结
实现Servlet程序的步骤:
1)编写一个类继承HttpServlet类(实际开发多数是基于HTTTP协议请求的);
2)覆盖HttpServlet的部分方法,例如,覆盖doGet()或doPost()方法;
3)获取HTTP请求信息。
通过HttpServletRequest对象来检索HTML表单所提交的数据或URL上的查询字符串;
4)生成HTTP响应结果。
通过HttpServletResponse对象生成响应结果,它有一个getWriter()方法,该方法返回一个PrintWriter对象,然后通过write()方法写出响应信息。
注意:
在使用response.getWrite()方法之前必须使用resp.setContentType("text/html;charset=UTF-8");设置响应信息的编码格式,否者页面会出现中文乱码。
案例3-2HttpServlet
一、案例描述
1、考核知识点
名称:
HttpServlet
编号:
028003005
2、练习目标
Ø掌握HttpServlet的doGet()方法和doPost()方法
3、需求分析
由于大多数Web应用都是通过HTTP协议和客户端进行交互,因此,在Servlet接口中,提供了
一个抽象类javax.servlet.http.HttpServlet,它是GenericServlet的子类,专门用于创建应用于HTTP协议的Servlet。
为了读者可以更好地了解HttpServlet,本案例将演示重写HttpServlet中的doGet()方法和doPost()方法打印出九九乘法表。
4、设计思路(实现原理)
查看HttpServlet源代码的service()方法,在方法中可以看到get请求调用doGet()方法,post请求调用doPost()方法,那么就可以直接重写doGet()和doPost()不需要重写service()方法了。
1)编写ServletDemo2类,在doGet()方法和doPost()方法中用双重for循环打印九九乘法表
2)配置web.xml文件
3)编写get.html页面,设置表单提交方式为get,表单页面使用input标签配置一个按钮,单击按钮可以get方式访问ServletDemo2类
4)编写post.html页面,设置表单提交方式为post,表单页面使用input标签配置一个按钮,单击按钮可以post方式访问到ServletDemo2类
5)通过浏览器分别访问get.html和post.html页面,单击其页面上的按钮,对ServletDemo2进行访问
二、案例实现
编写ServletDemo2,其代码如下:
publicclassServletDemo2extendsHttpServlet{
protectedvoiddoGet(HttpServletRequestreq,HttpServletResponseresp)
throwsServletException,IOException{
resp.setContentType("text/html;charset=UTF-8");
resp.getWriter().print("get提交方式
");
for(inti=1;i<=9;i++){
for(intj=1;j<=i;j++){
resp.getWriter().print(j+"*"+i+"="+j*i+"");
}
resp.getWriter().print("
");
}
}
protectedvoiddoPost(HttpServletRequestreq,HttpServletResponseresp)
throwsServletException,IOException{
resp.setContentType("text/html;charset=UTF-8");
resp.getWriter().print("post提交方式
");
for(inti=1;i<=9;i++){
for(intj=1;j<=i;j++){
resp.getWriter().print(j+"*"+i+"="+j*i+"");
}
resp.getWriter().print("
");
}
}
}
配置web.xml文件:
ServletDemo2
ServletDemo2
cn.itcast.chapter03.servlet.ServletDemo2
ServletDemo2
/ServletDemo2
编写get.html文件:
编写post.html文件:
启动Tomcat服务器,在地址栏中输入http:
//localhost:
8080/chapter03/get.html,浏览器显示的结果如下图所示:
单击提交按钮,显示的结果如下图所示:
在地址栏中输入http:
//localhost:
8080/chapter03/post.html,浏览器显示的结果如下图所示:
单击提交按钮,显示的结果如下图所示:
三、案例总结
1.创建HttpServlet的步骤
1)扩展HttpServlet抽象类;
2)覆盖HttpServlet的部分方法,例如,覆盖doGet()或doPost()方法;
3)获取HTTP请求信息。
通过HttpServletRequest对象来检索HTML表单所提交的数据或URL上的查询字符串;
4)生成HTTP响应结果。
通过HttpServletResponse对象生成响应结果,它有一个getWriter()方法,该方法返回一个PrintWriter对象。
2.HttpServlet主要有两大功能,第一是根据用户请求方式的不同,定义相应的doXxx()方法处理用户请求,例如,与GET请求方式对应的doGet()方法,与POST请求方式对应的doPost()方法。
第二是通过service()方法将HTTP请求和响应分别转为HttpServletRequest和HttpServletResponse类型的对象。
需要注意的是,由于HttpServlet类在重写的service()方法中,为每一种HTTP请求方式都定义了对应的doXxx()方法,因此,当定义的类继承HttpServlet后,只需根据请求方式,重写对应的doXxx()方法即可,而不需要重写service()方法。
案例3-3用ServletConfig对象读取配置文件
一、案例描述
1、考核知识点
名称:
ServletConfig接口
编号:
028003008
2、练习