首页 > 其他 > 详细

Servlet技术(笔记)

时间:2020-04-29 21:51:55      阅读:86      评论:0      收藏:0      [点我收藏+]
  • Servlet技术

    1.1 Servlet概述:

    什么是servlet:它是运行在web服务器端的- -个java小程序,简单来说,它就是一个java类
    
                  在使用servlet时,需要导入javax. servlet下的jar包。比如: tomcat服务 器提供了
    
                  servlet的servlet- api. jar包,所以在开发时用tomcat服务器就不需要再导入servlet的jar包。
    
    Servlet它是一个资源,是用来被用户访问的资源,同时是一一个动态资源,它是由sun指定的servlet规范。
    
    Servlet的作用:它是基于Http协议的,主要是用来接收客户端发送的请求,处理请求,把数据响应给客户端。

    1.2 Servlet的入门

    1.2.1 Servlet的接口和实现类:
    
        >>>Servlet它是一一个接口,在javax. servlet包下面。
    
            五个方法:
    
                servlet接口中有init、service、destroy 、getServletConfig和getServletInfo这 5个方法,这些方法的特点及其作用具体如下:
    
                1)init(ServletConfig config)方法,该方法在服务器对Servlet第一次访问时调用,负责Servlet初始化工作。在一个Servlet的生命周期中只执行一次。
    
                该方法接收一个ServletConfig类型的参数,Servlet容器可以通过这个参数向Servlet传递初始化配置信息。
    
                2)service(ServletRequest request,ServletResponse response)方法,该方法负责响应用户的请求,当容器接收到客户端访问Servlet对象的请求时,
    
                就会调用此方法。
    
                3)destroy()方法,该方法方法负责释放Servlet对象占用的资源。当Servlet对象被销毁时,容器会调用此方法。
    
                4)getServletConfig()方法,该方法返回容器调用init(ServletConfig config)方法时传递给Servlet的ServletConfig对象。
    
                5)getServletInfo()方法,该方法返回一个字符串,其中包含了关于Servlet的信息,例如,作者、版本和版权等信息。
    
            * destory():执行这个方法,销毁了servlet对象
    
            * init(ServletConfig config) :在web服务器创建servlet对象以后,执行这个初始化方法。
    
            * service(ServletRequest req, ServletResponse res) :服务方法,用来接收客户端发送的请求,并且响应数据到
    
            * getServletConfig():
    
            * getServletInfo(): servlet 的信息,比如作者、版本和版权,这个方法在开发中不用
    
        >>>GenericServlet,它是一个类,实现了Servlet接口
    
        >>>HttpServlet,它是一个类,实现了Servlet接口,同时继承了GenerciServlet
    
    1.2.2 创建servlet三种方式
    
        >>>直接实现Servlet接口。
    
        >>>继承GenericServlet类
    
        >>>继承HttpServ1et类。
    
        一般在开发中, 创建servlet, 通常去继承这个HttpServlet.
    
        比如: class MyServlet extends HttpServlet {重写所需要的方法}
  • 实现第一个servlet程序

    2.1.首己手动创建Servlet ,通过Dos命令窗口编译Servlet,把编译好的class文件部署到tomcat服务器运行。

    2.2 通过Eclipse创建Servlet, 部署到tomcat服务器, 然后就可以访问到部署的Servlet.

        步骤:
    
            2.2.1. 创建HelloWordServlet, 继承GenericServlet类
    
            2.2.2. 重写父类GenerciServlet的servicet方法 .
    
            2.2.3. 在服务方法里面,处理客户端的请求后,把数据响应给客户端。
    
                比如:
    
                    public class HelloWordServlet extends GenericServlet {
    
                        public void service(ServletRequest arg0, ServletResponse response)
    
                            throws ServletException, IOException {
    
                            //处理客户端发送的请求,并且把数据响应给客户端
    
                            System. out. print1n( "接收了客户端的请---------------“)
    
                            //把数据响应给客户端,与浏览器绑定的输出流,作用向浏览器输出数据
    
                            PrintWriter pw = response. getWriter();
    
                            pw. print("Hello World");
    
                            }
    
                        }                       
    
                访问Servlet ,提供servlet的访问路径:
    
                比如: 
    
                    <!-- 配置/hello, 访问的servlet -->
    
                    <servlet>
    
                        <servlet-name> helloWorld</servlet -name>
    
                        <servlet-class>cn. itcast. firstmyapp. servlet. HelloWordServlet</servlet-class>
    
                    </servlet>
    
                    <!--配置浏览器访问servlet的路径 -->
    
                    <servlet -mapping>I
    
                        <servlet -name> helloWorld</servlet -name>
    
                        <url-pattern>/hello</url-pattern>
    
                    </servlet -mapping>
    
                    访问: http://localhost: 8080/webFirst/hello,就找到对应的HelloworldServlet把数据响应给浏览器。
  • Servlet的生命周期.

    生命周期:自然界人从出生到最終走向西方极乐世界,込个周期过程就是人的生命周期其实servlet的生命周期和人的一祥,从servlet对象被创建,

         经过使用servlet对象,到最终servlet对象被销毁,整个过程就是servlet的生命周期.

    与生命周期相关的三个方法:

    >>>init(ServletConfig config)初始化方法:首次访问这个servlet, servlet対象会被创建,抉行初始化方法,执行一次。
    
    >>>service(ServletRequest req, ServletResponse res)服务方法:毎次访问servlet时, 服务方法都会被执行,抗行多次
    
    >>>destroy()销毁方法:在服多器正常关闭时,会执行销毁方法,抉行一次。
    
        比如:
    
            import java.io.IOException;
    
            import javax.servlet.GenericServlet;
            import javax.servlet.ServletException;
            import javax.servlet.ServletRequest;
            import javax.servlet.ServletResponse;
    
            public class LifeServlet extends GenericServlet {
    
                //servlet的初始化方法
                public void init() throws ServletException {
                    System.out.println("首次访问LifeServlet时,会执行初始化方法-------------");
                }
                //servlet的服务方法
                public void service(ServletRequest req, ServletResponse res) 
                        throws ServletException, IOException {
                    System.out.println("每次访问LifeServlet时,都会执行这个方法-----------");
                }
                //servlet的销毁方法
                public void destroy() {
                    System.out.println("关闭时执行销毁方法---------");
                }
            }
    
        web配置对应的访问路径:
    
          <servlet>
            <description></description>
            <display-name>LifeServlet</display-name>
            <servlet-name>LifeServlet</servlet-name>
            <servlet-class>cn.test01.servlet.LifeServlet</servlet-class>
          </servlet>
          <servlet-mapping>
            <servlet-name>LifeServlet</servlet-name>
            <url-pattern>/LifeServlet</url-pattern>
          </servlet-mapping>
  • 4、Servlet作用-HttpServlet

    在开发中,通常浏览器访问web服各器端的资源,是带有协议的访问,比如说http协议、https协议等,
    
    所以説在创建servlet吋。需要使用带有协议的servlet,那幺咋们程序员在创建servlet吋,通常用继承HttpServlet的方式来实现。
    
    4.1.査看HttpServlet源码
    
        结论:
    
            在HttpServlet.里面重写service方法吋,因カ在service方法 里面,最终凋用doGet或者doPost方法,
    
            所以説在重写服各方法吋,一般情况下不会重写service方法,而是直接重写doGet和doPost方法
    
            在客戸端发送get请求,在服各器端就用doGet方法接收、
    
            在客戸端发送Post请求,在服各器端就用doPost方法来接收
    
            在开发中,注意的细节:
    
                >>>4.1.1.在使用对象时,使用带有协议的请求和响应对象HttpServletRequset和HttpServletResponse
    
                >>>4.1.2.在开发吋,继承HttpServlet时, 直接重写doGet和doPost方法,而不是重写service方法

    5、在Eclipse开 发工具中创建servlet

    通过开发工具创建servlet有两种方式:
    
        >>> 5.1.先创建-一个普通的java类, 需要去实现Servlet接口,或者继承对应的HttpServlet(Gener icServlet)类,
    
              咱们普通的java类就具有了servlet功能,所以需要手动在web. xm1配置文件中添加访问servlet的路径信息。
    
        >>> 5.2.直接创建servlet,会自动在web. xml文件中添加访问servlet的路径信息。
    
                步骤:
    
                1.新建web项目:
    
                比如说:创建一个web项目名称: chapter03
    
                2.创建一个servlet程序:
    
                比如说:先创建-一个包,名称cn.itcast.servlet ,servlet的名称: TestServlet01
    
        >>> 5.3.部署和访问servlet:
    
                通过开发工具部署web项目,如chapter03, 访问它下面的servlet资源:
    
                访问的地址: http://localhost:8080/chapter03/testServlet01

    6、实现Servlet的虚拟路径映射

    6.1. Servlet的多重映射: 一个Servlet,可以对应多个访问路径。
    
        比如: 一个servlet对应的访问路径: /test02 或者 /test03
    
            <servlet -mapping>
    
              <servlet-name>TestServlet01</servlet -name>
    
              <url-pattern>/test02</url-pattern>
    
            </servlet -mapping>
    
            <servlet-mapping>
    
              <servlet-name>TestServlet01</servlet -name>
    
              <url-pattern>/test03</url-pattern>
    
            </servlet-mapping>
    
    6.2. Servlet的映射路径可以使用通配符
    
        servlet的映射路径有三种方式:
    
            >>>完全目录匹配: 比如/hello
    
            >>>目录匹配: 比如/abc/*或者/*
    
            >>>扩展名匹配: *.do ,*.action   注意/* .do这种写法是错误的。
    
            优先级:完全目录匹配>目录匹配>扩展名匹配
    
    servlet的路径:
    
        /abc/*      对应servlet01
    
        /*          对应servlet02
    
        /abc        对应servlet03
    
        *.do        对应servlet04
    
    在浏览器地址输入的url地址如下:
    
        /abc/a.html:访问 /abc/* servelt路径匹配度高    servlet01
    
        /abc:访问 servlet03
    
        /abc/a.do :访问servlet01
    
        /a.do:访问 serslet02
    
    6.3.缺省Servlet
    
        什么是缺省Servlet:它的映射路径“/”, 代表这是一个缺省的servlet.
    
        缺省的servelt作用:处理请求的资源找不到的问题(404代表请求的资源找不到)

    7、 ServletConfig接口

    定义:它是servlet的配置对象,作用是获取与servlet的初始化参数。
    
    ??????它的子类是GenericServlet和HttpServlet.
    
    ??????它被实例化通过web服务器实现的。
    
    得到ServletConfig对象:getServletConfig()
    
        ServletConfig常用的方法:
    
            (1)获取servlet的初始化参数的值:getInitParmeter(String name):根据encoding获取utf-8
    
            (2)获取servlet初始化参数的名称:getInitParmeterNames():获取encoding和username等名称
    
            (3)得到servletContext对象:getServletContext()
    
            (4)获取servlet的名称:getServletName():对应web.xml里面<servlet-name>TestServlet02</servlet-name>
    
            初始化参数的配置:
    
                <init-param>
    
                ?????<param-name>major</param-name>
    
                ?????<param-value>BigData</param-value>
    
                </init-param>

    8.ServletContext接口

    ServletContext对象是在web服多器启动时就创建了,是web服务器创建的servletContext对象.
    
    每一个web项目只有一个servletContext对象
    
    ServletContext对象的作用:获取web服务器得初始化参数,在web应用程序中共享数据,获取web项目下的文件资源
    
    得到web服务器对象:
    
        >>1.通辻ServletConfig对象: config.getServletContext()
    
        >>>2.直接得到:getServletContext();
    
    8.1.获取web服务器得初始化参数(web座用程序就是web项目)
    
        >>> 1.获取全局初始化参数的値: getInitParameter(string name)
    
        >>> 2.获取全局初始化参数的名称: getInitParameterNames()
    
            <!--配置全局的初始化参数-->
    
            <context-param>
    
              <param-name>AAA</param-name>
    
              <param-value>aaa</param-value>
    
            </context-param>            
    
            <context-param>
    
              <param-name>BBB</param-name>
    
              <param-value>bbb</param-value>
    
            </context-param>
    
    8.2.实现多个servlet对象之间共享数据:因为一个web项目只有一个ServletContext对象。
    
        ServletContext对象就是域对象:域对象在一定范围内能存值和取值。
    
        域对象相关的方法:
    
            存值:void  setAttribute(String key,0bject obj);
    
            取值: 0bject obj = getAttribute(key);
    
            删除值: void removeAttribute(key);
    
            比如:     在TestServlet03里面存值:
    
                        //1.得到ServletContext对象
    
                        ServletContext context = this.getServletContext();
    
                        //2.存值
    
                        context.setAttribute("key", "servlet03里面存的值。");
    
                    在TestServlet04里面存值:
    
                        //1.得到ServletContext对象
    
                        ServletContext context = this.getServletContext();
    
                        //2.从ServletContext中取值
    
                        Object obj = context.getAttribute("key");
    
                        String value = obj.toString();
    
                        response.setContentType("text/html;charset=utf-8");
    
                        response.getWriter().print(value);
    
    8.3.获取Web下面的资源文件
    
        通过ServletContext对象能够获取Web项目下面文件的字节输入流,或者文件的绝对路径。
    
        路径问题:
    
            普通java项目:直接使用jdk编译java文件,所以说文件的路径是相对于工作空间。
    
            比如:
    
                Properties por = new Properties();
    
                InputStream inStream = new FileInputStream("src/config. properties");
    
                por.load(inStream);
    
                String value = por.getProperty("key");
    
                System.out.println(value);
    
            web项目:运行在tomcat服务器上面的,所有说文件的路径是相对于tomcat服务器.
    
                    服务器端是没有src这个目录,写路径不能写src,必须相对于tomcat服务器端的路经。
    
            8.3.1.获取文件的自己输入流:路径是相对于tomcat服务器的路径
    
                InputStream in =getResourceAsStream(String path)
    
            比如:
    
                //获取文件的字节输入流
    
                ServletContext context = this.getServletContext();
    
                String path="/WEB-INF/classes/config.properties";
    
                InputStream in = context.getResourceAsStream(path);
    
                Properties pro = new Properties();
    
                pro.load(in);
    
                //获取配置文件的值
    
                String v1 = pro.getProperty("Company");
    
                String v2 = pro.getProperty("Address");
    
                response.getWriter().print("company name : " + v1 +"company address :" + v2);
    
            8.3.2.获取文件的绝对路径:路径是相对于服务器端的路径
    
                String realPath = getRealPath(path);
    
            比如:
    
                //1. 得到ServletContext对象
    
                ServletContext context = this.getServletContext();
    
                //2.获取文件的绝对路径
    
                String path="/WEB-INF/classes/config.properties";
    
                //3.调用getRealPath
    
                //E:\soft\apache-tomcat-7.0.55\webapps\chapter03\WEB-INF\classes\config.properties
    
                String realPath = context.getRealPath(path);
    
                System.out.println(realPath);
    
                InputStream in = new FileInputStream(realPath);

    Servlet技术(笔记)

    原文:https://blog.51cto.com/14572091/2491623

    (0)
    (0)
       
    举报
    评论 一句话评论(0
    关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
    © 2014 bubuko.com 版权所有
    打开技术之扣,分享程序人生!