Servlet

1、Servlet

  • 定义:ervlet是一种服务器端的Java应用程序,即Java服务器小程序,其是由服务器端调用和执行的、按照Servlet自身规范编写的Java类。

  • 特点:

  • 1、其实就是一个特殊的java类。

  • 2、特殊在能够处理http请求和响应。(处理请求信息并将响应发送到客户端)

  • 3、特殊在内嵌了HTML代码。(用内嵌的HTML代码生成HTML页面发送到客户端。)

2、Servlet使用以下两个包中的类和接口:

1、javax.servlet     包含了可以支持通用、跨协议的servlet的类
1、Servlet接口的方法:
    init(ServeltConfig config):用于初始化Servlet。
    destroy():销毁Servlet。
    getServletInfo():获得Servlet的信息。
    getServletConfig():获得Servlet配置相关信息。
    service(ServletRequest req, ServletResponse res):运行应用程序逻辑的入口点,它接收两个参数,ServletRequest表示客户端请求的信息,ServletResponse表示对客户端的响应。

2、GenericServlet类

3、ServletConfig
        在Servlet的初始化中,初始化方法使用ServletConfig对象作为参数,通常这个方法保存这个对象,以便能够有方法getServletConif()返回。

4、Javax.servlet包
    ServletException
        ServletException包含几个构造方法和一个获得异常原因的方法
        getRootCause()其返回造成这个ServletException的原因。

    UnavailableException
        当Servlet或者Filter暂时或者永久不能使用时,就会抛出这个异常

     ServletRequest
        代表了Servlet的请求,它是一个高层的接口,HttpServletRequest是它的子接口

    ServletResponse
        代表了Servlet的响应,它是一个高层的接口,HttpServletResponse是它的子接口

    ServletInputStream
        Servlet的输入流

    ServletOutputStream
        Servlet的输出流

    ServletContext
        Servlet上下文

    RequestDispatcher
        forward(ServletRequest request,ServletResponse response):把请求转发到服务器上的另一个资源(Servlet、JSP、HTML)。
        include(ServletRequest request,ServletResponse response):把服务器上的另一个资源(Se-rvlet、JSP、HTML)包含到响应中。

2、javax.servlet.http        包中的类增加了用于HTTP的功能。每个Servlet都必须实现 javax.servlet.Servlet接口。
HttpServlet类扩展了GenericServlet,提供Servlet接口的HTTP协议的特定实现
    doGet:支持Http Get请求
    doPost:支持Http Post请求
    doPut:支持Http Put请求
    doDelete:支持Http Delete请求
    init和destroy:管理Servlet占用的资源
    getServletInfo:获得Servlet自身的信息
  • HttpServletRequest接口可以获取由客户端传送的参数名称,也可以获取客户端正在使用的通信协议,可以获取产生请求并且接收请求的服务器远端主机名和其IP地址等信息

  • HttpServletResponse代表了对客户端的Http响应。它允许Servlet设置内容长度和回应的MIME类型,并且提供输出流ServletOutputStream

  • HttpSession这个接口被Servlet引擎用来实现Http客户端和Http会话两者之间的关联

3、Servlet体系结构。

  • 1、Servlet 该接口主要作用是提供Servlet生命周期的init()、service()和destory()方法。
  • 2、GenericServlet 是一种与协议无关的Servlet、提供了service()方法所有接口中方法的缺省实现。
  • 3、HttpServlet 该类扩展了GenericServlet、提供Servlet接口的HTTP协议的特定实现。如果Servlet必须遵循HTTP协议,则只能扩展HttpServlet类并覆盖所需的方法。

4、在web.xml 中配置 Servlet。

  • 1、命名Servlet,需要用到web-app内servlet元素的servlet-name(可以选取任意名称)和servlet-class(完全限定类名)子元素。

    <servlet>
        <servlet-name>HelloServlet</servlet-name>
        <servlet-class>com.hejin.helloservlet.servlet.HelloServlet</servlet-class>
    </servlet>
    
  • 2、要将URL赋予已命名的Servlet,需要使用servlet-mapping元素的servlet-name(之前指定的名称)和url-pattern(URL前缀,由斜杠开始)子元素。

    <servlet-mapping>
        <servlet-name>HelloServlet</servlet-name>
        <url-pattern>/helloServlet</url-pattern>
    </servlet-mapping>
    
  • 3、注意: 许多服务器具有“热部署”能力或方法,可以交互式地重启web应用。因此,除非使用服务器专有的特性,否则每次修改完web.xml文件还是要重新启动服务器。

5、Servlet get和post的区别 。

  • 1、这两种方法有本质的区别,get只有一个流,参数附加在url后,大小个数有严格限制且只能是字符串。post的参数是通过另外的流传递的,不通过url,所以可以很大,也可以传递二进制数据,如文件的上传。

  • 2、在servlet开发中,以doGet()和doPost()分别处理get和post方法。

  • 3、另外还有一个service(),它是一个调度方法,当一个请求发生时,首先执行service(),不管是get还是post。也可以直接编写service()方法,这样不管是get还是post。都会执行这个方法。

6、使一个Servlet上同时支持GET和POST。在Servlet的编写中常常遇到在同一个Servlet上需要同时支持GET和POST方法 。

public void doGet(HttpServletRequest req, HttpServletResponse res)
    throws ServletException, IOException{
    //----显示Hello,Servlet World! 
}
public void doPost(HttpServletRequest req, HttpServletResponse res)
    throws ServletException, IOException{
    doGet(req, res); 
}

7、Servlet和JSP的关系。

  • 1、JSP技术主要用来表现页面 ,Servlet技术主要是用来完成大量的逻辑处理
  • 2、JSP本身没有任何的业务处理逻辑,它只是简单地检索Servlet创建的JavaBean或者对象,再将动态的内容插入到预定义的模块中
  • 3、Servlet创建JSP需要的JavaBean和对象,再根据用户的行为,决定处理哪个JSP页面并发送给用户

8、Servlet的声明周期。

  • Servlet的生命周期包含了下面4个阶段

1、加载和实例化
2、初始化阶段 调用init()方法
3、响应客户请求阶段  调用service()方法
4、终止阶段  调用destroy()方法

  • Servlet初始化阶段:
      在下列时刻Servlet容器装载Servlet:
        1,Servlet容器启动时自动装载某些Servlet,实现它只需要在web.XML文件中的之间添加如下代码:
        2,在Servlet容器启动后,客户首次向Servlet发送请求
        3,Servlet类文件被更新后,重新装载Servlet
      Servlet被装载后,Servlet容器创建一个Servlet实例并且调用Servlet的init()方法进行初始化。在Servlet的整个生命周期内,init()方法只被调用一次。

9、Servlet中接收和响应请求参数时设置编码格式。

1、request.setCharacterEncoding("utf-8");//设置请求参数编码
2、/*response.setCharacterEncoding("utf-8");*///设置响应参数编码
3、response.setContentType("text/html;charset=utf-8");//设置响应内容编码

10、参数的传递。

1、get 提交 url后边直接传。
2、post提交 放在作用域里、传到下一个页面。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,525评论 6 507
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,203评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,862评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,728评论 1 294
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,743评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,590评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,330评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,244评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,693评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,885评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,001评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,723评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,343评论 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,919评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,042评论 1 270
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,191评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,955评论 2 355

推荐阅读更多精彩内容