java第二阶段之web服务器(一)

java第二阶段之web服务器(一),第1张

java第二阶段之web服务器(一) 一、HTTP协议的介绍 (一)HTTP概念

        Hypertext Transfer Protocol,HTTP超文本传输协议,是一个简单的请求-响应协议。规定了客户端和服务器之间,传输数据的一种格式。

(二)HTTP特点

        1.简单快速。客户端向服务器请求服务时,只需要传送请求方法和路径。

        2.灵活。HTTP协议允许传送任意格式的数据。正在传输的类型由,content-type标明。

        3.无连接。就是每个请求都建立一个连接,请求处理完毕并发送至客户端之后就断开连接。这样明显有其缺点,就是在需要连续发送请求时,需要为每一个请求单独的再次建立连接,很浪费时间和资源。于是在HTTP协议1.1版本之后引入了可持续连接,也就是再每一个请求处理完毕后,它不会立刻就断开连接,而是再等待一段时间,如果在此期间又有新的请求过来,那么等待时间刷新,如果没有,则等待时间完毕后,连接关闭。

        4.无状态。是指协议对于每次请求的处理没有记忆能力,它不知道之前是否已经访问过,不保留访问痕迹。主要目的是为了保证数据传输的安全性。

(三)传输数据的特点         1、request请求

        请求分为三部分:

        请求行:请求行中,我们可以通过request对象的相应方法获取到比如协议名、服务名、端口号、项目名称、请求方式、参数列表等信息。

        请求头:请求头是当前对用户发送的数据的描述信息。请求头信息在请求的时候不需要程序员手动添加,是浏览器发送的时候已经处理好的。

        请求体:请求体就是请求中携带的数据,也就是我们需要获取的参数。

2、response响应

        响应分为三部分:

        响应行:响应行中包含协议和版本

        响应头:服务器想要告诉浏览器的一些信息。

        响应体:服务器响应给浏览器的源码信息

二、Servlet (一)Servlet概念

        Servlet是运行在web服务器中的小型Java程序。Servlet通常通过HTTP接收和响应来自web客户端的请求

 

(二)Servlet使用

        以实际例子体现:

        1、需求:

        写一个HTML页面将一个表单中的账号和密码传递到java类中并打印输出到控制台。

 

        2、步骤

        ①创建HTML页面,并设计表单

        ②创建一个普通类,并继承HTTPServlet抽象类,重写service方法。

        ③在web.xml文件中注册servlet,作为前后台连接的中间件

        ④修改前后台表单中的action的请求地址

        ⑤通过浏览器输入对应的地址来访问测试

        3、代码实现

        ①表单




    
    登录页面





        页面展示:

 

        ②创建普通类继承HTTPServlet

package com.offcn.web;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

//继承HTTPServlet必须要导入一个Servlet jar包,这个jar包在tomcat下的lib文件夹下servlet-api.jar
public class ServletDemo01 extends HttpServlet {
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //获取表单里的值
        String name = req.getParameter("username");
        String password = req.getParameter("password");
        //在控制台输出获取的值
        System.out.println("账号:"+name);
        System.out.println("密码:"+password);
    }
}

        ③在web.xml文件中注册Servlet,作为前后台的中间件

        这个文件是javaweb项目下的web或者是WEB-INF下的web.xml



  Day13
  
    index.html
    index.jsp
  

    

        firstWeb

        com.offcn.web.ServletDemo01
    

    

        firstWeb

        /login
    

④测试

 

 

(三)Servlet原理

 

        实现原理:

        1、当服务器接收到客户端浏览器的请求后,先解析请求的url路径,获取访问Servlet的资源路径。

        2、查找项目的web.xml,根据资源路径匹配web.xml中的中的

        3、如果没有匹配到报404,如果匹配到了,根据中的

        4、再去匹配中的如果没有匹配到报404

        5、如果匹配到了,执行中的 从而一反射的方式访问到指定的Servlet,调用其方法

(四)Servlet生命周期

        servlet的生命周期分为三个阶段:初始化、使用(提供服务)、销毁

        1、init()初始化阶段:默认情况当第一次访问Servlet时,Servlet容器(tomcat)会加载Servlet,加载完成后,Servlet(tomcat)会创建一个Servlet实例并调用init()方法进行初始化;如果需要改变创建时机,只需要在web.xml文件中配置load-on-startup节点值大于等于0的整数即可。

        init()方法只会执行一次,也说明一个Servlet只有一个实例,即单例模式。

        2.service()服务阶段:当Servlet每次被访问一次,service方法就会自动被调用一次,所以该方法可执行多次。

        3、Destroy()销毁阶段:当关闭服务器或资源重新加载时,destroy方法会被执行,这就标志着整个Servlet的生命周期到此结束。该方法仅被执行一次。

(五)Servlet注解方式的使用

        目的:简化web.xml文件配置

        以之前的login页面为例,之前的测试写了三个文件,分别是HTML显示页面,Servlet后台逻辑和web.xml中间连接文件。而注解的目的就是直接跳过web.xml文件,也就是说,用了注解之后,再完成以上功能,就只用写两个文件就行了。

        示例代码:

        表单页面不变,action依然选择地址login




    
    登录页面





        Servlet层,设置注解

package com.offcn.web;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
//与html中的action值相同
@WebServlet("/login")
public class ServletDemo01 extends HttpServlet {
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //获取表单里的值
        String name = req.getParameter("username");
        String password = req.getParameter("password");
        //在控制台输出获取的值
        System.out.println("账号:"+name);
        System.out.println("密码:"+password);
    }
}

        注意事项:

        一个Servlet的配置可以使用注解,也可以使用web.xml文件,但是二者不能共存,只能任选其一,否则会报错。

三、request (一)Request的理解以及体系

        1、request是由tomcat创建的

        2、request对象是来获取请求信息的

        request是实现的HttpServletRequest接口

 

        在重写service方法的时候,自动以参数的形式传过来的,我可以直接使用。

        3、request的作用

        接收客户端的请求,获取请求中的信息。除了可以获取请求中的携带的数据之外,还可以获取比如主机地址、端口、请求方式、项目名称等一系列信息。

        请求分类:

        请求行、请求头、请求体

(二)获取请求行数据

        请求行中,我们可以通过request对象的相应方法获取到比如协议名、服务名、端口号、项目名称、请求方式、参数列表等信息。

        1、req.getScheme(); 获取协议名

        2、req.getServerName(); 获取服务器名

        3、req.getServerPort(); 获取端口号

        4、req.getContextPath(); 获取项目名

        5、req.getMethod(); 获取请求方式

        6、req.getQueryString(); 获取参数字符串

        7、req.getRequestURI(); 获取具体地址

        8、req.getRequestURL(); 获取请求的URL

        9、req.getServletPath(); 获取服务器路径

        注意:

        全部以字符串的形式返回。

(三)获取请求头数据

        请求头是当前对用户发送的数据的描述信息。

        将浏览器的相关信息发送给服务器

        请求头信息在请求的时候不需要程序员手动添加,是浏览器发送的时候已经处理好的。

        如果想查看请求头信息,也可以在Servlet中通过getHeader方法获取

        1、获取请求头数据的方法

 

(四)获取请求正文数据         1、获取流对象

        只有post请求方式,才有请求体,在请求体重封装了post请求的请求参数

        步骤:

        ①获取流对象(字符流/字节流)

        ②在从流对象中拿数据

        获取流对象的方式:

        ①BufferedReader getReader() 获取字符输入流

        ②ServletInputStream getInputStream() 获取字节输入流

        2、获取流对象的方式

        请求体就是请求中携带的数据,也就是我们需要获取的参数。

        获取请求参数的方法:

 

        3、解决中文乱码

       

req.setCharacterEncoding("utf-8");
resp.setContentType("text/html;charset=utf-8");
(五)请求转发         1、介绍

        一种在服务器内部资源跳转的方式。浏览器请求ServletA资源时,ServletA资源不足或者没有资源,ServletA请求其他的资源然后响应给浏览器,这个过程叫转发;浏览器向服务器发送请求,服务器接收请求后调用A处理请求,但是A处理一部分后将剩下的部分交给B去处理。

 

        2、实现

        req.getRequestDispatcher("路径").forward(req,resp);

        request对象的特性:

        ①共享域:在同一个请求中,能够实现多个组件之间的数据共享(所涉及的所有组件都会共享request对象上保存的数据)

        作用域:一个请求的大小

        ②能够保存(绑定)数据

        req.setAttribute(String key,Object value);

        3、获取绑定的数据

        Object req.getAttribute(String key);

        4、移除绑定数据

        req.removeAttribute(String key)

        3、特点

        ①转发发生在服务器内部,浏览器不知道

        ②转发的过程中url地址不变

        ③转发可以访问到WEB-INF中的资源

        ④转发的路径是当前项目下,因此转发不可以访问项目以外的资源

        ⑤转发的路径一般是相对路径

        ⑥转发发生在一次请求中

四、response (一)简介         1、介绍

        response是由tomcat创建的,response对象是来设置响应信息

        response实现了HTTPServletResponse接口

 

        2、作用

        针对页面发送的请求做出数据响应,向页面输出信息,包括文本、图片、视频等。

        响应分类:

        响应行、响应头、响应体

(二)设置响应头

        设置响应头信息可以通过一下两种方法:

        response.setHeader(String name,String value);

        response.addHeader(String name,String value);

        二者的区别:

                setHeader:一个关键字可以对应一个值,如果设置了多个值,则会覆盖。

                addHeader:一个关键字可以对应多个值,在实际开发中,同一个响应头信息只会对应一个值,所以在使用时一般没什么区别。

(三)设置响应体

        响应的数据就是响应体。响应对象response在返回数据、响应数据的时候,会将一些HTML、text、流数据等信息通过响应主体返回给页面,而响应体绝大多数都是文本类型。

        响应数据需要通过流来进行数据传输,而response自带的流有两个:

                response.getWriter()==>PrintWriter 输出文本信息

                response.getOutputStream==>ServletOutputStream 输出字节信息,比如图片、音频、视频

        需要注意:这两个流不能同时存在。

(四)重定向         1、理解

        重定向是客户端行为,当客户端浏览器向AServlet发送一个请求,经过处理后向客户端做出响应,这个响应就是向服务器再次发出新的请求,去请求BServlet,而这个新请求的地址将为浏览器做出第二次响应,此时浏览器地址栏会发生改变,由于一次请求/响应结束后,request对象回自动销毁,所以两次请求的request对象并非同一个,座椅两次请求域中的数据信息不会共享。由此可见,重定向是做了两次请求和响应。

 

        2、实现

        response.sendRedirect(String path);

        path:重定向的地址

        3、特点

        ①重定向发生在浏览器和服务器之间

        ②重定向的过程url发生改变

        ③重定向发生至少两次请求中

        ④重定向访问不到WEB-INF的资源

        ⑤重定向可以访问当前应用外的资源

        ⑥重定向一般使用绝对路径

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/5583295.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-14
下一篇 2022-12-14

发表评论

登录后才能评论

评论列表(0条)

保存