servlet总体简单介绍

       Servlet是JavaWeb的三大组件之一(Servlet、Filter、Listener),它属于动态资源。Servlet的作用是处理请求,服务器会把接收到的请求交给Servlet来处理,在Servlet中通常需要:接收请求数据;处理请求;完成响应。例如客户端发出登录请求,或者输出注册请求,这些请求都应该由Servlet来完成处理。Servlet需要我们自己来编写,每个Servlet必须实现javax.servlet.Servlet接口。Servlet对象驻留在服务器内存中。

 

动态WEB现在的实现手段非常多,较为常见的有以下几种:

       Microsoft ASP、ASP.NET

       PHP: PHP开发速度很快,功能强大,跨平台(平台指的就是运行的操作系统),而且代码也简单

       JAVA Servlet/JSP :Servlet/JSP技术的性能也是非常高的,不受平台的限制,各个平台基本上都可以使用。而且在运行中是使用多线程的处理方式,所以性能非常高。

SUN公司最早推出的WEB技术推出的是Servlet程序,Servlet程序本身使用的时候有一些问题,所有的程序是采用JAVA代码+HTML的方式编写的,即,要使用JAVA输出语句,一行一行地输出所有的HTML代码,之后,SUN公司受到了ASP的启发,发展出了JSP(Java Server Page),JSP某些代码的编写效果与ASP是非常相似的。这样可以很方便地使一些ASP程序员转向JSP的学习,加大市场的竞争力度。

 

Servlet:

       Java Servlet 是运行在 Web 服务器或应用服务器上的程序,它是作为来自 Web 浏览器或其他 HTTP 客户端的请求和 HTTP 服务器上的数据库或应用程序之间的中间层。

       使用 Servlet,您可以收集来自网页表单的用户输入,呈现来自数据库或者其他源的记录,还可以动态创建网页。

在整个过程中的:

          

 

       该Servlet的作用是,接收form登录表单发送过来的HTTP请求,并解析出请求中封装的一些参数,然后在回写到response响应当中去,最后在浏览器端显示。

 

        对于一个 Servlet 类,我们日常最常用的方法是继承自 HttpServlet 类,提供了 Http 相关的方法,HttpServlet 扩展了 GenericServlet 类,而 GenericServlet 类又实现了 Servlet 类和 ServletConfig 类。

        

      Servlet 创建于用户第一次调用对应于该 Servlet 的 URL 时,但是您也可以指定 Servlet 在服务器第一次启动时被加载。

        如果要开发一个可以处理HTTP请求的Servlet程序,则肯定要继承HttpServlet类,而且在自定义的Servlet类中还要重写HttpServlet类中提供的doGet()方法。Servlet程序本身也是按照请求和应答的方式进行的,所以在doGet()方法中定义了两个参数,即HttpServletRequest和HttpServletResponse,用来接收和回应用户的请求

       HttpServlet有两个特性是GenericServlet所不具备的:

              1.不用覆盖service方法,而是覆盖doGet或者doPost方法。在少数情况,还会覆盖其他的5个方法。

              2.使用的是HttpServletRequest和HttpServletResponse对象。

       这个service方法的参数是HttpServletRequest对象和HttpServletResponse对象,刚好接收了上一个service方法传过来的两个对象。

        HttpServletRequest表示Http环境中的Servlet请求。它扩展于javax.servlet.ServletRequest接口,并添加了几个方法。

       

        HttpServletRequest内封装的请求:

              因为Request代表请求,所以我们可以通过该对象分别获得HTTP请求的请求行,请求头和请求体。

 

注意: 不要重写父类Httpservlet中的service()方法,因为该方法会调用Httpservlet中私有的service()方法,而该私有的service()方法会根据不同的提交表单的方式,会调用相应的doGet()、doPost()、doHead()等方法。 我们去重写这些不同的表单提交的方法即可。

       Servlet(接口) --> GenericServlet(抽象类/适配器) --> HttpServlet(功能抽象类/模板) --> (继承HttpServlet,具体实现类,重写其功能)

         一个servlet可以配置多个映射路径(或者说:多个映射路径可以指向同一个servlet),只要是name是一样的就行

在web.xml中对servlet进行配置

 

       在前面我们讲过,在service中使用的编码解码方式默认为:ISO-8859-1编码,但此编码并不支持中文,因此会出现乱码问题,所以我们需要手动修改编码方式为UTF-8编码,才能解决中文乱码问题,下面是发生乱码的具体细节:

         

          解决post提交方式的乱码:request.setCharacterEncoding("UTF-8");

          解决get提交的方式的乱码:

                  parameter = newString(parameter.getbytes("iso8859-1"),"utf-8");

 

Servlet的生命周期:    实例化-->初始化-->服务->销毁

       出生:(实例化-->初始化)第一次访问Servlet就出生了(默认情况下)。(说明我可以改变它的出生时机,比如让servlet在服务器启动时就创建)

       活着:(服务)应用活着,servlet就活着。(Servlet是单实例,其中的service()方法是多线程的。)

       死亡:(销毁)应用被卸载了,servlet就销毁了。

     

     Servlet的生命周期有两种情况,一般就是1,否则为2

      init 方法被设计成只调用一次。它只在第一次创建 Servlet 时被调用,在后续每次用户请求时不再调用。因此,它是用于一次性初始化    在初始化中也可以做一些关于它数据的相关初始化的事情

 

创建Servlet:

Class文件中创建:

 

创建一个servlet的时候要在web.xml中配置servlet, 配置的时候都是一对一对的配置的

 

服务器能够认识你写的代码,同时能够快速调用这个代码

解决方法:按照服务器能够认识的规范去书写

 

Servlet的使用:

servlet就像一个接口一样,写好了规范,写好了里面有什么方法,然后你按照这个规范去写这个方法里面的具体内容,但这个方法的声明是固定的

只有按照这个流程去书写servlet,服务器才会认识和快速找到并调用这个类

第四步是让服务器能够找到此servlet类

其实是本质上就是

但不使用这种方式,而是使用别名可以使得暴露在外面的地址更安全,而不要直接把包名等地址漏在外面

    url绝对路径, uri相对路径

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章