您好,欢迎来到化拓教育网。
搜索
您的当前位置:首页Servlet技术(Servlet)

Servlet技术(Servlet)

来源:化拓教育网
第二章 Servlet技术

一、Servlet API

1、Java Servlet特点:(1)不是的应用程序,没有main()方法。(2)没有图形界面,不是由用户或程序员直接调用,而是生存在容器中,由容器管理。(3)有生命周期,包含init()和destroy()方法。

2、要编写一个Servlet,需要实现javax.servlet.Servlet接口。该接口有如下5个方法:

(1)init():方法中有一个类型为ServletConfig的参数,Servlet容器通过这个参数向Servlet传递配置信息;Servlet使用ServletConfig对象从Web应用程序的配置信息中获取以名-值对形式提供的初始化参数;在Servlet中,还可以通过ServletConfig对象获取描述Servlet运行环境的ServletContext对象,使用该对象,Servlet可以和它的Servlet容器进行通信。

(2)service():容器调用service()方法来处理客户端的请求。

(3)destroy():Servlet对象可以释放它所使用的资源,保存数据到持久存储设备中;之后容器会释放这个Servlet对象,在随后的时间里,该对象会被Java的垃圾收集器所回收。

(4)getServletConfig():返回容器调用init()方法时传递给Servlet对象的ServletConfig对象,ServletConfig对象包含了Servlet的初始化参数。

(5)getServletInfo():返回一个String类型的字符串,其中包含了关于Servlet的信息,例如作者,版本和版权。

3、Servlet由Servlet容器来管理,当客户请求到来时,容器创建一个ServletRequest对象,封装请求数据,同时创建一个ServletResponse对象,封装响应数据。这两个对象将被容器作为service()方法的参数传递给Servlet,Servlet利用ServletRequest对象获取客户端发来的请求数据,利用ServletResponse对象发送响应数据。

4、java.lang.IllegalStateException是java.lang.RuntimeException的子类。对于RuntimeException及其派生的异常是由Java运行系统自动抛出并自动处理,不需要我们去捕获,所以也就不需要在函数声明时声明抛出异常了。

5、Servlet容器使用ServletConfig对象在Servlet初始化期间向它传递配置信息,一个Servlet只有一个ServletConfig对象。

6、javac -d<目录>:指定存放生成的类文件的位置,如:javac -d . Hello.java意思为在当前目录生成类文件。

7、在编译源文件时,注意设置classpath环境变量的值,即指定servlet-api.jar。

8、Servlet是Web应用程序中的一个组件。一个Web应用程序是由一组Servlet、HTML、类,以及其他的资源组成的运行在Web服务器上的完整地应用

程序,以一种结构化的有层次的目录形式存在。

9、根目录代表了整个Web应用程序的根,也称为Web应用程序的上下文根。 10、在Servlet容器运行时,Web应用程序的类加载器首先加载classes目录下的,其次才是lib目录下的类。

11、WEB-INF并不属于Web应用程序可以访问的上下文路径的一部分,对客户端来说,这个目录是不可见的。

12、WEB-INF目录下的内容对于Servlet代码是可见的,在Servlet代码中可以通过调用ServletContext对象中的getResource()或者getResourceAsStream()方法来访问WEB-INF目录下的资源,也可以使用RequestDispatcher调用将WEB-INF目录下的内容呈现给客户端。

13、元素用于声明Servlet。

子元素用于指定Servlet的名字(一个Web应用程序中需唯一且不能为空)。

子元素用于指定Servlet类的完整限定名(如果有包名,要同时给出包名)。

14、元素用于在Servlet和URL样式之间定义一个映射。

子元素指定的Servlet名字必须和Servlet元素中子元素给出的名字相同。

子元素用于指定对应于Servlet的URL路径,该路径是相对于Web应用程序上下文根的路径。

15、%CATALINA_HOME%\\webapps\\ROOT目录是Tomcat默认的Web应用程序的起始路径。

16、Telnet协议是TCP/IP协议族中的一员,是Internet远程登陆服务的标准协议和主要方式。它为用户提供了在本地计算机上完成远程主机工作的能力。在终端使用者的电脑上使用telnet程序,用它连接到服务器。终端使用者可以在telnet程序中输入命令,这些命令会在服务器上运行,就像直接在服务器的控制台上输入一样。可以在本地就能控制服务器。要开始一个telnet会话,必须输入用户名和密码来登录服务器。Telnet是常用的远程控制Web服务器的方法。

17、Web应用程序的开发分为设计开发与配置部署两个阶段。 18、类 PrintWriter向文本输出流打印对象的格式化表示形式。

19、ServletResponse.getWriter():Returns a PrintWriter object that can send character text to the client.

20、为了简化Servlet的编写,在javax.servlet包中提供了一个抽象的类GenericServlet,它给出了除service()方法外的其他4个方法的简单实现。GenericServlet类定义了一个通用的、不依赖于具体协议的Servlet,它实现了Servlet接口和ServletConfig接口。

21、在GenericServlet类中,定义了两个重要的init()方法:init(ServletConfig config)和init()。第一个init()方法时Servlet接口中init()方法的实现。在这个方法中,首先将ServletConfig对象保存在一个transient实例变量中,然后调用第二个不带参数的init()方法。通常,我们只需要重写第二个不带参数的init()方法即可。如果覆盖了第一个init()方法,那么应该在子类的该方法中,包含一句super.init(config)代码的调用。

22、Javax.servlet.http包中的HttpServlet继承自GenericServlet类,

用于创建适合Web站点的HTTP Servlet。

23、HttpServlet类中提供了两个重载的方法:service(ServletRequest req,ServletResponse)和service(HttpServletRequest req,HttpServletResponse)。第一个service()方法是GenericServlet类中service()方法的实现。在这个方法中,首先将req和res对象转换为HttpServletRequest req和HttpServletResponse类型,然后调用第二个service方法,对客户请求进行处理。

24、针对HTTP1.1中定义的7种请求方法:GET,POST,HEAD,PUT,DELETE,TRACE和OPTIONS,HttpServlet分别定义了7个处理的方法: doGet(HttpServletRequest req,HttpServletResponse)

doPost(HttpServletRequest req,HttpServletResponse) doHead(HttpServletRequest req,HttpServletResponse) doPut(HttpServletRequest req,HttpServletResponse) doDelete(HttpServletRequest req,HttpServletResponse) doTrace(HttpServletRequest req,HttpServletResponse) doOption(HttpServletRequest req,HttpServletResponse)

25、在保护的service()方法中,首先调用HttpServletRequest对象的getMethod()方法,获取请求方法的名字,然后根据请求方法的类型,调用相应的doXxx()方法。因此我们在编写HttpServlet的派生类时,通常不需要去覆盖service()方法,而只需重写相应的doXxx()方法。

26、ServletRequest.getProtocol():Returns the name and version of the protocol the request uses in the form protocol/majorVersion.minorVersion, for example, HTTP/1.1.

二、几个实例

1、web.xml中的映射与form中的action的关系。

2、GenericServlet.getInitParameter():Returns a String containing the value of the named initialization parameter, or null if the parameter does not exist。(与XML文档对应)

例如:xml文档中为:

初始化参数名 实例化参数的值

在Servlet中要获得该参数的值可以:

String str=GenericServlet对象.getInitParameter(\"初始化参数名\") 3、GenericServlet.getInitParameter(String name)等同于GenericServlet.getServletConfig().getInitParameter(String name)。

4、ServletRequest.setCharacterEncoding:Overrides the name of the character encoding used in the body of this request. This method must be called prior to reading request parameters or reading input using

getReader().

5、ServletRequest.getParameter(String name):Returns the value of a request parameter as a String, or null if the parameter does not exist. Request parameters are extra information sent with the request. For HTTP servlets, parameters are contained in the query string or posted form data.

6、ServletResponse.setContentType(String type):Sets the content type of the response being sent to the client, if the response has not been committed yet.

7、采用get方法提交表单,和我们直接在浏览器的地址栏中输入附加了查询字符串的URL的效果是一样的。

8、一旦修改了Servlet类,要记着重新启动Tomcat。

9、HttpServletRequest.getHeaderNames():Returns an enumeration of all the header names this request contains. 返回的类型为:Enumeration。

10、HttpServletRequest.getHeader(String name):Returns the value of the specified request header as a String。

11、Enumeration.hasMoreElements():Tests if this enumeration contains more elements。

12、(枚举集合)Enumeration.nextElement():Returns the next element of this enumeration if this enumeration object has at least one more element to provide(返回Object对象)。

13、ServletRequest.getRemoteAddr():Returns the Internet Protocol (IP) address of the client or last proxy that sent the request。

14、ServletRequest.getRemotePort():Returns the Internet Protocol (IP) source port of the client or last proxy that sent the request。

15、ServletRequest.getLocalAddr():Returns the Internet Protocol (IP) address of the interface on which the request was received。

16、ServletRequest.getLocalPort():Returns the Internet Protocol (IP) port number of the interface on which the request was received。

17、PrintWriter对象使用默认的字符编码ISO-8859-1。

18、HttpServletResponse.sendRedirect(String location):Sends a temporary redirect response to the client using the specified redirect location URL。

19、HttpServletResponse.sendError(int sc,String msg):Sends an error response to the client using the specified status code and clearing the buffer。

(参数中sc存在值为SC_SERVICE_UNAVAILABLE,msg为“服务器忙,请稍后再登陆”,告诉用户“服务器忙,请稍后再登陆”。)

三、Servlet异常

1、在javax.servlet包中定义了两个异常类,ServletException和UnavailableException。

2、ServletException类定义了一个通用的异常,可以被init()、service()

和doXxx()方法抛出。

3、ServletException类中getRootCause()返回引起这个Servlet异常的异常,也就是返回根原因的异常。

4、UnavailableException类是ServletException的子类,该异常被Servlet抛出,用于向Servlet容器指示出这个Servlet永久或者暂时的不可用。

5、UnavailableException类中getUnavailableSeconds()方法返回Servlet预期的暂时不可用的秒数。如果返回一个负数,表明Servlet永久不可用或者不能估计出Servlet多长时间不可用。

6、UnavailableException类中isPermanent()方法返回一个布尔值,用于指示Servlet是否是永久不可用。

四、Servlet生命周期

1、Servlet的生命周期通过javax.servlet.Servlet接口中的init()\\service()和destroy()方法来表示。

2、Servlet的生命周期包含4个阶段:

(1)加载和实例化:Servlet容器负责加载和实例化Servlet。当Servlet容器启动后,它必须要知道所需要的Servlet类在什么位置,Servlet容器可以从本地文件系统、远程文件系统或者其他的网络服务中通过类加载器加载Servlet类,成功加载后,容器创建Servlet实例。因为容器是通过Java的反射API来创建Servlet实例,调用的是Servlet的默认构造方法(即不带参数的构造方法),所以我们在编写Servlet类的时候,不应该提供带参数的构造方法。

(2)初始化:初始化的目的是为了让Servlet对象在处理客户端请求前完成一些初始化工作。

(3)请求处理:要注意的是,在service()方法调用之前,init()方法必须成功执行。如果UnavailableException异常指示了该实例永久不可用,Servlet容器将调用destroy()方法,释放该实例。

(4)服务终止

3、当初始化完成后,Servlet容器会将该实例保存在内存中。 4、如果需要让Servlet容器在启动时即加载Servlet,可以在web.xml文件中配置元素。

五、Servlet上下文

1、Java Servlet API提供了一个ServletContext接口用来表示上下文。 2、Servlet容器提供ServletContext接口的实现。

3、一个ServletContext对象表示了一个Web应用程序的上下文。

4、Servlet可以通过ServletConfig对象的getServletContext()方法来得到ServletContext对象。

5、也可以通过GenericServlet类的getServletContext()方法得到ServletConfig对象,不过GenericServlet类的getServletContext()方法也是调用ServletConfig对象的getServletContext()方法来得到这个对象的。

6、ServletContext.getAttribute(String name):Returns the servlet container attribute with the given name, or null if there is no attribute by that name.

7、当用户通过浏览器请求一个页面时,Web应用程序先查找web.xml中是否有同名的Servlet,如果有就执行相应的Servlet,如果没有,才执行相应的页面(如HTML页面)。

六、请求转发

1、这种调度员的角色通常由Servlet充当,我们把这样的Servlet叫做控制器(Controller)。在控制器中,可以将请求转发(request dispatching)给另外一个Servlet或JSP页面,甚至是静态的HTML页面。(接口:javax.servlet.RequestDispatcher)

2、RequestDispatcher对象由Servlet容器创建,用于封装一个由路径所标识的服务器资源。

3、得到RequestDispatcher对象的三种方法:(1)ServletRequest中的getRequestDispatcher(String path) (2)ServletContext接口中的getNamedDispatcher(String name)和getRequestDispatcher(String path)方法。

(ServletContext接口中的getRequestDispatcher(String path)方法的参数必须以斜杠开始,被解释为相对于当前上下文根的路径。ServletRequest中的getRequestDispatcher(String path)方法的参数不但可以是相对于上下文根的路径,而且可以是相对于当前Servlet的路径。ServletContext接口中的getNamedDispatcher(String name)方法则是以在部署描述符中给出的Servlet(或JSP页面)的名字作为参数。)

4、RequestDispatcher中forward()方法和include()方法的区别:利用include()方法将请求转发给其他的Servlet,被调用的Servlet对该请求做出的响应将并入原先的响应对象中,原先的Servlet还可以继续输出响应信息。而利用forward()方法将请求转发给其他的Servlet,将由被调用的Servlet负责对请求做出响应,而原先Servlet的执行将终止。

5、ServletContext.getContext(String uripath):Returns a ServletContext object that corresponds to a specified URL on the server.

6、HttpServletResponse接口中的sendRedirect()方法和RequestDispatcher接口中的forward()方法都可以利用另外的资源来为客户端进行服务。区别在于:sendRedirect()调用后显示的URL是重定向的URL;而forward()调用后对浏览器来说是透明的,浏览器并不知道重定向的URL,显示的URL始终是原始请求的URL)。

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- huatuo9.cn 版权所有 赣ICP备2023008801号-1

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务