A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© kuqi3712 中级黑马   /  2018-1-21 21:39  /  1644 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

Servlet:
        HTTP协议:
                协议:规定双方需要遵守的规则.
                HTTP用来规定浏览器(客户端)与服务器之间需要遵守的规则
                HTTP是基于请求和响应的模型
                请求必须先有,然后后有响应,而且必须成对出现
                默认的端口号是80
                两个常用的版本 1.0(每次响应后关闭连接)
                1.1(主要使用的,不是每次响应后挂断,是等待一个长时间后挂断)
       

        请求:
        <a>标签只能是get,只有<form>才有post
                请求行:get的提交参数会显示到地址栏上,post不会
                           get的有大小限制,post没有
                          
                请求头:通常是key:value对
                           User-Agent:代表浏览器的类型--文件下载:下载中文文件,IE使用URLEncoder编码,firfox使用BASE64
                           可以用来解决乱码问题
                           Referer:记录网站来源,可以防盗链
                          
                           If-Modified-Since:
                           通常与响应中的头Last-modified 一起查找本地缓存
                请求体:(与请求头中间有空行)
                           get没有请求体,post有请求体
                           POST提交方式提交的参数
        响应:
                响应行:协议版本 状态码 状态码的描述
                响应码 200 响应成功
                           302 重定向
                           304 查找本地缓存
                           404 访问资源不存在
                           500 服务器内部错误
                响应头:键值对的形式
                           Last-Modified 与请求中的 if-modified-since 一起查找本地缓存
                           Content-Dispostion:文件下载时使用的头信息
                           Location 重定向的跳转路径
                           Refresh定时跳转(刷新)
                                               
                响应体:(与响应头中间有空行)
                                显示的页面的内容
                               
Servlet概述:小的java程序运行在web服务器,可以用来接收和响应从客户端发送过来的请求,通常会使用http协议
                        Servlet就是sun公司提供的动态网页开发技术.
                                Servlet是线程不安全的,在里面不要写成员变量               
                                Servlet是一个单例的
                        作用:处理从客户端浏览器发送的请求,可以对请求做出响应
                       
                        使用方法:
                                编写一个类去实现Servlet接口,将这个类配置到服务器中
                        Servlet入门:
                       
                        在web.xml中添加:
                                <servlet>
                                <!--servlet的名称-->
                                <servlet-name>test1</servlet-name>
                                <!--servlet的全路径-->
                                <servlet-class>com.itheima.a_servlet.ServletDemo01</servlet-class>
                                </servlet>
                                <servlet-mapping>
                                <!--servlet的名称-->
                                <servlet-name>test1</servlet-name>
                                <!--servlet的访问路径-->
                                <url-pattern>/ServletDemo1</url-pattern>
                                </servlet-mapping>
                               
        使用ServletRequest接收参数
                        //解决中文乱码
                        req.setCharacterEncoding("UTF-8");
                       
                        getParameter (参数名) 获取指定参数名的参数的值,用于接收一个名称对应一个值的数据
                        getParameterMap() 接收表单中的所有数据,key是参数名 value是参数值
                        getParameterNames() 可以用于获取表单中提交的所有的参数的名称
                        getParameterValues(参数名)用于一个参数名对应多个参数值的
               
                Servlet                        接口                        :
                        |
                GenericServlet  通用的servlet        :
                        |
                HttpServlet                htppservlet                :体现了sun公司的野心(不局限于http)
                       
       
       
        Servlet-Service-Dao
       
        Servlet的生命周期
                从创建到销毁的过程:
                创建时期:
                        第一次访问Servlet时,服务器创建,只创建一次.       
                        tomcat(服务器)创建的,Servlet被创建的时候init方法会执行;
                        任何一次客户端想服务器发送请求,service方法就会执行,对HttpServlet而言 service
                        方法会根据不同的请求方式调用不同的doxxx方法(get odget,post doPost)
                       
                销毁时期:Servlet被销毁的时候destory就会执行;
                        关闭服务器(stop相当于正常关机 terminate相当于拔掉电源)或者将项目移除时销毁
                        并且执行destory方法
               
        Servlet的相关配置:
                <init-param>
                        <param-name></param-name>
                        <param-value></param-value>
                </init-param>
       
       
                Servlet默认是在第一次访问的时间创建的,如果象要servlet在服务器启动时就创建,就要配置
       
                servlet 在web.xml中在<Servlet></Servlet>标签中配置:

                <load-on-startup>2</load-on-startup>,传入的整数越小,被创建的优先级越高
                1已经被默认的Servklet占用(500,404...tomcat中conf中也有一个web.xml)
                <url-pattern></url-pattern>的配置:
                        (优先级最高)1.完全路径匹配:以/开始 eg:/ServletDemo  /aaa/ServletDemo
                        (优先级第二)2.目录匹配:           以/开始 需要以*(通配符所有的)结束  eg:/* , /aaa/*
                        (优先级最低)3.扩展名匹配:  以*开始(不能以/开始) eg:*.do  *.action *.jsp
                                错误的写法 /*.do
                       
                html 使用相对 服务器使用绝对的原因:
                        html中使用绝对路径要使用盘符才能找到,如果文件位置发送变化全部路径都要修改
                       
                        服务器中的绝对路径是从 tomcat中的webapps中的工程名开始的(不是从盘符开始)
                        如果拷贝到其他电脑就可以直接使用,不用全部修改
                       
                       
                开发中路径的编写:
                        相对路径:找位置的相对关系,不能以/开始 ./当前路径 ../上一级
                        绝对路径:不需要找相对关系,以/开始(尽量写绝对路径)
                                绝对路径的2种写法:
                                1.带协议的 http:localhost:8080/day11/ServletDemo
                                2.不带协议的:/day11/ServletDemo
  (转发事件路径)服务器端路径:不需要加工程名(/ServletDemo)
                                客户端路径:一定要加工程名(/day11/ServletDemo)(目前使用该路径)
        response可以设置响应头
                设置头信息的方法
                                                                        存的毫秒值
                addDataHeader(String name ,long date);
                addHeader(String name ,String value);        一个key对用多个value
                addIntHeader(String name ,int value);
               
                setDataHeader(String name ,long date);
                setHeader(String name ,String value);        一个key对应一个value
                setIntHeader(String name ,int value);
               
                例如头信息:xxx:aaa
                addHeader(xxx,bbb);结果为
                xxx:aaa,bbb 一个key对应多个value
                如果是setHeader(xxx,bbb)结果为
                xxx:bbb,之前的aaa被替换了
               
                解决应答时出现中文乱码:response.setContentType("text/html;charset=UTF-8");
                setStatus设置状态码:
                           200 响应成功
                           302 重定向
                           304 查找本地缓存
                           404 访问资源不存在
                           500 服务器内部错误
                response.setHeader(Refresh(定时跳转)Location(立即跳转) ,"time,url" );
                response.setHeader("Refresh", "5;url=/day11/register/success.html");
                response.setHeader("Location", "/day11/register/success.html");立即跳转
               
                response.setStatus(302);
                response.setHeader("Location", "/day13/register/success.html");
               
                response.sendRedirect("/day13/register/success.html")效果等同于上面2句话
                重定向
               
                ServletContext对象(域对象,作用范围是整个web工程):
               
               
               
                可以存取数据,可以在其他类里面获得
                在服务器启动时,tomcate会为每个项目创建servletContext对象
                在服务器关闭时,或者项目从服务器中移除时销毁
               
                作用:获得全局初始化参数,
                         获得文件的MIME类型
                         *作为域对象存取数据
                         可以用来读取web项目下的一些文件
                         
                setAttribute(String name,Object obj)         存数据
                getAttribute(String name)                                 取数据
                removeAttribute(String name)                        移除数据
        如何或者这个数据
                GenericServlet类中,getServletContext()方法
       
        ServletConfig对象,可以获得Servlet的配置信息.getServletConfig
                getServletName();获得servlet在web.xml配置的名称
                getInitParameter();获得servlet的初始化参数
                Enumeration(枚举) getInitParameterNames();获得所有servlet所有初始化参数名称
               
        配置初始化参数
                  <servlet>
                        <description></description>
                        <display-name>ServletDemo05</display-name>
                        <servlet-name>ServletDemo05</servlet-name>
                        <servlet-class>com.itheima.a_servlet.ServletDemo05</servlet-class>
                  <!--在这里配置初始化参数-->
                  <init-param>
                        <param-name>username</param-name>
                        <param-value>root</param-value>
                  </init-param>
                   <init-param>
                        <param-name>password</param-name>
                        <param-value>root</param-value>
                  </init-param>
                  </servlet>
                  <servlet-mapping>
                        <servlet-name>ServletDemo05</servlet-name>
                        <url-pattern>/ServletDemo05</url-pattern>
                  </servlet-mapping>

4 个回复

正序浏览
哇,厉害咯
回复 使用道具 举报
继续加油!每天总结,每天成长!
回复 使用道具 举报
继续加油哦   
回复 使用道具 举报
继续加油哦 
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马