JavaWeb_Servlet04_Servlet与动态页面

一、静态页面与动态页面

当我们在网上冲浪时,使用的浏览器就是我们的客户端。我们通过客户端向发送请求,服务器收到请求之后进行响应。相应的具体内容分为两类:一类是静态页面也称之为HTML页面,一类是动态页面(包含了Serlvet程序的页面)。

服务器在响应静态页面时,直接将整个网页发送给客户端,这个过程比较简单,但是访问动态页面时,过程就变得较为繁琐。

二、动态页面的具体响应过程

动态访问网页指的是web网页具有一定的交互性,web内容可以动态的更新。在具体的访问过程中,用户利用浏览器,使用HTTP协议发起请求,服务器收到web请求之后通过web sever plugin插件能够区分用户请求的是静态资源还是动态资源。如果WEB Server Plugin发现客户端请求的是静态资源(*.htm或者是*.htm),则将请求直接转交给WEB服务器,之后WEB服务器从文件系统中取出内容,发送回客户端浏览器进行解析执行。如果WEB Server Plugin发现客户端请求的是动态资源(*.jsp、*.asp/*.aspx、*.php),则先将请求转交给WEB Container(WEB容器),在WEB Container中连接数据库,从数据库中取出数据等一系列操作后动态拼凑页面的展示内容,拼凑页面的展示内容后,把所有的展示内容交给WEB服务器,之后通过WEB服务器将内容发送回客户端浏览器进行解析执行。

三、Servlet程序的配置与映射及其ServletConfig与ServletContext

servlet程序在动态响应过程中具有非常重要的作用。首先,动态响应的具体动作都是有Servlet程序(Java)来完成的。如何保证浏览器能够访问到正确的Servlet的呢?通过web.xml文件(每一个web应用有且只有一个配置文件,并且能在该配置文件中配置多个Servlet程序)对相应的Servlet进行配置和映射,配置Servlet程序的名字和全类名,同时映射相应Servlet程序的URI。

同时我们也能够设置每一个Servlet程序的Init-name等,可以配置多个。这些便是该Servlet的相关配置信息,那么如何获取这些配置信息呢?通过ServletCongfig对象便可以获取。具体的获取过程便是在首次调用Servlet时,要调用init()方法,在此过程中能够获取到ServletConfig对像(这是获取ServletConfig对象的第一步,有了这一步便可以写一个getServletConfig()函数直接进行获取)。如果不是继承的Servlet,除此之外,我们还能够利用ServletCongfig对象的方法getServletContext()方法,获取ServletContext对象(该方法是获取ServletContext的原始方法)。

什么是ServletContext对象?每一个应用程序都有一个ServletContext对象,这个ServletContext对象时该应用下所有Servlet对象所共有的。该ServletContext对象非常重要?主要是因为()————————待补充。

四、响应的关键service()以及怎么编写能让Servlet程序更加简单

对于每一次客户端发来的请求,服务器都需进行响应response。那服务器是通过什么样的方式对请求进行响应的呢?很简单,我们指导Servlet接口中有四个函数,其中,所以我们能够通过利用其中的一个函数service()函数来对请求进行响应(每当有请求时,就会调用service函数)。

实际上我们处理的大多数的请求都是Http请求。在实际的编写Servlet函数中,其实共有三种方法,这三种方法分别是:继承接口Servlet、继承抽象函数GenericServlet、继承抽象函数HttpServlet。
         法一:由于直接继承了接口,所以接口定义的四个方法都需要进行重写,并且没有获取ServletConfig相关内容的函数;
         法二:继承了抽象函数GenericServlet只需要重写其中的一个函数就行了,并且可以利用getServletCongfig()函数直接获取ServletConfig对象;
         法三:Http请求主要有两种,一种是get请求,另外一种是post请求。所以对于不同的请求,我们需要有不同的处理方法。如果继承GenericServlet抽象类,需要判断客户端的请求方式,如果继承抽象类HttpServlet,则不需要进行判断,只需要覆写相应的doGet()或doPost()方法就能够可以了,其中doGet()方法或者doPost()方法由services()函数进行调用。具体的响应内容可以方法内部进行实现。

五、需要获取用户的具体请求信息吗

在淘宝购物的过程中,我们选取了一个商品并将其添加进购物车,为什么购物车中能够准确无误的显示出来我们所添加的商——这其中的秘密便是服务器能够获取用户请求的具体内容,并对其进行响应显示。

获取用户的信息,在面向对象的概念中,我们就需要把用户的具体请求信息当作一个对象,并对其进行处理。这个对象体现在Servlet中便是ServletRequest。该对象封装了用户请求的所有信息,我们可以通过响应的方法获取用户请求的具体信息。在具体的实例中,我们可能返回得到的是HttpServletRequest对象,该对象包含了更多的信息。

六、如何更加高效地对客户端进行响应

为了能够更加高效地与客户端进行响应,可以使用对象response,该对象封装了服务器的响应信息,如果想要给用户什么响应,可以使用该接口的方法进行实现。

Defines an object to assist a servlet in sending a response to the client. The servlet container creates a ServletResponse object and passes it as an argument to the servlet's service method.  To send binary data in a MIME body response, use the ServletOutputStream returned by getOutputStream(). To send character data, use the PrintWriter object returned by getWriter(). To mix binary and text data, for example, to create a multipart response, use a ServletOutputStream and manage the character sections manually. The charset for the MIME body response can be specified explicitly using the setCharacterEncoding(java.lang.String) and setContentType(java.lang.String) methods, or implicitly using the setLocale(java.util.Locale) method. Explicit specifications take precedence over implicit specifications. If no charset is specified, ISO-8859-1 will be used. The setCharacterEncodingsetContentType, or setLocale method must be called before getWriter and before committing the response for the character encoding to be used.

七、总结

综上所述,我们主要讲解了为什么需要编写Servlet——实现动态页面;
Servlet、GenericServlet以及HttpServlet等的区别;
service()函数的重要性:
以及四个及其中重要的接口:ServletConfig(主要针对具体的某一个Servlet对象)、ServletContext(针对所在的WebApp)、ServletRequest、ServletResponse。他们都是接口,但是却可以由servlet容器产生响应的对象,具体的原因不在深究。
 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值