Servlet 1 简介
来源:互联网 发布:打车软件哪个好 编辑:程序博客网 时间:2024/06/05 12:05
一,
1、Servlet (服务器端小程序) 是使用Java语言编程的服务器端程序,可以像JSP一样,生成动态的WEB页,Servlet主要运行在服务器但,并由服务器调用执行,是一种按照Servlet标准开发的类
2、Servlet 程序是Java对CGI程序的实现,但是与传统CGI的多进程处理操作不同的是,Servlet采用了多线程的处理方式,这样就使得Servlet程序的运行效率比传统的CGI更高,而且Servlet还保留有Java的可移植性的特点,
这 样使得Servlet更易使用,功能也更加强大。
3、Applet很相似:应用小程序。
4、之前所编写的JSP程序,基本上还是为了Servlet进行服务,如果说句更专业的话,从JSP发展来看,是先产生了Servlet,之后再产生了JSP,因为Servlet的开发较困难,所以为了JAVA技术可以走得更好,SUN公司向微软学
习了ASP技术的特点,这才有了JSP程序,但是JSP在执行的时候依然是靠*.class 文件执行的,所以JSP骨子里面还是Servlet。
5、 CGI:公共的网管接口,是一组标准,但是传统的CGI采用的是多进程的处理方式,所以性能很差的,而Servlet采用多线程的处理方式,那么性能上是有很大提高的。
二、Servlet处理的基本流程
Servlet程序安装如下步骤进行:
1、客户端(很可能是WEB浏览器) 通过HTTP提出请求
2、WEB服务器接收该请求并将其发送给servlet,如果这个servlet尚未被加载,web服务器将把它加载到java 虚拟机并且执行它。
3、servlet程序接收该HTTP请求并执行某种处理
4、web服务器从servlet收到的应答发回客户端
不管是使用JSP 还是使用servlet所有的程序都是允许在服务器的端上的,所以必须了解一下servlet 的处理流程
servlet 与jsp 一样,需要通过HTTP协议,并且使用web server进行数据的回应。
三、 Servlet程序实现
在整个Servlet程序之中最重要的就是Servlet接口,在此接口下定义一个GenericServlet的子类,但是一般不会直接继承此类,而是根据所使用的协议选择GenericServlet 的子类继承,例如: 现在是采用HTTP 协议处理的,
所以一般而言当需要使用HTTP 协议操作时用户自定义的Servlet 类都要继承HttpServlet类
《Interface》 Servlet <----- GenericServlet <---- HttpServlet < ----- 自定义 Servlet
要想在程序中实现一个Servlet 的话,则必须继承 HttpServlet类,这个类主要是这对于Http 协议而产生的
四、实现要求
1、如果要开发一个处理HTTP 请求的Servlet 程序,肯定是要继承HttpServlet 类, 而且在自定义的Servlet 类中至少还要覆写HttpServlet类中提供的doGet() 方法。
可以在此方法中使用request 和 response 对象
既然是一个类,则肯定需要在WEB-INF/classes 文件夹中进行保存
第一个servlet
- package org.gz.servlet;
- import java.io.*;
- import javax.servlet.*;
- import javax.servlet.http.*;
- /*
- java是基本包在扩展包之前
- 子包写在父包之后
- */
- public class HelloServlet extends HttpServlet {
- public void doGet(HttpServletRequest req,HttpServletResponse resp)
- throws ServletException, IOException {
- PrintWriter out = resp.getWriter();
- out.println("<html>");
- out.println("<head><title></title></head>");
- out.println("<body>");
- out.println("<h1>HelloWorld</h1>");
- out.println("</body>");
- out.println("</html>");
- out.close();
- http://write.blog.csdn.net/postedit/6926949
- }http://write.blog.csdn.net/postedit/6926949
- }
现在希望可以一次性编译成功,但是现在的成功完全依赖于之前的FileUpload 配置的那个开发包
此时一个Servlet 就已经正常的开发完成了,但是,现在此Servlet并不能被外部所访问。因为还缺少了一个配置,这个配置就是映射的配置。即每一个servlet 都必须通过 web.xml 文件进行映射的路径指定。
- <servlet>http://write.blog.csdn.net/postedit/6926949
- <servlet-name>hello</servlet-name>
- <servlet-class>org.gz.servlet.HelloServlet</servlet-class>
- </servlet>
- <servlet-mapping>
- <servlet-name>hello</servlet-name>
- <url-pattern>/helloServlet</url-pattern>
- </servlet-mapping>
以后直接在浏览器中输入helloServlet 就可以进行Servlet程序的访问了
但是,需要注意的是,此时的Tomcat 必须重新启动加载新的配置
http://localhost:8080/demo/helloServlet
现在的程序注意功能是让servlet 作为一个显示层的操作,但是现在的发展势头来看,Servlet基本上不会作为输出页面使用,因为太不方便了,而servlet 以后作为一些中间的控件逻辑层使用
当然,对于servlet 本身还有一个最有意思的特点,即: 可以为一个servlet 配置映射名称,只需要配置多个<servlet-mapping> 即可
- <servlet-mapping>
- <servlet-name>hello</servlet-name>
- <url-pattern>/world/*</url-pattern>
- </servlet-mapping>
一个servlet 可以映射多个名称,尤其是 "*" 这个路径一定要重点理解,表示任意的名称均可,以后讲解struts的时候肯定要发现 * 作用。
Servlet 属于JAVA EE的范畴,而java和javac属于java se的范畴,要想进行编译,必须配合i帧java ee包
——————————————————————————————————————————————
深入了解HttpServlet类中的请求处理方法
掌握表单提交的路径问题处理方法
- package org.gz.servlet;
- import java.io.*;
- import javax.servlet.*;
- import javax.servlet.http.*;
- public class InputServlet extends HttpServlet {
- public void doGet(HttpServletRequest req, HttpServletResponse resp)
- throws ServletException,IOException {
- String info = req.getParameter("info"); //假设参数名称
- PrintWriter out = resp.getWriter();
- out.println("<html>");
- out.println("<head><title>欢迎光临</title></head>");
- out.println("<body>");
- out.println("<h1>" +info+ "</h1>");
- out.println("</body>");
- out.println("</html>");
- out.close();
- }
- }
- <servlet>
- <servlet-name>input</servlet-name>
- <servlet-class>org.gz.servlet.InputServlet</servlet-class>
- </servlet>
- <servlet-mapping>
- <servlet-name>input</servlet-name>
- <url-pattern>/servletdemo/doGet</url-pattern>
- </servlet-mapping>
- <html>
- <head> <title>欢迎光临</title>
- </head>
- <body>
- <form action="/servletdemo/doGet" method="get">
- 请输入内容: <input type="text" name="info">
- <input type="submit" value="提交">
- </form>
- </body>
- </html>
http://localhost:8080/demo/servletdemo/ 找到表单当前的目录 ——> 再点击表单 ----> 输入内容 即可得到 (表单当前目录名称和配置url-pattern重名 例外)
HTTP Status 405 - HTTP method POST is not supported by this URL 出现40开头的一般是客户端错误 此错误是Servlet只覆写了duGe()t方法,没有覆写doPost() 方法
所以只可以在表单中出现 method="get" 请求 不能出现method="post" 请求
Servlet 生命周期
掌握Servlet 生命周期及其对应方法
掌握web.xml 文件对生命周期的控制
生命周期: 是一个程序的存在周期,Servlet 由于是受容器的管理,所以容器来决定其生命周期
1、Servlet 程序是运行在服务器端的一段java 程序,其生命周期将受到web 容器的控制,生命周期包括: 加载程序、初始化、服务、销毁、卸载五个部分
Servlet 生命周期对应的方法
1、public void init() throws ServletException 类型--> 普通 描述----> Servlet 初始化调用2、public void init(ServletConfig config) throws ServletException 类型——> 普通 描述—> Servlet初始化时调用,可以通过ServletConfig读取配置信息
3、public abstract void service(ServletRequest req, ServletResponse res) throws ServletException, IOException 类型 ---> 普通 描述 ---> Servlet服务,一般不会直接覆写此方法,
而 是使用doGet() 或 doPost() 方法
4、public void destroy() 描述 ---> Servlet 销毁时调用
下面是一个基本生命周期编写程序
- package org.gz.servlet;
- import java.io.*;
- import javax.servlet.*;
- import javax.servlet.http.*;
- public class LifeCycleServlet extends HttpServlet {
- public void init() throws ServletException {
- System.out.println("***1、Servlet 初始化--->init()");
- }
- public void doGet(HttpServletRequest req, HttpServletResponse resp)
- throws ServletException,IOException {
- System.out.println("***2、Servlet 服务--->doGet()和doPost()");
- }
- public void doPost(HttpServletRequest req, HttpServletResponse resp)
- throws ServletException,IOException {
- this.doGet(req,resp);
- }
- public void destroy() {
- System.out.println("***3、Servlet的销毁 --->destroy()"); //ctrl +C 快捷键 进行关闭
- try
- {
- Thread.sleep(3000);
- }
- catch (Exception e)
- {
- }
- }
- /* public void service(ServletRequest req,ServletResponse res)
- throws ServletException,IOException { // 运行此程序doGet()、doPost()方法 就没有作用了
- System.out.println("******** service服务 *******");
- }
- */
- }
- <servlet>
- <servlet-name>Life</servlet-name>
- <servlet-class>org.gz.servlet.LifeCycleServlet</servlet-class>
- </servlet>
- <servlet-mapping>
- <servlet-name>Life</servlet-name>
- <url-pattern>/LifeServlet</url-pattern>
- </servlet-mapping
对于HttpServlet 类而言,里面的services() 方法主要功能是区分get 请求还是post 请求,如果get请求则调用doGet()方法,如果是post 请求,则调用doPost()方法,但是一旦在子类中覆写之后,则没了此种区分能力,所以doGet和doPost方法都失效了。
实际上,这种做法更像是一种设计的模板操作,因为只需要按照它的要求将方法覆写完成了,那么就可以失效相应的功能
当然,还有一点需要注意的是,在正常情况下初始化方法是在servlet 第一次使用的时候才调用,如果现在希望容器启动的时候servlet 直接进行初始化操作的话,则可以在 web.xml 中增加一个相应的配置参数,表示的是当容器启动的时候进行加载
- <servlet>
- <servlet-name>Life</servlet-name>
- <servlet-class>org.gz.servlet.LifeCycleServlet</servlet-class>
- <span style="color:#FF0000;"><load-on-startup>1</load-on-startup></span>
- </servlet>
- 信息: Starting service Catalina
- 2011-11-3 0:23:28 org.apache.catalina.core.StandardEngine start
- 信息: Starting Servlet Engine: Apache Tomcat/6.0.18
- <span style="color:#FF0000;">***1、Servlet 初始化--->init()</span>
- 2011-11-3 0:23:29 org.apache.coyote.http11.Http11Protocol start
- 信息: Starting Coyote HTTP/1.1 on http-8080
- Servlet 1 简介
- 【Servlet】(1)Servlet简介、Servlet底层原理、Servlet实现方式、Servlet生命周期
- Servlet简介
- Servlet 简介
- Servlet简介
- Servlet 简介
- Servlet简介
- servlet 简介
- Servlet 简介
- Servlet简介
- Servlet简介
- Servlet简介
- Servlet 简介
- servlet简介
- Servlet简介
- servlet简介
- Servlet简介
- Servlet简介
- 54款开源服务器软件(内容管理、数据库、电子商务、邮件服务器、文件传输、操作系统、安全、小公司服务
- 推荐三十款最好的免费项目管理软件
- WAS问题解决思路预研
- 什么是分辨率?分辨率和像素的关系?
- 面试问题收集
- Servlet 1 简介
- uva-10916 - Factstone Benchmark
- Epub格式的电子书——文件组成
- 千帆过尽----生命的四分之一纪年
- window.XMLHttpRequest详解(AJAX工作原理)
- 配置Log shipping失败Could not retrieve copy settings for secondary ID
- 英语词汇8
- 解决“ORA-01795” 问题的方法,即如何组装In条件的语句
- Servlet 2 init session application