JavaEE-JavaWeb学习之Servlet篇

9 篇文章 1 订阅
1 篇文章 0 订阅

HTML&CSS&JavaScript&JQuery之Servlet篇

1 Servlet

  • 什么是Servlet:是一种JavaEE规范(接口),是JavaEE三大组件之一,是运行在服务器上的java程序,可以接收和响应客户端请求。三大组件分别是Servlet程序、Filter过滤器、Listener监听器

2 创建Servlet

  1. 创建一个类实现Servelt接口
  2. 实现service方法,处理请求和响应
package servlet_;

import javax.servlet.*;
import java.io.IOException;

/**
 * @author linxi
 * @project webhelloworld01
 * @package servlet_
 * @date 2020/3/12-5:43 下午
 */
public class helloServlet implements Servlet {
    @Override
    public void init(ServletConfig servletConfig) throws ServletException {

    }

    @Override
    public ServletConfig getServletConfig() {
        return null;
    }

    /**
     * 专门用来处理请求和相应的
     * @param servletRequest
     * @param servletResponse
     * @throws ServletException
     * @throws IOException
     */
    @Override
    public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
        System.out.println("helloworldservelt");
    }

    @Override
    public String getServletInfo() {
        return null;
    }

    @Override
    public void destroy() {

    }
}


  1. 配置xml文件:WEB-INF -> web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
         version="4.0">

    <!--Servlet标签给Tomcat配置Servelt配置程序-->
    <servlet>
        <!--Servelt程序别名-->
        <servlet-name>helloServlet</servlet-name>
        <!--Servelt程序全类名-->
        <servlet-class>servlet_.helloServlet</servlet-class>
    </servlet>
    <!--给Servelt程序配置访问地址-->
    <servlet-mapping>
        <!--告知服务器配置的地址给哪个Servelt程序使用-->
        <servlet-name>helloServlet</servlet-name>
        <!--配置访问地址

        /    表示地址为http://ip:port/工程路径
        /hello      表示http://ip:port/工程路径/hello
        -->
        <url-pattern>/hello</url-pattern>
    </servlet-mapping>
</web-app>

3 Servlet生命周期

  1. 执行Servlet构造器方法(只执行一次)
  2. 执行init初始化方法(只执行一次)
  3. 执行service方法(每次访问都会执行)
  4. 执行destroy销毁方法(web停止时调用)

4 通过集成HttpServlet实现Servlet程序

  • 一般实际开发中都使用集成HttpServlet实现Servlet程序
  • 方法:
    1. 编写一个类去集成HttpServlet
    2. 根据业务需要重写doGet或doPost方法
    3. 到web.xml中的配置Servelt程序访问地址
package servlet_;

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

/**
 * @author linxi
 * @project webhelloworld01
 * @package servlet_
 * @date 2020/3/12-8:43 下午
 */
public class helloServelt1 extends HttpServlet {
    /**
     * 在get请求的时候调用
     * @param req
     * @param resp
     * @throws ServletException
     * @throws IOException
     */
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //super.doGet(req, resp);
        System.out.println("doget方法");
    }

    /**
     * 在post请求的时候调用
     * @param req
     * @param resp
     * @throws ServletException
     * @throws IOException
     */
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //super.doPost(req, resp);
        System.out.println("dopost方法");
    }
}

5 使用IDEA创建Servlet程序

  • 取消选择Creat JavaEE6 annotated class

6 Servlet继承体系

Interface Servlet <-实现- Class GenericServlet <-继承- Class HttpServlet <-继承- 自定义Servlet类

7 ServletConfig类(Servlet配置信息类)

  • Servelt程序和ServeltConfig对象由tomcat服务器创建,Servelt是第一次访问的时候创建,ServeltConfig是每个Servelt程序创建时就创建一个对应的ServeltConfig对象

  • 作用

    1. 获取Servelt程序别名servlet-name的值
    2. 获取初始化参数init-param
    3. 获取ServeltContext对象
    
     @Override
     public void init(ServletConfig servletConfig) throws ServletException {
         //获取Servelt程序别名servlet-name的值
         servletConfig.getServletName();
         //获取初始化参数init-param
         servletConfig.getInitParameter("username");
         servletConfig.getInitParameter("url");
         //获取ServeltContext对象 
         servletConfig.getServletContext();
     }
    
    

8 ServletContext接口类(表示Servelt上下文对象)

  • 每个工程只有一个ServeltContext对象实例

  • ServeltContext在工程部署时候创建,在工程停止时销毁

  • ServeltContext是一个域对象。

    • 域对象是一个可以像Map一样存取数据的对象
    存数据取数据删除数据
    Mapput()get()remove()
    域对象setAttribute()getAttribute()removeAttribute()
  • 作用:

    1. 获取web.xml中配置的上下文参数context-param
    2. 获取当前工程路径,格式:/工程路径
    3. 获取工程部署后在服务器硬盘上的绝对路径
    4. 像Map一样存取数据
      例子:
     @Override
     protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
         //获取web.xml中配置的上下文参数context-param
         ServletContext servletContext = getServletConfig().getServletContext();
         servletContext.getInitParameter("username");
         //获取当前工程路径,格式:/工程路径
         servletContext.getContextPath();
         //获取工程部署后在服务器硬盘上的绝对路径
         /**
          * /代表http://ip:port/工程名/
          */
         //获取工程部署路径
         servletContext.getRealPath("/");
         //获取css部署路径
         servletContext.getRealPath("/css");
         //像Map一样存取数据
         servletContext.setAttribute("key1","value1");
         servletContext.getAttribute("key1");
         servletContext.removeAttribute("key1");
     }
    

9 HTTP协议

  • 客户端域服务器通信时发送的数据需要遵守HTTP协议,发送的数据叫报文

9.1 get请求

  • 请求行:
    1. 请求的方式:GET
    2. 请求的资源路径[+?+请求参数]
    3. 请求的协议的版本号:http/1.1
  • 请求头:
    1. key:value组成,不同的键值对表示不同的含义

9.2 post请求

  • 请求行:
    1. 请求的方式:GET
    2. 请求的资源路径[+?+请求参数]
    3. 请求的协议的版本号:http/1.1
  • 请求头:
    1. key:value组成,不同的键值对表示不同的含义
  • 空行
  • 请求体:
    1. 发送给服务器的数据

10 GET和POST的区别

  • GET的请求:
    1. from标签 method=get
    2. a标签
    3. link标签引入css
    4. Script标签引入js文件
    5. img标签引入图片
    6. iframe引入html页面
    7. 在浏览器地址栏中输入地址后回车
  • post请求
    1. from标签 method=post

11 相应的HTTP协议格式

  • 相应行
    • 相应的协议和版本号
    • 相应状态码
    • 响应状态描述符
  • 相应头
    • key:value 不同的相应头,有其不同含义
  • 相应体:回传给客户端的数据

12 常见响应码

  • 200:请求成功
  • 302:重新定向
  • 404:请求地址错误
  • 500:服务器收到请求但服务器内部错误

13 HttpServletRequest类

  • 每次有请求进入TomCat服务器,TomCat会把请求过来的信息解析好封装到Request对象中然后传递到service方法中供使用,所以可以通过HttpServletRequest对象获取到所有的请求信息。
  • 常用方法
getRequestURI();//获取请求的资源路径
getRequestURL();//获取请求的同意资源定位符(绝对路径)
getRemoteHost();//获取客户端ip地址
getHeader();//获取请求头
getParameter();//获取请求参数
getParameterValues();//获取多个请求参数
getMethod();//获取请求的方式GET和POST
setAttribute(key,value);//设置域数据
getAttribute(key);//获取域数据
getRequestDispatcher();//获取请求转发对象

14 请求的转发

  • 服务器收到请求后从一个资源跳到另一个资源

  • 特点

    1. 浏览器地址栏没变化
    2. 只有一次请求
    3. 共享Request域中数据
    4. 可以转发到WEB-INF目录下
    5. 不可以访问工程以外的目录
  • base:设置页面相对路径工作路径参照的地址

<base href="参考地址">

15 HttpServletResponse类

  • 每次有请求进入TomCat服务器,TomCat会把请求过来的信息解析好封装到Request对象中然后传递到service方法中供使用,所以可以通过HttpServletResponse对象获取到所有的响应信息。

  • 包含的两个输出流

    1. 字节流(getOutputStream();):传递二进制数据
    2. 字符流(getWriter();):回传字符串
    • 注意:两个流只能同时使用一个。
  • 回传数据:

@Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //往客户端回传数据
        PrintWriter writer = response.getWriter();
        writer.write("回传内容");
    }

16 请求重定向

  • 请求重定向,是指客户端给服务器发请求,然后服务器告诉客户端说。我给你一些地址。你去新地址访问。叫请求重定向(因为之前的地址可能已经被废弃)。

  • 特点

    1. 浏览器地址栏有变化
    2. 两次请求
    3. 不共享Request域中数据
    4. 不可以转发到WEB-INF目录下
    5. 可以访问工程以外的目录
  • 方式一:

// 设置响应状态码 302 ,表示重定向,(已搬迁) 
resp.setStatus(302);
// 设置响应头,说明 新的地址在哪里 
resp.setHeader("Location", "http://localhost:8080");
  • 方式二:推荐
resp.sendRedirect("http://localhost:8080");
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

高压锅码农777

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值