Servlet简介

Java Servlet是和平台无关的服务器端组件,它运行在Servlet容器中。Servlet容器负责Servlet和客户的通信以及调用Servlet的方法,Servlet和客户的通信采用“请求/响应”的模式。

Servlet可以完成的功能:

  1. 创建并返回基于客户请求的动态HTML页面。
  2. 创建可嵌入到现有HTML页面中的部分HTML页面(HTML片段)。
  3. 与其他服务器资源(数据库或基于JAVA的应用程序)进行通信。

Servlet容器响应客户请求的过程:

          ——请求——>>        ———ServletRequest——>>

      客户        Servlet容器                Servlet

          <<——响应——        <<——ServletResponse——

Servlet的HelloWorld

1、创建一个Servlet接口的实现类。

    public class HelloServlet implements Servlet{重写里面的方法}

2、在web.xml文件中配置和映射这个Servlet

    注:同一个Servlet可以被映射到多个URL上,即多个<servlet-mapping>元素的<servlet-name>子元素的设置可以使同一个Servlet注册名

      在Servlet映射到的URL中也可以使用*通配符,但是只能有两种固定的格式:一种格式是“ *.扩展名 ”,另一种可是是以正斜杠(/)开头并以(*)结尾--(/*)

3、Servlet容器:运行Servlet、JSP、Filter等的软件环境。

  可以创建Servlet,并调用Servlet的相关生命周期方法

  JSP,Filter,Listener,Tag.....

4、Servlet   生命周期的方法:

   构造器:第一次请求Servlet时,创建Servlet的实例,调用构造器。(这说明Serlvet是单实例的)

   init方法:只被调用一次,在创建好实例后立即被调用,用于初始化当前Servlet

   service:被多次调用,每次请求都会调用service方法,实际用于响应请求。

   destroy:只被调用一次,在当前Servlet所在的WEB应用被卸载前调用,用于释放当前Servlet所占用的资源。

5、load-on-startup参数:

  配置在servlet节点中: 

<servlet>
<servlet-name>Secondservlet</servlet-name>
<servlet-class>com.ttzzyy.tzy.SecondServlet</servlet-class>
<load-on-startup>2</load-on-startup>
</servlet>

  load-on-startup:可以指定Servlet被创建的时机。若为负数,则在第一次请求时被创建,若为0或正数,则在当前WEB应用被Servlet容器加载时创建实例,且数值越小越早被创建。

 6、ServletConfig(初始化参数只有配置的那个Servlet才能获取)

公有接口 ServletConfig

一个用于在初始化时为servlet传送信息servlet容器的servlet配置对象

配置信息包括:初始化参数(一系列的名字/数值对),和一个 ServletContext 对象(它给出了servlet关于服务器的信息)

java.lang.String getInitParameter(java.lang.String name)
          返回一个包含给定名字的初始化参数,若此参数不存在就返回一个空值。
 java.util.Enumeration getInitParameterNames()

          返回context的初始化参数的名字
,用一个字符串对象枚举变量的形式。如果相应的context没有初始化参数,则就返回一个空的枚举变量。
 ServletContext getServletContext()

          返回一个servlet正在内中执行的 ServletContext 的参考。
 java.lang.String getServletName()

          返回该servlet实例的名称。

  <servlet>

<servlet-name>helloservlet</servlet-name>
<servlet-class>com.ttzzyy.tzy.HelloServlet</servlet-class>
<!-- 配置Servlet的初始化参数,且节点必须在 load-on-startup节点前面-->
<init-param>
<!-- 参数名 -->
<param-name>user</param-name>
<!-- 参数值 -->
<param-value>root</param-value>
</init-param>
<init-param>
<param-name>password</param-name>
<param-value>1230</param-value>
</init-param>

<load-on-startup>-1</load-on-startup>

</servlet>

7、ServletContext(初始化参数可以为所有的Servlet所获取)

  Servlet引擎为每个WEB应用程序都创建一个对应的ServletContext对象,ServletContext对象被包含在ServletConfig对象中,调用

   ServletConfig.getServletContext方法可以返回ServletContext对象的引用.

   由于一个WEB应用程序中所有的Servlet对象被称之为application对象(Web应用程序对象)。

  可以由ServletConfig获取

    该对象代表当前WEB应用:可以认为Servlet是当前WEB应用的一个大管家,可以从中获取到当前WEB应用的各方面的信息。

 java.lang.String getInitParameter(java.lang.String name)
          返回一个包含给定名字的context-wide 初始化参数,若此参数不存在就返回一个空值。
 java.util.Enumeration getInitParameterNames()

          返回context的初始化参数的名字
,用一个字符串对象枚举变量的形式。如果相应的context没有初始化参数,则就返回一个空的枚举变量。 

<context-param>
<param-name>driver</param-name>
<param-value>com.mysql.jdbc.Driver</param-value>
</context-param>
<context-param>
<param-name>jdbcUrl</param-name>
<param-value>jdbc:mysql:///tzy</param-value>
</context-param>

 8、GET请求和POST请求

使用GET方式传递参数:

在浏览器地址栏中输入某个URL地址或单机网页上的一个超链接时,浏览器发出HTTP请求消息的请求方式为GET。

如果网页中的<form>表单元素的method属性被设置为“GET”,浏览器提交这个FORM表单时生成的HTTP请求消息的请求方式也为GET。

使用GET请求方式给WEB服务器传递参数的格式:http://www.XXX.com/counter.jsp?name=abs&password=123

使用GET方式传送的数据量一般限制在1KB以下。

使用POST方式传递参数:

POST请求方式主要用于向WEB服务器端程序提交FORM表单中的数据:form表单method置为POST

POST方式将各个表单字段元素及其数据作为HTTP消息实体内容发送给WEB服务器,传送的数据量要比使用GET方式传送的数据量大得多。

9、如何在Servlet中获取请求信息:

public void service(ServletRequest arg0, ServletResponse arg1) throws ServletException, IOException {}

ServletRequest:封装了请求信息,可以从中获取到任何请求信息。

ServletResponse :封装了响应信息,如果想给用户什么响应,具体可以使用该接口的方法实现。

这两个接口的实现类都是服务器给予实现的,并在服务器调用service方法时传入。

java.lang.String getParameter(java.lang.String name) 
          返回一个请求参数的字符串值。若该参数不存在,则返回一个空值。
 java.util.Enumeration getParameterNames() 
          返回一个包含了请求中的参数名字的字符串对象的枚举变量。
 java.lang.String[] getParameterValues(java.lang.String name) 
          返回一个包含所有的给定请求参数的值的字符串对象的向量。若该参数不存在,则返回一个空值。 
Map getParameterMap() 
          返回请求参数的键值对:key:参数名;value:参数值,String数组类型

http://localhost:8080/tzytzy/loginServlet?user=asd&password=123&interesting=reading&interesting=game&interesting=party

 注:获取请求的方式:HttpServletRequest是ServletRequest的子接口,针对于HTTP请求所定义。里边包含了大量获取HTTP 请求的方法.

获取请求的URI

HttpServletRequest httpServletRequest = (HttpServletRequest) request;
String requestURI = httpServletRequest.getRequestURI();
System.out.println(requestURI);

获取请求的方式:

String method = httpServletRequest.getMethod();
System.out.println(method);//GET

获取请求参数对应的那个字符串,即?后的那个字符串(POST方法获取为null)

String queryString = httpServletRequest.getQueryString();
System.out.println(queryString);//user=asd&password=123&interesting=reading&interesting=game&interesting=party

获取请求的Servlet的映射路径

System.out.println(httpServletRequest.getServletPath());   //        /loginServlet

 和属性相关的方法:

 java.lang.Object getAttribute(java.lang.String name)
          返回具有给动名字的 servlet container 的属性,或者当没有具有所给名字的属性时,返回一个空值。 
 java.util.Enumeration getAttributeNames()
          返回一个包含servlet context中属性名字变量的集合.
void setAttribute(java.lang.String name, java.lang.Object o)
          存储一个请求消息中的属性。 
void removeAttribute(java.lang.String name)
          从请求消息中删除一个属性。

注:pageContext,request,session,application对象都有这些方法   这四个对象也称之为域对象

 pageContext:属性的作用范围仅限于JSP页面

 request:属性的作用范围仅限于是同一个请求

 session:属性的作用范围仅限于是一次会话:浏览器打开到关闭称之为一次会话(在此期间会话不失效)

application:属性的作用范围仅限于当前WEB应用.  是范围最大的属性作用范围,只要在一处设置属性,在其他各处的JSP或Servlet中都可以获取到.

应答:ServletResponse

getWrite:返回PrintWriter对象,调用该对象的print()方法,将把print()中的参数直接打印到客户的浏览器上。

PrintWriter writer = response.getWriter();
writer.println("Helloworld");

设置响应的内容类型:response.setContentType("application/msword");这个是下载文件word

请求的重定向:****sendRedirect(java.lang.String location) 用指定的重定位URL向客户端发送一个临时重定位响应消息。****(此方法为HttpServletResponse中定义)

10、GenerivServlet:

是一个Servlet。是Servlet接口和ServletConfig接口的实现类。但它是一个抽象类,其中Servlice方法为抽象方法

如果新建的Servlet程序直接继承了GenericServlet会使开发更简洁

具体实现:

  在GenericServlet中声明一个ServletConfig类型的成员变量,在init(ServletConfig)方法中对其进行初始化

  利用ServletConfig成员变量的方法实现了ServletConfig接口的方法

  还定义了一个init()方法,在init(ServletConfig)方法中对其进行调用,子类可以直接覆盖inti()在其中实现对Servlet的初始化

  不建议直接覆盖init(ServletConfig),因为如果忘记编写super(ServletConfig),而还是用了ServletConfig接口的方法,则会抛出空指针异常

11、强大的HttpServlet

是一个Servlet,继承自GenericServlet,针对于HTTP协议所定制。

在Service()方法中直接把ServletRequest和ServletResponse转为HttpServletRequest和HttpServletResponse并调用了重载service(HttpServletRequest,HttpServletResponse).

实际开发中,直接继承HttpServlet,并根据请求方式复写doxxx()方法接口,

好处:直接由针对性的覆盖doxxx()方法。直接使用HttpServletRequest和HttpServletResponse,不再需要强转。

请求的转发和重定向

本质区别:请求的转发只发出了一次请求,而重定向则发出了两次请求,

1、请求的转发:地址栏是初次发出请求的地址。

      请求的重定向:地址栏不再是初次发出请求的地址,地址栏为最后响应的那个地址

2、请求转发:在最终的Servlet中,request对象和中转的那个request是同一个对象

   请求的重定向:在最终的Servlet中,request对象和中转的那个request不是同一个对象。

3、请求的转发:只能转发给当前WEB应用的资源

   请求的重定向:可以定向到任何资源。

4、请求的转发:JSP---》request.getRequestDispatcher("/c.jsp").forward(request, response)

      Servlet---》

//调用HttpServletRequest的getRequestDispathcher()方法获取RequestDispathcher对象
//调用getRequestDispathcher()需要传入要转发的地址
String path = "testServlet";
RequestDispatcher requestDispatcher = request.getRequestDispatcher("/"+path);
requestDispatcher.forward(request, response);

  请求的重定向:JSP---》response.sendRedirect("c.jsp");

      Servlet---》

//执行请求的重定向,直接调用response.sendRedirect(path)方法
//其中PATH为要重定向的地址
String path = "testServlet";
response.sendRedirect(path);

注:请求的转发:/代表的是当前WEB应用的根目录      请求的重定向:如果加/   代表的是当前WEB站点的根目录(如:localhos:8080)

引入servlet概念的更多相关文章

  1. DNS,TCP,IP,HTTP,socket,Servlet概念整理

    DNS,TCP,IP,HTTP,socket,Servlet概念整理   常见的协议虽然很容易理解,但是看了之后过一段时间不看还是容易忘,笔记如下,比较零碎,勉强供各位复习.如有错误欢迎指正.   D ...

  2. TOMCAT ---> servlet概念

    1 TOMCAT ---> servlet概念 2 TOMCAT 目录结构 (各个文件夹都存放什么东西) 3 TOMCAT 程序的层级 web | |---- js,jsp,html,css ( ...

  3. servlet篇 之 servlet概念及其功能实现

    Servlet概念: 在JavaWeb中,把那些可以使用浏览器通过url的形式来访问的java类,叫做servlet. servlet就是java类中的一种,只不过这种java类有一个特殊的功能,就是 ...

  4. 为什么k8s引入pod概念?

    为什么k8s引入pod概念? 1.可管理性 有些容器天生需要紧密关联,以pod为最小单位进行调度 扩展 共享资源 管理生命周期 例如: 一个容器写日志,一个容器读取日志进行相关内容的展示 2.通信和资 ...

  5. Servlet 规范笔记—servlet概念及结构

     Servlet, 这个词对java程序员并不陌生,我想几乎每个java程序员在学习J2EE知识时,首先学习的就是servlet,这是一种正确的学习方式,在我看来Servlet是J2EE的基础,要熟练 ...

  6. Servlet概念入门

    什么是Servlet Servlet 为创建基于 web 的应用程序提供了基于组件.独立于平台的方法,可以不受 CGI 程序的性能限制.Servlet 有权限访问所有的 Java API,包括访问企业 ...

  7. Servlet概念及配置

    Servlet 简介: servlet就是sun公司开发动态web的一门技术 Sun在这些API中提供一个接口叫做:Servlet,如果逆向开发一个Servlet程序,只需要完成两个小步骤: 1.编写 ...

  8. 编程开发之--java多线程学习总结(1)问题引入与概念叙述

    1.经典问题,火车站售票,公共票源箱,多个窗口同时取箱中车票销售 package com.lfy.ThreadsSynchronize; /** * 解决办法分析:即我们不能同时让超过两个以上的线程进 ...

  9. Servlet简单概念和开发小总结

    一.Servlet概念 安装了tomcat了解到其实tomcat是一个容器,可以处理用户发送的请求(Request),之后会为请求做出一个响应(Response),此时用户只能请求一些现成的资源,容器 ...

随机推荐

  1. Ubuntu升级出现/boot空间不足解决

    经常升级Linux内核,导致更新时警告/boot分区空间不足.这是以为多次升级内核后,导致内核版本太多,清理一下没用的内核文件就行了.命令如下: zht@zht-Ubuntu:~$ dpkg -l ' ...

  2. IO模型分析

    html { font-family: sans-serif } body { margin: 0 } article,aside,details,figcaption,figure,footer,h ...

  3. P1035

    P1035 时间限制: 1 Sec  内存限制: 128 MB提交: 87  解决: 36[提交][状态][讨论版] 题目描述 给出一张n*n(n< =100)的国际象棋棋盘,其中被删除了一些点 ...

  4. 使用JS动态修改网页body的背景色

    大部分网页默认的背景色为白色,个人感觉比较刺眼,于是写了个JS的脚本去改变body部分的背景色,代码如下: // ==UserScript== // @name ChangeBackgroundCol ...

  5. MyBatis 关系映射XML配置

    关系映射 在我看来这些实体类就没啥太大关联关系,不就是一个sql语句解决的问题,直接多表查询就完事,程序将它设置关联就好 xml里面配置也是配置了sql语句,下面给出几个关系的小毛驴(xml) 一对多 ...

  6. C#程序员应该养成的程序性能优化写法

    转载一个别人的文章 隔了很久没写东西了,主要是最近比较忙,更主要的是最近比较懒…… 其实这篇很早就想写了 工作和生活中经常可以看到一些程序猿,写代码的时候只关注代码的逻辑性,而不考虑运行效率 其实这对 ...

  7. Python自学笔记-paramiko模块(Mr serven)

    文章出处:http://www.cnblogs.com/wupeiqi/articles/5095821.html SSHClient 用于连接远程服务器并执行基本命令 基于用户名密码连接: #!/u ...

  8. 在X64系统中PowerDesigner无法连接MySQL的解决方法

    在MySQL的官网http://dev.mysql.com/downloads/connector/odbc/下载,下个X64版本的,顺带也下了个X86的. 下载完成安装一切顺利(因为是X64系统,自 ...

  9. Chloe.ORM框架应用实践

    Chloe.ORM 是国人开发的一款数据库访问组件,很是简单易用.目前支持四种主流数据库:SqlServer.MySQL.Oracle,以及Sqlite,作者为这四种数据库划分出了各自对应的组件程序集 ...

  10. C# 基础之类型(一)

    一.类型 类型总共分为两种,一种是值类型(Value Type),如枚举.结构:另一种是引用类型(Reference Type),如类.接口.委托等. 值类型 1,值类型通常分配在线程的堆栈上 2,作 ...