JavaWeb系列之八(Servlet的学习)

来源:互联网 发布:js如何回滚 编辑:程序博客网 时间:2024/03/29 09:01


1.Servlet的快速入门
    什么是servlet?
    servlet就是java程序,可以接受和响应来自客户端的请求。
    实现servlet:(1)实现Servlet接口(2)继承GenericServlet类(3)继承HttpServlet类
   
如果实现Servlet接口,需要把接口里面的方法都实现,使用继承类,就不用。
    例子:向页面输出内容hello servlet
    (1)开发步骤
        继承GenericServlet类实现servlet
        向页面
        配置web.xml
        <servlet-name>hello</servlet-name>
        <servlet-class>包名.类名</servlet-class>
2.servlet执行过程
    servlet执行过程图解
    
        http://1127.0.0.1/servlet/hello
        第一布:根据地址栏输入的地址找到servlet配置文件中url-pattern里面相同地址
        第二步:去找地址对应servlet-name
        第三步:找到另外一个servlet标签里面和相同的servlet名称
        第四步:找到servlet包类的路径,利用反射得到类所有的内容,反射里的invoke
3.servlet的生命周期
    就是servlet的生命周期:就是从创建到销毁的生命周期
    servlet接口有五个方法:有三个方法与生命周期相关的
    init方法:servlet创建的时候来执行这个方法,servlet在第一次访问时候创建,创建一次
    service方法,处理客户端请求的时候执行这个方法,每次请求时候都执行,都执行
    destroy方法,销毁servlet的时候执行这个方法,关闭服务器时候销毁servlet,执行一次
4.接口的继承关系
    GenericServlet,HttpServlet,里面的方法参数是HttpServletResponse,HttpServletRequest,
    ServletRequest HttpServletRequest:提供请求信息为servlet提供
    ServletResponse HttpServletResponse:响应请求信息 HTTP 的发送响应功能。例如,该接口拥有访问 HTTP 头和 cookie 的方法。
    HttpServletRequest和HttpServletResponse是ServletRequest ServletResponse的子接口
    HttpServletRequest和HttpServletResponse专注于http协议的接口
    ServletRequest ServletResponse
5.注意事项
    (1)GenericSerclet里面init有参数和没参数的:init有参数的方法最终也会执行没参数的方法
    (2)HttpServlet里面的service和doXX方法:根据提交方式执行相应的doxx方法,比如提交get方法,执行doGet()
    在实际开发中一般都是实现HttpServlet方法实现
    (3)简化编程:
    无论什么提交方式,都会执行照这个代码
    在doPost方法里面调用doGet():this.doGet(response,request);
    (4)Servlet启动时候创建,在服务器启动时候创建,而不是第一次访问
        在web.xml中找到启动的servlet,<load-on-startup>
    (5)修改模板
6.url-pattern的配置
    第一种:完全路径匹配:使用/开头/hello/aa/hello
    第二种:目录匹配:使用使用/开头/aa/*/*
    第三种:扩展名匹配:不使用/开头*.action  *.do
    配置优先级:完全路径匹配>目录匹配>扩展名匹配
   
7.开发中的路径问题
    相对路径:和html的一样
    绝对路径:一般开发中都使用绝对路径
            第一种写法:http:127.0.0.1/day08/img/w10.png
            第二种写法:直接访问/day08/img/w10.png(一般都用这种)
    路径分类有两种
    第一类:客户端 :带项目名称 一般重定向 /day08/img/w0.png
   
    第二类:服务器端路径:不需要带项目名称 在服务器内部经行访问的操作,一般使用转发
   
8.ServletConfig对象的使用
    第一个作用:
    配置初始化参数:
    在web.xml中找到servlet
    配置初始化参数:
    在web.xml中找到要配置servlet,只能在当前配置的servlet里面使用,不能再其他的servlet里面使用
    <init-param>
        <param-name>url</param-name>
    <param-value>192.0.0.1</param-value>
    </init-param>
    方法:
    getInitParameter(String name)获取初始化参数的值
    getInitParameterNames():获取所有的初始化参数的名称
    代码
    //得到servletconfig对象
    ServletConfig config =  getServletConfig();
    //执行 getInitParameterNames()所有初始化参数的名称
    Enumeration<String> enumeration =  config.getInitParameterNames();
     //遍历
    while(enumeration.hasMoreElements()) {
    //得到每一个初始化参数的名称
    String name1 = enumeration.nextElement();
    //得到初始化参数的值
    String value1 = config.getInitParameter(name1);
    System.out.println(name1+" :: "+value1);
    }
    第二个作用:得到当前运行的servlet的名称<serlvet-name></serlvet-name>:getServletName()
    第三个作用:得到servlet的对象 getServletContext();
9.servletContext对象
    启动tomcat服务器,在tomcat里面可能有很多的项目,这个时候服务器会为每一个项目创建一个对象servletContext。
    在这个项目里面,如果通过servlet1向servletContext里面存一个值,这个时候在项目里面其他所有的servlet里面都 可以取到这个值
    servletContext域:在一定的范围以内,做存值和取值操作
    servletContext域范围:整个的web项目
    存值和取值
    存值:setAttribute(String name, Object object) :两个参数,第一个参数设置值的名称,第二个参数是值
    取值:getAttribute(String name) :参数是设置值的名称

10.通过servletContext对象读取全局的初始化参数
    全局的初始化参数:所有的servlet里面都可以使用
    配置全局初始化参数
    在web.xml中,但是不能配置在任何的一个servlet里面
     <context-param>
    <param-name>url</param-name>
    <param-value>192.0.0.1</param-value>
    </context-param>
    方法:
    getInitParameter(String name) :得到全局初始化参数的值
    代码
    //得到servletContext对象
    ServletContext context = getServletContext();
    //得到username的值
    String username = context.getInitParameter("username");
    System.out.println("username: "+username);
    getInitParameterNames() :得到所有的全局初始化参数的名称
    代码
    //得到servletContext对象
    ServletContext context = getServletContext();
    //得到所有的全局初始化参数的名称
    Enumeration<String> enumeration = context.getInitParameterNames();
    //遍历
    while(enumeration.hasMoreElements()) {
    //每一个全局初始化参数的名称
    String namev = enumeration.nextElement();
    //得到值
    String valuev = context.getInitParameter(namev);
    System.out.println(namev+" :: "+valuev);
    }

12.读取web项目中的文件
    properties文件格式
    读取properties文件
    使用load(InputStream )
    classes/db.properties路径是一个相对路径,相对jvm的路径,web项目,tomcat启动时候创建jvm 而启动项在bin目录下,则是相对与bin目录的,而                                                  我们的项目不能放在bin目录下
    inputStream getResourceAsStream("文件路径");
    首先第一个位置是固定就是项目的路径/
    在src的同级目录下面
    //InputStream in= context.getResourceAsStream("/WEB-INF/classes/db.properties");
     //在包下面
    //InputStream in= context.getResourceAsStream("/WEB-INF/classes/cn/itcast/servlet/db1.properties");
    //  放在webroot下面
    //InputStream in= context.getResourceAsStream("/db2.properties");
    和webroot同级目录下,无法读取到,根本就没有发布到tomcat里面去
    使用传统方式,只要写完全路径
    读取webroot下面的文件
    使用getResourceAsStream("文件的路径")
    首先第一个位置是固定 / : 理解为项目的名称,后面的部分是文件在tomcat里面具体的路径
    //得到servletContext对象
    ServletContext context = getServletContext();
     //读取文件流
    //第一个位置 /
    //后面的位置 文件在tomcat里面具体的路径
    InputStream in = context.getResourceAsStream("/db2.properties");
    如果文件放到项目路径下(webroot在同一级目录),文件不能使用servletContext对象读取到
    文件根本没有发布到tomcat里面
    String getRealPath(String path)  :得到文件的完全路径 带盘符
13.反射的一个过程
    反射是一些通用性比较高的代码,一般使用在框架里面
    通过反射得到类里面的所有的内容
    所有内容包含:构造方法(有参数和没有参数),属性,普通方法
    画图分析反射的过程
    创建一个java文件,
    第一步:保存到本地硬盘,
    第二步:编译成.class文件
    第三步:使用类加载器加载到内存中(依赖于jvm)
    class文件在内存中可以使用Class类进行表示
    首先得到Class类
    有三种方式
    类名.class
    对象.getClass()
    Class.forName("包类路径")
    构造方法使用Constructor类表示
    属性使用Filed类表示
    普通方法使用Method类表示
15.默认servlet
    如果页面出现404问题,由默认的servlet操作
    在tomcat的web.xml中招默认的servlet
    需要把这个值设置成true,直接访问项目
16、url和uri的区别
    url:专门指的是网络地址 比如 http://www.itcast.cn http://www.baidu.com
    uri: 所有的网络地址 比如 test@163.com
17、类的加载器来读文件
    使用类加载器使用范围:读取web项目中classes里面的文件
    得到类加载器
    首先Class类(有三种方式)
    通过Class类里面.getClassLoader()得到类加载器
    在类加载器里面使用方法 getResourceAsStream()得到文件的输入流
    直接写classes里面的文件的名称
    //得到Class类
    //  Read4.class
    Class clazz = this.getClass();
    //得到类加载器
    ClassLoader classLoader = clazz.getClassLoader();
    //读取文件
    InputStream in = classLoader.getResourceAsStream("db.properties");
8、默认servlet
    如果页面出现404问题,由默认的servlet操作
    在tomcat的web.xml中找默认的servlet
    配置启动时候创建servlet ,使用<load-on-startup>这里面的值不能写成1,会与默认的servlet冲突
     <url-pattern>/</url-pattern>
    如果把项目里面的一个servlet里面url-pattern写成/,就会成为一个默认的servlet
    在默认的servlet里面配置
    <init-param>
            <param-name>listings</param-name>
            <param-value>false</param-value>
        </init-param>
    需要把listings值设置成true,直接访问项目里面一个文件夹,可以把文件夹里面的所有的内容显示出来

0 0
原创粉丝点击