Servlet部分笔记1.docx
《Servlet部分笔记1.docx》由会员分享,可在线阅读,更多相关《Servlet部分笔记1.docx(15页珍藏版)》请在冰豆网上搜索。
Servlet部分笔记1
Servlet是位于Web服务器内部的服务器端的Java应用程序,与传统的从命令行启动的Java应用程序不同,Servlet由Web服务器进行加载,该Web服务器必须包含支持Servlet的Java虚拟机。
*它们不是独立的应用程序,没有main()方法。
*它们不是由用户或程序员调用,而是由另外一个应用程序(容器)调用。
*它们都有一个生存周期,包含init()和destroy()方法。
要使用Servlet,必须导入包servlet-api.jar。
这里使用的服务器是Tomcat,其主目录结构为:
|-bin:
用于存放可执行命令(catalina.sh)
|-conf:
用于存放tomcat需要的配置文件.
|-lib:
存放tomcat在运行时要用到的类文件(jsp-api.jar、servlet-api.jar、...).
|-webapps:
最重要的一个目录,其下放置各种Servlet文件、网页文件(JSPHTML...)、
配置文件以及资源文件.此目录的结构:
|-应用目录(比如是一个学生管理网站,就在webapps文件夹下建一个StudentManage目录)
|-WEB-INF目录
|-classes目录,放置所有的Servlet文件或其他类文件
|-lib目录,放置本应用所要用到的类文件(jar包)
|-web.xml配置文件
|-资源文件(比如图片),网页文件(JSPHTML...)
|-logs:
日志文件.
|-work:
内部临时文件.
|-temp:
临时文件.
安装tomcat环境变量的配置,和配jdk差不多servlet-api.jar;jsp-api.jar
1Servlet接口、GenericServlet类、HttpServlet类:
Servlet是最顶层的接口,其提供的方法有:
init(ServletConfigconfig):
void//初始化
getServletConfig():
ServletConfig//取得该Servlet配置信息
getServletInfo():
String//取得相关信息
service(ServletRequestreq,ServletResponseres):
void//核心方法
destroy():
void//Servlet生命周期结束时候执行的方法
显然我们最关心的是service方法,其他的几个方法在实现的时候是千篇一律、无关痛痒的。
故提
供了GenericServlet类,此类实现了Servlet接口,我们在使用Servlet的时候,只需继承这个类然后
覆盖其中的service方法(抛出ServletException、IOException异常)即可。
由于Servlet基本上是在http协议下使用的,故提供了HttpServlet这个类,此类继承自
GenericServlet类,我们在使用Servlet时,只需继承HttpServlet类然后覆盖以下方法:
service(HttpServletRequestrequest,
HttpServletResponseresponse)
throwsServletException,IOException:
void
注意:
HttpServletRequest和HttpServletResponse分别是从ServletRequest和ServletResponse继承
此外,HttpServlet还提供了doPost和doGet方法,参数和返回值与service方法一样。
只是service
方法可以针对客户端的任何请求类型(GET和POST),而doPost和doGet方法分别只能对应客户端的POST方式
请求和GET方式的请求。
HttpServlet-----extendsGenericServlet----implementsServlet
2使用GenericServlet实例:
packagecom.kettas.servlet;
importjavax.servlet.*;
importjava.io.*;
publicclassGenDateServletextendsGenericServlet{
@Override
publicvoidservice(ServletRequestrequest,ServletResponseresponse)
throwsServletException,IOException
{response.setContentType("text/html");//设置响应内容类型
PrintWriterout=response.getWriter();//获得文本写入流
//给客户端回应的html文本
out.println("");
out.println("
");
out.println("
HelloServlet!
");
out.println("");
out.println("");
out.flush();//刷新写入
}}
配置文件web.xml如下:
xmlversion="1.0"encoding="UTF-8"?
>
xmlns:
xsi="http:
//www.w3.org/2001/XMLSchema-instance"
xsi:
schemaLocation="
version="2.5">
//Servlet文件路径
query
com.kettas.servlet.GenDateServlet
//指定映射,说明在浏览器中输入".../query"则对应当前Servlet
query
/query
3使用HttpServlet简单实例:
packagecom.kettas.servlet;
importjavax.servlet.*;
importjavax.servlet.http.*;
importjava.io.*;
publicclassLoginServletextendsHttpServlet{
@Override
publicvoidservice(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException
{response.setContentType("text/html;charset=GB2312");//注意设置编码的方式
request.setCharacterEncoding("GB2312");
PrintWriterout=response.getWriter();
//取得客户端提交的数据
Stringname=request.getParameter("userName");
Stringpwd=request.getParameter("password");
out.println("");
out.println("
");
out.println("
");
out.println("Name:
"+name+""+"Password:
"+pwd);
out.println("");
out.println("");
out.println("");
out.flush();
}}
配置文件web.xml片段:
login
com.kettas.servlet.LoginServlet
login
/login
4请求转发:
实现不同servlet之间的数据传递,这样便可实现业务逻辑和显示逻辑的分离
实例:
(1)第一个servlet,负责业务
packagecom.kettas.servlet;
importjavax.servlet.*;
importjavax.servlet.http.*;
importjava.io.*;
importjava.util.*;
publicclassForwardAextendsHttpServlet{
@Override
publicvoidservice(HttpServletRequestrequest,HttpServletResponseresponse)
throwsServletException,IOException
{System.out.println("===ThisisforwardA===");
//将业务部分的数据存储在request对象中,传递给下一个servlet使用
Dated=newDate();
request.setAttribute("date",d);
/*注意转发的过程
*首先获得一个知道下一棒地址的"接力棒"对象,然后将这个"接力棒"传给下一个
*servlet,这样便将请求转发了。
*/
RequestDispatcherdisp=request.