tomcat、servlet、Http协议

tomcat&servlet
    一、网络通信三要素
        1.ip:电子设备(计算机)在网络中的唯一标识
        2.端口:应用程序在计算机中的唯一标识。(0~65536)
        3.传输协议:规定了数据传输的规则
            (1)基础协议
                tcp:安全协议,三次握手,速度稍慢
                udp:不安全协议,速度快
    二、web服务器软件
        1.服务器:安装了服务器软件的计算机
        2.服务器软件:接收用户的请求,处理请求,做出响应
        3.web服务器软件(web容器):接收用户的请求,处理请求,做出响应;在web服务器软件中,可以部署web项目,让用户通过浏览器访问这些项目
        JavaEE:Java语言在企业级开发中使用的技术规范的总合
        4.常见的web服务器软件
            weblogic:Oracle公司,大型的javaee服务器,支持所有的javaee规范,收费的
            webSphere:IBM公司,大型的javaee服务器,支持所有的javaee规范,收费的
            JBOSS:jobss公司,大型的javaee服务器,支持所有的javaee规范,收费的
            tomcat:Apache基金组织,中小型的Java服务器,开源的,免费的
    三、tomcat
        1.修改端口号:一般改为80,因为80为默认端口访问时可省略<Connector port"80">
        2.部署项目方式
            (1)直接将项目放到webapps目录下
                /hello:项目的访问路径-->虚拟路径
                简化部署:将项目打成war包,再将war包放置到webapps目录下,会自动解压,删除时删除war包其他文件也会自动删除
            (2)配置conf/server.xml文件;在<Host>标签体中配置:<Context docBase="" path="">      docBase:项目存放路径         path:虚拟目录
            (3)第二种方式不安全,改进在confCatalinalocalhost创建任意名称的xml文件,在文件中编写:<Context docBase="">      docBase:项目存放路径         xml文件的名称:虚拟目录
            (4)静态项目与动态项目
                目录结构
                    java动态项目的目录结构:项目的根目录--WEB-INF目录--web.xml:web的核心配置文件;--classes目录:放置字节码文件的的目录;--lib目录:放置依赖的jar包
    四、Servlet  :server applet
        1.概念:运行在服务器端的小程序
            servlet就是一个接口,定义了Java类被浏览器访问到(tomcat识别)的规则
            需要自定义一个类,实现servlet接口,复写方法
        2.使用servlet
            (1)2.创建javaEE项目
            (2)定义一个类实现servlet接口
            (3)实现接口中的 抽象方法
            (4)配置Servlet,在web.xml中配置
            (5)执行原理:
                当服务器接收到客户端浏览器请求后,会解析URL路径,获取访问的Servlet的资源路径
                查找web.xml文件,是否有对应的<url-pattern>标签体内容
                如果有,则在找对应的<servlet-class>全类名
                tomcat则将字节码文件加载进内存,并且创建其对象
                调用方法
        3.Servlet生命周期
            (1)被创建:执行init方法,只执行一次(一般用于加载资源)
                Servlet默认情况下,第一次访问时被创建;也可以指定创建时机 ;在<Servlet>标签下创建
                只执行一次,说明一个Servlet在内存中只存在一个对象,Servlet是单列的;多个用户同时访问时,可能存在线程安全问题;解决:尽量不要再Servlet中定义全局变量,即使定义了成员变量,不要对其修改值
            (2)提供服务:执行service方法,执行多次
                每次访问Servlet时,该方法都会被执行
            (3)被销毁:执行destroy方法,只执行一次
                Servlet被销毁时执行,服务器关闭时,Servlet被销毁
                只有服务器正常关闭时,才会执行destroy
                destroy方法在Servlet销毁前执行,一般用于释放资源
        4.Servlet3.0注解配置
            (1)好处
                支持注解配置,可以不需要web.xml
            (2)步骤
                创建Java EE项目时,选择Servlet的版本在3.0以上,可以不创建web.xml
                定义一个类,实现Servlet接口
                复写方法
                在类上使用@WebServlet注解进行配置
        5.servlet的体系结构
            GenericServlet:抽象类
                HttpServlet:抽象类
            GenericServlet:抽象类
                将Servlet接口中其他的方法做了默认空实现,只将service()方法作为抽象类,继承时可以只实现service()方法
            HttpServlet:对http协议的封装,简化操作
                (1)定义类继承HttpServlet
                (2)重写doGet/doPost方法
        6.urlpartten:Servlet访问(@WebServlet("/demo3"))
            (1)一个servlet可以定义多个访问路径@WebServlet({"/demo3","/d1","d2"})
            (2)路径的定义规则:/xxx       ;/xxx/xxx(多层路径)        ;*.do :扩展名匹配       (*)通配符
    五、IDEA与tomcat相关配置
        1.idea会为每一个tomcat部署的项目单独建立一份部署
        2.存储位置:工作空间项目和tomcat部署的web项目;
            (1)tomcat真正访问的是"tomcat部署的web项目"对应着“工作空间项目”的web目录下的所有资源
            (2)WEB-INF目录下的资源被浏览器不能直接访问
            (3)断点调试,点击dubug
    HTTP
        一、概念:Hyper Text Transfer Protocol 超文本传输协议;
            1.传输协议:定义了,客户端和服务端通信时,发送数据的格式
            2.特点
                (1)基于TCP/IP的高级协议
                (2)默认端口号:80(http://www.baidu.cn:80)
                (3)基于请求/响应模型的:一次请求对应一次响应
                (4)无状态得到:每次请求之间相互独立,不能交互数据
        二、请求消息数据格式
            1.请求行
                请求方式 请求url 请求协议/版本:GET /login.html HTTP/1.1
                请求方式http有7种,常用的有2种
                    GET:请求参数在,url中 请求行中;请求的url长度是有限制的;不太安全
                    POST:请求参数在请求体中;请求的url没有长度;较为安全
            2.请求头:客户端浏览器告诉服务器的一些信息
                请求头名称:请求值
                    Host: localhost:8080
                    User-Agent:浏览器告诉服务器,使用的版本信息;可以在服务器端获取该头的信息,解决浏览器兼容问题
                    Request (URL):http://localhost:8080/servlet/login.html         ;告诉服务器当前请求从哪里来,作用:防盗链; 统计工作
            3.请求空行
                空行,分隔作用(分割POST请求头和请求体)
            4.请求体(正文):post有请求体,get没有请求体
                封装POST请求信息的请求参数
        三、Request(对应请求信息)
            1.request对象和response对象的原理
                request和response对象时由服务器创建的
                request对象是来获取请求消息,response对象是来设置响应消息
            2.request对象继承体系结构
                (1)ServletRequest接口
                (2)HttpServletRequest:为1的子接口
                (3)由tomcat创建一个实现类
            3.request对象获取请求消息
                (1)获取请求消息数据
                    获取请求行:GET /day14/demo1?name=zhangsan HTTP/1.1
                        请求方式:GET:String getMethod()
                        (*)获取虚拟目录:/day14: Strig getContsxtPath()
                        获取Servlet路劲:/demo1:String getServletPath()
                        获取get方式请求参数:name=zhangsan:String getQueryString()
                        (*)获取请求的uri:/day14/demo1 :String getRequestURI():/day/demo1           ;StringBuffer getRequestURL()  :http://localhost/day14/demo1
                        获取协议和版本号:HTTP/1.1:String getProtocol()
                        获取客户机的IP地址:String getRemoteAddr()
                    获取请求头数据
                        方法
                            (*)String getHeader(String name):通过请求头的名称获取请求头的值
                            Enumeration<String> getHeaderNames():获取所有的请求头名称
                            打印信息显示在网页上
                    获取请求体数据*(只有post请求方式有请求体,在请求体中封装了POST请求的请求参数)
                        获取流对象
                            获取字符输入流:BufferedReader getReader();只能操作字符数据
                            ServletInputStream getInputStream()获取字节输入流,可以操作所有类型数据(文件上传)
                        再从流对象中拿数据
                (2)其他功能
                    获取请求参数通用方式(get和post都可以使用)
                        String getParmenter (String name) :根据参数名称获取参数值  username=zhangsan&password=123
                        String[] getParmeterValues(String name):根据参数名称获取参数值的数组
                        Enumeration<String> getParameterNames();获取所有请求参数的名称
                        Map<String,String[]> get ParameterMap():获取所有参数的map集合
                        处理post乱码问题
                    请求转发:一种在服务器内部资源跳转的方式  forward
                        步骤
                            通过request对象获取请求转发器对象:RequestDispatcher getRequestDispatcher(String path)
                            使用RequestDispatcher对象进行转发:forward(ServletRequest request,ServletResponse response)
                        特点
                            浏览器地址栏路径没有发生变化
                            只能转发到当前服务器内部资源
                            转发是一次请求
                    共享数据
                        域对象:一个有作用范围的对象,可以在一定范围内共享数据
                        request域:代表一次请求的范围,一般用于请求转发多个资源中共享资源
                        方法
                            setAttribute(String name, Object obj):存储数据
                            Object getAttitude(String name):通过键获取值
                            removeAttribute(String name):通过键移除键值对
                    获取ServletContext
                        ServletContext getServletContext()
                    BeanUtils工具类,简化数据封装,用于封装JavaBean
                        JavaBean:标准类
                            类必须被public修饰
                            必须提供空参构造器
                            成员变量必须使用private修饰
                            提供getter和setter方法
                            作用:封装数据
                        概念
                            成员变量
                            属性:getter和setter方法截取后的产物
                        方法
                            setProperty()
                            getProperty()
                            populate(Object obj,Map map):将map集合的键值对信息,封装到对应的JavaBean对象中
        四、响应消息格式
            1.响应行
                组成
                    协议/版本 响应状态码 状态码描述
                    响应状态码:服务器告诉客户端浏览器本次请求和相应的一个状态;(状态码都是3位数字)1xx~5xx      1xx:服务器接收客户端消息,但没有接收完成,等待一段时间后,发送1xx多状态码    2xx:成功,代表:200         3xx:重定向。代表:302(重定向)304(访问缓存)  4xx:客户端错误 。代表404(请求路径没有对应的资源) 405(请求方式没有对应的doxxx方法doget)    5xx:服务器错误 :服务器端错误。500(服务器内部错误)
            2.响应头
                格式:头名称:值
                常见响应头
                    Content-type:服务器告诉客户端本次响应体数据格式以及编码格式
                    Content-disposition:服务器告诉客户端以什么样的格式打开响应体信息;值:in-line(默认值,在当前页面内打开)   attachment:以附件形式打开响应体,文件下载
            3.响应空行
            4.响应体
                传输的数据
        五、response对象
            1.功能:设置响应消息
                (1)设置响应行
                    格式:HTTP/1.1 200 ok
                    设置状态码:setStatus(int sc)
                    简单的重定向方法:response.sedRedirect("虚拟路径");
                    重定向特点:redirect
                        地址栏发生变化
                        重定向可以访问其他站点(服务器)的资源
                        重定向是两次访问,不能使用request共享数据
                    路径写法
                        相对路径:通过相对路径不可以确定唯一资源,不以斜杠开头,以.开头路径              规则:找到访问当前资源和目标资源相对位置的关系 
                        绝对路径:通过绝对路径确定唯一资源;以斜杠开头的路径                                       规则:判断定义的路径是给谁用的(客户端需要加虚拟目录,建议动态获取点击注册/给服务器使用不需要加虚拟目录转发)
                (2)设置响应头:setHeader(String name,String value)
                (3)设置响应体:
                    使用步骤
                        获取输出流
                            字节输出流:ServletOutputStream getOutputStream() ; 指定字符集
                            字符输出流:PrintWrite getWriter()     ;指定字符集
                        验证码
                            目的:防止恶意注册
                        使用输出流,将服务器数据输出到客户端浏览器
        六、ServletContext对象
            1.概念:代表整个web应用,可以和程序的容器(服务器)来通信
            2.功能
                (1)获取MIME类型:在互联网通信过程中定义的一种文件类型
                    MIME格式:大类性/小类型  text/heml              image/jpeg
                    获取:String getMimeType(String file)
                (2)域对象:共享数据(范围:共享所有的用户数据)
                    setAttribute(String name,Object value)
                    getAttribute(String name)
                    removeAttribute(String name)
                (3)获取文件的真实(服务器)路径
                    String getRealPath(String path)
            3.获取
                (1)通拓request对象获取:request.getServletContext()
                (2)HttpServlet获取:this.getServletContext();
        七.文件下载
            1.默认情况下超链接指向的资源能被浏览器解析会直接打开,不能被解析则会弹出下载框
            2.任何情况下都必须弹出下载框,使用响应头设置打开方式:content-disposition:attachment;filename=xxx(文件名称)
                步骤
                    定义页面,编辑超链接herf属性,指向Servlet,传递资源的名称filename
                    定义Servlet
                        获取文件名称
                        使用字节输入流加载文件进内存
                        指定response的响应头content-disposition:attachment;filename=xxx(文件名称)
                        将数据写入到response输出流
            3.中文文件名
                处理方式
                    获取客户端使用的浏览器版本信息
                    根据不同的版本信息,相应不同的数据,设置filename的编码方式

HTTP
    一、概念:Hyper Text Transfer Protocol 超文本传输协议;
        1.传输协议:定义了,客户端和服务端通信时,发送数据的格式
        2.特点
            (1)基于TCP/IP的高级协议
            (2)默认端口号:80(http://www.baidu.cn:80)
            (3)基于请求/响应模型的:一次请求对应一次响应
            (4)无状态得到:每次请求之间相互独立,不能交互数据
    二、请求消息数据格式
        1.请求行
            请求方式 请求url 请求协议/版本:GET /login.html HTTP/1.1
            请求方式http有7种,常用的有2种
                GET:请求参数在,url中 请求行中;请求的url长度是有限制的;不太安全
                POST:请求参数在请求体中;请求的url没有长度;较为安全
        2.请求头:客户端浏览器告诉服务器的一些信息
            请求头名称:请求值
                Host: localhost:8080
                User-Agent:浏览器告诉服务器,使用的版本信息;可以在服务器端获取该头的信息,解决浏览器兼容问题
                Request (URL):http://localhost:8080/servlet/login.html         ;告诉服务器当前请求从哪里来,作用:防盗链; 统计工作
        3.请求空行
            空行,分隔作用(分割POST请求头和请求体)
        4.请求体(正文):post有请求体,get没有请求体
            封装POST请求信息的请求参数
    三、Request(对应请求信息)
        1.request对象和response对象的原理
            request和response对象时由服务器创建的
            request对象是来获取请求消息,response对象是来设置响应消息
        2.request对象继承体系结构
            (1)ServletRequest接口
            (2)HttpServletRequest:为1的子接口
            (3)由tomcat创建一个实现类
        3.request对象获取请求消息
            (1)获取请求消息数据
                获取请求行:GET /day14/demo1?name=zhangsan HTTP/1.1
                    请求方式:GET:String getMethod()
                    (*)获取虚拟目录:/day14: Strig getContsxtPath()
                    获取Servlet路劲:/demo1:String getServletPath()
                    获取get方式请求参数:name=zhangsan:String getQueryString()
                    (*)获取请求的uri:/day14/demo1 :String getRequestURI():/day/demo1           ;StringBuffer getRequestURL()  :http://localhost/day14/demo1
                    获取协议和版本号:HTTP/1.1:String getProtocol()
                    获取客户机的IP地址:String getRemoteAddr()
                获取请求头数据
                    方法
                        (*)String getHeader(String name):通过请求头的名称获取请求头的值
                        Enumeration<String> getHeaderNames():获取所有的请求头名称
                        打印信息显示在网页上
                获取请求体数据*(只有post请求方式有请求体,在请求体中封装了POST请求的请求参数)
                    获取流对象
                        获取字符输入流:BufferedReader getReader();只能操作字符数据
                        ServletInputStream getInputStream()获取字节输入流,可以操作所有类型数据(文件上传)
                    再从流对象中拿数据
            (2)其他功能
                获取请求参数通用方式(get和post都可以使用)
                    String getParmenter (String name) :根据参数名称获取参数值  username=zhangsan&password=123
                    String[] getParmeterValues(String name):根据参数名称获取参数值的数组
                    Enumeration<String> getParameterNames();获取所有请求参数的名称
                    Map<String,String[]> get ParameterMap():获取所有参数的map集合
                    处理post乱码问题
                请求转发:一种在服务器内部资源跳转的方式  forward
                    步骤
                        通过request对象获取请求转发器对象:RequestDispatcher getRequestDispatcher(String path)
                        使用RequestDispatcher对象进行转发:forward(ServletRequest request,ServletResponse response)
                    特点
                        浏览器地址栏路径没有发生变化
                        只能转发到当前服务器内部资源
                        转发是一次请求
                共享数据
                    域对象:一个有作用范围的对象,可以在一定范围内共享数据
                    request域:代表一次请求的范围,一般用于请求转发多个资源中共享资源
                    方法
                        setAttribute(String name, Object obj):存储数据
                        Object getAttitude(String name):通过键获取值
                        removeAttribute(String name):通过键移除键值对
                获取ServletContext
                    ServletContext getServletContext()
                BeanUtils工具类,简化数据封装,用于封装JavaBean
                    JavaBean:标准类
                        类必须被public修饰
                        必须提供空参构造器
                        成员变量必须使用private修饰
                        提供getter和setter方法
                        作用:封装数据
                    概念
                        成员变量
                        属性:getter和setter方法截取后的产物
                    方法
                        setProperty()
                        getProperty()
                        populate(Object obj,Map map):将map集合的键值对信息,封装到对应的JavaBean对象中
    四、响应消息格式
        1.响应行
            组成
                协议/版本 响应状态码 状态码描述
                响应状态码:服务器告诉客户端浏览器本次请求和相应的一个状态;(状态码都是3位数字)1xx~5xx      1xx:服务器接收客户端消息,但没有接收完成,等待一段时间后,发送1xx多状态码    2xx:成功,代表:200         3xx:重定向。代表:302(重定向)304(访问缓存)  4xx:客户端错误 。代表404(请求路径没有对应的资源) 405(请求方式没有对应的doxxx方法doget)    5xx:服务器错误 :服务器端错误。500(服务器内部错误)
        2.响应头
            格式:头名称:值
            常见响应头
                Content-type:服务器告诉客户端本次响应体数据格式以及编码格式
                Content-disposition:服务器告诉客户端以什么样的格式打开响应体信息;值:in-line(默认值,在当前页面内打开)   attachment:以附件形式打开响应体,文件下载
        3.响应空行
        4.响应体
            传输的数据
    五、response对象
        1.功能:设置响应消息
            (1)设置响应行
                格式:HTTP/1.1 200 ok
                设置状态码:setStatus(int sc)
                简单的重定向方法:response.sedRedirect("虚拟路径");
                重定向特点:redirect
                    地址栏发生变化
                    重定向可以访问其他站点(服务器)的资源
                    重定向是两次访问,不能使用request共享数据
                路径写法
                    相对路径:通过相对路径不可以确定唯一资源,不以斜杠开头,以.开头路径              规则:找到访问当前资源和目标资源相对位置的关系 
                    绝对路径:通过绝对路径确定唯一资源;以斜杠开头的路径                                       规则:判断定义的路径是给谁用的(客户端需要加虚拟目录,建议动态获取点击注册/给服务器使用不需要加虚拟目录转发)
            (2)设置响应头:setHeader(String name,String value)
            (3)设置响应体:
                使用步骤
                    获取输出流
                        字节输出流:ServletOutputStream getOutputStream() ; 指定字符集
                        字符输出流:PrintWrite getWriter()     ;指定字符集
                    验证码
                        目的:防止恶意注册
                    使用输出流,将服务器数据输出到客户端浏览器
    六、ServletContext对象
        1.概念:代表整个web应用,可以和程序的容器(服务器)来通信
        2.功能
            (1)获取MIME类型:在互联网通信过程中定义的一种文件类型
                MIME格式:大类性/小类型  text/heml              image/jpeg
                获取:String getMimeType(String file)
            (2)域对象:共享数据(范围:共享所有的用户数据)
                setAttribute(String name,Object value)
                getAttribute(String name)
                removeAttribute(String name)
            (3)获取文件的真实(服务器)路径
                String getRealPath(String path)
        3.获取
            (1)通拓request对象获取:request.getServletContext()
            (2)HttpServlet获取:this.getServletContext();
    七.文件下载
        1.默认情况下超链接指向的资源能被浏览器解析会直接打开,不能被解析则会弹出下载框
        2.任何情况下都必须弹出下载框,使用响应头设置打开方式:content-disposition:attachment;filename=xxx(文件名称)
            步骤
                定义页面,编辑超链接herf属性,指向Servlet,传递资源的名称filename
                定义Servlet
                    获取文件名称
                    使用字节输入流加载文件进内存
                    指定response的响应头content-disposition:attachment;filename=xxx(文件名称)
                    将数据写入到response输出流
        3.中文文件名
            处理方式
                获取客户端使用的浏览器版本信息
                根据不同的版本信息,相应不同的数据,设置filename的编码方式

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
THE END
分享
二维码
< <上一篇
下一篇>>