day07

来源:互联网 发布:js随机数1到10 编辑:程序博客网 时间:2024/05/29 03:37
1、servlet的入门
    1.1 什么是servlet
    (1)servlet 是运行在 Web 服务器中的小型 Java 程序。
    (2)servlet 通常通过 HTTP(超文本传输协议)接收和响应来自 Web 客户端的请求。
    
    1.2 实现servlet
    (1)实现Servlet接口
        * 如果实现接口,需要把接口里面的方法都实现

    (2)继承GenericServlet, HttpServlet类
        * 如果继承类,不需要把类中的方法都实现

    (3)需要web服务器知道java程序不是一个普通的java程序,而是一个servlet
        * 通过配置进行操作
        * 在web项目中,web.xml里面进行配置
    
    1.3 servlet的入门程序
    (1)写一个servlet,实现向页面输出内容 hello servlet
    (2)步骤
    第一步,创建一个类,使用这个类继承GenericServlet类
    第二步,实现类里面的 service(ServletRequest req, ServletResponse res)
        * ServletRequest代表请求
        * ServletResponse代表响应
    第三步,使用ServletResponse向页面输出内容 getWriter()
    第四步,在web项目中的web.xml进行配置,让服务器知道是一个servlet
        * <servlet>
            <servlet-name>servletDemo1</servlet-name>
            <servlet-class>cn.itcast.servlet.ServletDemo1</servlet-class>
        </servlet>
        <servlet-mapping>
            <servlet-name>servletDemo1</servlet-name>
            <url-pattern>/hello</url-pattern>
        </servlet-mapping>
    
2、servlet的执行过程(画图分析执行过程)
    2.1 执行过程
    (1)根据在浏览器地址栏输入的地址,找web.xml中相同的url-pattern
    (2)找到了url-pattern,对应的servlet-name
    (3)根据找到的servlet-name到另外一个标签里面(servlet)相同名称的servlet-name
    (4)在servlet标签里面找到了相同名称的servlet-name,找servlet的包类路径servlet-class
    利用反射原理,让servlet里面的service方法执行

3、servlet的生命周期
    3.1 什么是生命周期:一个人从出生到死亡
    3.2 servlet的生命周期:从servlet创建到servlet销毁的过程
    3.3 在servlet接口里面有五个方法,其中有三个方法是与生命周期相关的方法
    (1)init方法,在servlet创建时候执行这个方法,执行一次,servlet在第一次访问时候创建
    (2)service方法,在每次访问servlet时候会执行这个方法,执行多次
    (3)destroy方法,销毁servlet时候执行这个方法,执行一次

4、servlet开发细节的问题
    4.1 HttpServletRequest和ServletRequest关系
        HttpServletResponse和ServletResponse关系
    (1)servletRequest和serlvetResponse不带协议
         HttpServletRequest和HttpServletResponse带协议
    (2)sun公司设计时候,认为未来互联网的发展有很多的协议,目前只是http协议

    4.2 在GenericServlet类里面有init没有参数的方法和init有参数的方法的关系
    (1)有参数init方法最终也要调用init没有参数的方法,直接使用init没有参数的方法就可以了

    4.3 在HttpServlet类里面service方法和doxxx方法关系
    (1)根据提交的方式,调用不同的doXX的方法
    比如提交方式是get,调用doGet方法;比如提交方式是post,调用doPost方法
    (2)一般在开发中,直接写doGet和doPost方法就可以了
    (3)一般在创建servlet时候,直接继承HttpServlet实现servlet

    4.4 在服务器启动时候创建servlet
    (1)通过配置文件进行配置 ,在servlet标签里面写标签 <load-on-startup>正整数的值</load-on-startup>

    4.5 简化编程
    (1)当通过get提交方式时候,实现从1加到100
         当通过post提交方式时候,实现从1加到100
    (2)无论什么提交方式,代码都能执行到
        * 在dopost方法里面调用doget方法

5、url-pattern的配置
    5.1 配置有三种方式
    第一种方式:完全路径匹配
    (1)写法 : /aa   /hello

    第二种方式:目录匹配
    (1)写法:  /aa/*

    第三种方式:扩展名匹配
    (1)写法:  *.do   *.action

    5.2 优先级
    完全路径匹配 > 目录匹配 > 扩展名匹配
    
    5.3 练习

6、开发中路径的问题
    6.1 相对路径
    (1)在html文件中引入图片
    (2)有三种情况
    第一种:图片和html在同一个目录下面
        * 直接写图片的名称
    第二种:图片在html的上层目录
        * 写 ../ 表示上层目录
    第三种:图片在html的下层目录
        * 直接写目录名称和图片名称

    6.2 绝对路径(一般开发中都使用)
    (1)第一种写法:http://ip地址+端口号/文件的路径
        <img src="http://127.0.0.1/day07-3/path02/a.jpg"/>

    (2)第二种写法:直接写 /项目名称/文件路径
        <img src="/day07-3/path01/cc/c.jpg"/>
    
7、重定向和转发
    7.1 重定向
    (1)使用的是客户端路径
    (2)重定向请求两次,使用的是客户端路径,携带项目名称 ,比如 /day07/demo3

    7.2 转发
    (1)使用的是服务端路径
    (2)转发请求一次,使用的是服务器端路径,不需要携带项目名称 , 比如 /demo4

8、ServletConfig对象
    8.0 创建ServletConfig对象
    (1)直接使用方法创建对象 getServletConfig()

    8.1 得到当前运行的servlet的名称
    (1)web.xml中 <servlet-name>ConfigDemo1</servlet-name>
    (2)String getServletName()

    8.2 创建servletContext对象
    (1)ServletContext getServletContext()
    (2)一般都使用 getServletContext()方法

    8.3 获取初始化参数
    (1)在web.xml中进行配置初始化参数
    在servlet标签里面进行配置
    (2)String getInitParameter(String name) :根据名称得到值(参数是初始化参数名称)
        * 代码
        //得到servletconfig对象
        ServletConfig config = getServletConfig();
        //getInitParameter(String name)
        String username = config.getInitParameter("username");
        String password = config.getInitParameter("password");

         Enumeration getInitParameterNames()  :得到所有的初始化参数的名称
        * 代码
        //得到servletconfig对象
        ServletConfig config = getServletConfig();
        //得到所有的初始化参数名称
        Enumeration<String> enumrEnumeration = config.getInitParameterNames();
        //得到每个参数的名称
        while(enumrEnumeration.hasMoreElements()) {
            String name = enumrEnumeration.nextElement();
            //根据name得到值
            String value = config.getInitParameter(name);
            System.out.println(name+" :: "+value);
        }
 
9、ServletContext对象    
    9.1 创建ServletContext对象
    (1)第一种方式,使用ServletConfig对象里面的方法 getServletContext()
    (2)第二种方式,直接使用 getServletContext()

    9.2 获取全局的初始化参数
    (1)配置全局初始化参数
      <context-param>
        <param-name>url</param-name>
        <param-value>localhost</param-value>
      </context-param>
    (2)String getInitParameter(String name) :根据名称得到全局初始化参数的值
        * 代码
        //得到servletContext对象
        ServletContext context = getServletContext();
        //根据名称得到全局初始化参数的值
        String url = context.getInitParameter("url");
        String name = context.getInitParameter("name");

         Enumeration getInitParameterNames()  :得到所有的全局初始化参数的名称
        * 代码
        //得到servletContext对象
        ServletContext context = getServletContext();
        //使用方法得到所有的全局初始化参数的名称
        Enumeration<String> enumrEnumeration = context.getInitParameterNames();
        //得到每个全局初始化参数的名称
        while(enumrEnumeration.hasMoreElements()) {
            String name = enumrEnumeration.nextElement();
            String value = context.getInitParameter(name);
            System.out.println(name+" :: "+value);
        }
    
    9.3 在启动tomcat服务器时候,会为每个项目创建一个servletContext对象,在这个项目里面如果通过servlet1向
    servletContext里面设置一个值,在这个项目里面的其他的servlet里面可以的这个值
    (1)servletContext域对象:在一定的范围内,存值和取值,范围是整个web项目
    (2)存值:setAttribute(String name, Object object)
    (3)取值:getAttribute(String name)
    (4)首先创建servlet1,通过servlet1向servletContext里面设置一个值
         其次,再创建servlet2,在servlet2获取通过servlet1设置的值

10、练习:统计网站的访问次数
    10.1 创建一个servlet,每次访问这个servlet计算一次访问
    19.2 实现的步骤(分析图)

11、使用servletContext对象获取web项目中的资源
    11.1 使用传统方式获取web项目中的文件
    (1)创建web项目,创建properties文件
    (2)得到要操作文件的输入流,使用相对路径
        * classes/db1.properties : 相对路径
        * 相对虚拟机的位置
        * 在web项目中,虚拟机在tomcat启动时候,tomcat在bin里面
    (3)使用传统方式里面的相对路径,不能读取web项目中的文件

    11.2 使用servletContext对象读取web项目中的文件
    (1)InputStream getResourceAsStream(java.lang.String path) :得到要操作文件的输入流
    第一个操作:文件放到src下面
    = 路径: 第一个位置 /,理解为项目的名称;后面写文件在tomcat的webapps里面的具体的路径
    = 代码
    //路径: 第一个位置 /,理解为项目的名称;后面写文件在tomcat里面的具体的路径
    InputStream in = context.getResourceAsStream("/WEB-INF/classes/db1.properties");

    第二个操作:文件放到包里面
    = 路径:第一个位置 / 理解为项目名称;后面写文件在tomcat的webapps下面的具体的路径
    = 代码
    //路径:第一个位置 / 理解为项目名称;后面写文件在tomcat的webapps下面的具体的路径
    InputStream in = context.getResourceAsStream("/WEB-INF/classes/cn/itcast/read/db2.properties");
        
    第三个操作:文件放到webroot下面
    = 路径:第一个位置 / 理解为项目名称;后面写文件在tomcat的webapps下面的具体的路径
    = 代码:
    //路径:第一个位置 / 理解为项目名称;后面写文件在tomcat的webapps下面的具体的路径
    InputStream in = context.getResourceAsStream("/db3.properties");

    * 注意:当把文件放到和webroot同级的目录下面,这个文件不会部署到tomcat里面,
    所以使用servletContext对里面getResourceAsStream方法不能得到文件的内容

    (2)String getRealPath(java.lang.String path)  :得到要操作文件的完全路径(带盘符的路径)
    = 参数:和getResourceAsStream类似的
    == 第一个位置 / ,项目名称;后面写文件在tomcat的webapps里面的具体的路径

    = 代码
    //使用getRealPath方法
    //路径:第一个位置 / ,项目名称;后面写文件在tomcat的webapps里面的具体的路径
    String path = context.getRealPath("/db3.properties");
    //C:\Users\asus\Desktop\javaweb\day06\apache-tomcat-7.0.53\webapps\day07-7\db3.properties
    //得到要操作文件的输入流
    InputStream in = new FileInputStream(path);
 
12、使用类加载器读取文件
    12.0 读取的文件的位置是 classes里面的文件
    12.1 得到类加载器
    (1)首先得到Class
    * 第一种方式:类名.class
    * 第二种方式:对象.getClass()
    * 第三种方式:Class.forName("包类路径")
    (2)使用Class得到类加载器

    12.2 代码
    //得到类的Class
    Class clazz = ServletDemo1.class;
    //得到类加载器
    ClassLoader loader = clazz.getClassLoader();
    //得到要操作文件的输入流
    //文件的路径,因为读取的classes里面的文件,直接写文件的名称
    InputStream in = loader.getResourceAsStream("db1.properties");

13、默认的servlet
    13.1 比如在浏览器的地址栏随便输入一个地址,出现404,资源找不到,这个效果是由默认的servlet实现的
    13.2 在tomcat的conf里面找到web.xml,有对默认servlet的配置
    * 如果自己创建servlet,让这个servlet在启动时候创建,<load-on-startup>大于1的值</load-on-startup>
    * 默认servlet的配置里面url-pattern是 /,当把自己创建的servlet的url-pattern写成/,这个servlet就会
    称为一个默认的servlet
    <servlet>
        <servlet-name>default</servlet-name>
        <servlet-class>org.apache.catalina.servlets.DefaultServlet</servlet-class>
        <init-param>
            <param-name>debug</param-name>
            <param-value>0</param-value>
        </init-param>
        <init-param>
            <param-name>listings</param-name>
            <param-value>false</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
     </servlet>
     <servlet-mapping>
        <servlet-name>default</servlet-name>
        <url-pattern>/</url-pattern>
     </servlet-mapping>

     13.3 在默认的servlet的初始化参数里面有 listings,当把这个参数的值设置成true之后,
     当直接访问web项目中文件夹时候,会把文件夹里面的所有内容显示出来
0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 顺丰派送员把快递寄错了怎么办 顺丰快递把户籍卡弄丢了怎么办 金立手机不小心设置成英文了怎么办 三星手机不小心设置成英文了怎么办 手游方舟国际版渡渡鸟跟丢了怎么办 一打电话4g变2g怎么办 手机4g突然变2g怎么办 江湖风云录八卦门任务拒绝了怎么办 百度网盘下载时显示违规信息怎么办 在海马助手下载的游戏闪退怎么办 手机版百度云盘不能普通下载怎么办 手机版百度云盘一直加载中怎么办 登别人的网盘单同步通讯录了怎么办 被培训公司骗了贷款之后该怎么办 乐教乐学孩子登陆你那忘记了怎么办 脸擦破了痂掉了留斑怎么办 挤黑头后鼻子又红又疼怎么办 香奈儿邂逅清新淡香水不喷怎么办 脚面被压了肿起来了怎么办 每天加班很累反而失眠严重怎么办 减肥药吃了口臭嘴巴苦怎么办 上火引起的牙疼怎么办吃什么药 舌苔厚口气重怎么办应该吃什么药 宝宝老是额头热四肢不热怎么办 考老师考砸了心理崩溃了怎么办 苹果手机一会白屏一会黑屏怎么办 360云盘的东西删不了怎么办 手机邮箱打开的文件疑似病毒怎么办 电脑qq发送的文件失效了怎么办 小米4c温控文件打开是乱码怎么办 超星尔雅用学号登录密码忘了怎么办 全脸做激光去黄褐斑后脸发红怎么办 上传到微云中的视频下载不了怎么办 微云保存的小电影下载不了怎么办 苹果手机下载有云朵下载不了怎么办 手机下载登录忘了密码了怎么办 软软件被手机加密忘了密码怎么办 苹果手机想下载东西忘了密码怎么办 已经不念书几年了突然想上学怎么办 江湖风云录把王老爷子杀了怎么办 练扫踢胫骨旁边的肌肉受伤了怎么办