我是靠谱客的博主 从容小懒猪,最近开发中收集的这篇文章主要介绍Servlet基础教程,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

Servle基础教程

      • 1. HTTP协议
        • 1.1 HTTP协议的特点
        • 1.2 HTTP之URL
        • 1.3 HTTP请求报文
        • 1.4 HTTP响应报文
      • 2. Tomcat服务器
      • 3. Servlet的实现
        • 3.1 创建Web项目
          • 3.1.1 web项目结构
          • 3.1.2 创建包与类
        • 3.2 实现Servlet规范
        • 3.3 重写service方法
        • 3.4 设置注解(标签)
        • 3.5 修改对外访问路径
        • 3.6 其他三种实现Servlet的方法
      • 4. Servlet生命周期
      • 5. Servlet与Tomcat的工作原理
      • 6. HttpServletRequest对象
        • 6.1 接收请求
          • 6.1.1 常用的方法
          • 6.1.2 获取请求参数
        • 6.2 请求乱码问题
        • 6.3 请求转发
        • 6.4 request作用域
      • 7. HttpServletReponse对象
        • 7.1.响应数据
        • 7.2 响应乱码问题
          • 7.2.1 getWriter()的字符乱码
          • 7.2.2 getOutputStream()的字节乱码
        • 7.3 重定向
        • 7.4 请求转发与重定向的区别
      • 8. Cookie对象
        • 8.1 Cookie的创建和发送
        • 8.2 Cookie的获取
        • 8.3 Cookie设置到期时间
        • 8.4 Cookie的注意点
        • 8.5 Cookie的路径
      • 9. HttpSession对象
        • 9.1 标识符JSESSIONID
        • 9.2 Session域对象
        • 9.3 Session对象的销毁
          • 9.3.1 默认时间到期
          • 9.3.2 自己设定到期时间
          • 9.3.3 直接立即销毁Session对象
          • 9.3.4 关闭浏览器
          • 9.3.5 关闭服务器
      • 10. ServletContext对象
        • 10.1 ServletContext对象的获取
        • 10.2 ServletContext域对象
      • 11. 文件的上传和下载
        • 11.1 文件上传
          • 11.1.1 前台页面
          • 11.1.2 后台实现
        • 11.2 文件下载
          • 11.2.1 超链接下载
          • 11.2.2 后台实现下载

1. HTTP协议

​  HTTP(hypertext transport protocol)协议【超文本传输协议】,协议规定了浏览器和万维网服务器之间互相通信的规则。

1.1 HTTP协议的特点
  • 支持客户/服务器模式。

  • 简单快速: 客户向服务器请求服务时,只需传送请求方法和路径。请求方法常用的有GET、POST。每种方法规定了客户与服务器联系的类型不同。由于 HTTP协议简单,使得HTTP服务器的程序规模小,因而通信速度很快。

  • 灵活: HTTP允许传输任意类型的数据对象。传输的类型由 Content-Type(消息头) 加以标记。

  • 无连接: 无连接是表示每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。
      HTTP1.1版本后支持可持续连接。通过这种连接,就有可能在建立一个TCP连接后,发送请求并得到回应,然后发送更多的请求并得到更多的回应。通过把建立和释放TCP连接的开销分摊到多个请求上,则对于每个请求而言,由于TCP而造成的相对开销被大大地降低了。而且,还可以发送流水线请求,也就是说在发送请求1之后的回应到来之前就可以发送请求2。也可以认为,一次连接发送多个请求,由客户机确认是否关闭连接,而服务器会认为这些请求分别来自不同的客户端。

  • 无状态: HTTP协议是无状态协议。无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快。

1.2 HTTP之URL

  HTTP URL是一种特殊类型的URL,包含了用于查找某个资源的足够的信息,URL的格式如下:

http://host[:port]/[abc_path]
http://IP(主机名/域名):端口/访问的资源路径
  • http表示要通过HTTP协议来定位网络资源;
  • host表示合法的Internet主机域名或者IP地址;
  • port指定一个端口号,为空则使用缺省端口80;
  • abs_path指定请求资源的URL;如果URL中没有给出 abs_path,那么当它作为请求URL时,必须以"/"的形式给出,通常这个工作浏览器自动帮我们完成。
1.3 HTTP请求报文

​  HTTP 请求报文由三部分组成,分别是:请求行、请求头、空行、请求正文(请求体)。其中,Get 请求没有请求体,Post 请求才有请求体。

  • 请求行:由请求方式 (Get/Post) 、请求地址(url路径)、HTTP请求协议版本组成
  • 请求头:一系列键值对
  • 空行
  • 请求体:FromData中的参数内容,当浏览器的地址栏装不下过长的传递参数时,将部分内容放置于FormData中,当作请求体传输。当传递参数较少时,会直接跟在请求行后面,不用请求体。Get 请求的请求体是空的,只有 Post 请求具有请求体。

请求行格式:Method Request-URI HTTP-Version CRLF

  • Method表示请求方法(GET/POST)
  • Requst-URI是一个统一资源标识符
  • HTTP-Version表示请求的HTTP协议版本
  • CRLF表示回车和换行。
1.4 HTTP响应报文

​  在接收和解释请求消息后,服务器返回一个HTTP响应报文,HTTP响应也是由三个部分组成,分别是:状态行、消息报头、空行、响应正文。

  • 状态行:协议版本 + 状态码 + 状态码的说明
  • 消息报头:一系列键值对,对相应正文做一些描述
  • 空行
  • 响应正文:Reponse中的内容,即浏览器中所看到的网页,即 HTML 文件等。

2. Tomcat服务器

Tomcat目录结构如下:

在这里插入图片描述

  • bin:启动和关闭tomcat的bat文件
  • conf:配置文件server.xml该文件用于配置server相关的信息,比如tomcat启动的端口号,配置主机
    (Host) ; web.xml文件配置与web应用(web应用相当于一个web站点) ; tomcat-user.xml配置用户名密码和相关权限
  • lib:该目录放置运行tomcat运行需要的jar包
  • logs:存放日志,当我们需要查看日志的时候,可以查询信息
  • webapps:放置我们的web应用
  • work工作目录:该目录用于存放jsp被访问后生成对应的server文件和.class文件

3. Servlet的实现

​  Servlet是Server与Applet 的缩写,是服务端小程序的意思。使用Java语言编写的服务器端程序,可以像生成动态的WEB页,Servlet主要运行在服务器端,并由服务器调用执行,是一种按照Servlet标准来开发的类。是SUN公司提供的一门用于开发动态Web资源的技术。(言外之意:要实现web开发,需要实现Servlet标准)

​​  Servlet 本质上也是Java类,但要遵循Servlet规范进行编写,没有main(方法,它的创建、使用、销毁都由Servlet容器进行管理(如Tomcat)。(言外之意:写自己的类,不用写main方法,别人自动调用)

​​  Servlet是和HTTP协议是紧密联系的,其可以处理HTTP协议相关的所有内容。这也是Servlet应用广泛的原因之一。

​​  提供了Servlet功能的服务器,叫做、Servlet容器,其常见容器有很多,如Tomcat, Jetty, WebLogic Server, WebSphere, JBoss 等等。

3.1 创建Web项目
3.1.1 web项目结构

在这里插入图片描述

  • src目录存放java代码。
  • web目录存放HTML、CSS、JavaScript等页面样式代码。
3.1.2 创建包与类

  在src文件夹下,先建包,再建类。

3.2 实现Servlet规范

  实现Servlet规范,即继承HttpServlet类,并到如响应的包。那么该类则已经完成了通信的规则,我们只需要进行业务的实现即可。

package com.liangshao.servlet;

import javax.servlet.http.HttpServlet;

public class Servlet01 extends HttpServlet {
   
}
3.3 重写service方法

​  满足Servlet规范只是让我们的类能够满足接收请求的要求,接收到请求后需要对请求进行分析,以及进行业务逻辑处理,计算出结果,则需要添加代码,在规范中有一个叫做service的方法,专门用来做请求处理的操作,业务代码则可以写在该方法中。

package com.liangshao.servlet;
/**
 * 实现Servlet————方法一
 * 1. 创建普通java类
 * 2. 实现Servlet的规范,继承HttpServlet类
 * 3. 实现/重写service方法,用来处理请求--->重写快捷键:Ctrl+O
 * 4. 设置注解,指定访问的路径
 */
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

// @WebServlet("/ser01")  // 为当前资源添加路径
// @WebServlet(name = "Servlet01", value = "/ser01")
// @WebServlet(name = "Servlet01", urlPatterns = "/ser01")
// @WebServlet(name = "Servlet01", value = {"/ser01", "/ser001"})
@WebServlet(name = "Servlet01", urlPatterns = {
   "/ser01", "/ser001"})
public class Servlet01 extends HttpServlet {
   
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
   
        System.out.println("Hello Servlet!");
        resp.getWriter().write("Hello World!");
    }
}
3.4 设置注解(标签)

​  面对不同的客户端,服务器要做出不同的响应,为了让服务器进行区分,需要设置注解来向服务器说明。因此,在完成好了一切代码的编写后,还需要向服务器说明,特定请求对应特定资源。

​  开发servlet项目,使用 @WebServlet 注解将一个继承于 javax.servlet.http.HttpServlet 的类定义为Servlet组件。在Servlet3.0中,可以使用@WebServlet注解将一个继承于javax.servlet.http.HttpServlet的类标注为可以处理用户请求的Servlet。

​  注解的value值表示的是指明某个类的对外访问路径,并且value可有多个值,表示使用不同的访问路径均可访问到同一个类。注意!!!路径的斜杠不能省略。

3.5 修改对外访问路径

​  点击运行按钮旁边的选项框---->点击Edit Configuration…---->Deployment---->Application context中即为项目访问路径,在其中修改即可。

3.6 其他三种实现Servlet的方法

方法二:

/**
 * 实现Servlet————方法二
 * 1. 创建普通java类
 * 2. 实现Servlet的规范,继承GenericServlet类
 * 3. 实现/重写service方法,用来处理请求--->重写快捷键:Ctrl+O
 * 4. 设置注解,指定访问的路径
 */

import javax.servlet.GenericServlet;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebServlet;
import java.io.IOException;

@WebServlet("/ser02")
public class Servlet02 extends GenericServlet {
   
    @Override
    public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
   
        System.out.println("继承GenericServlet类方法……");
        servletResponse.getWriter().write("继承GenericServlet方法……");
    }
}

方法三:

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

/**
 * 实现Servlet————方法三
 * 1. 创建普通java类
 * 2. 实现Servlet的规范,实现Servlet接口
 * 3. 实现接口下的方法,并重写service方法,用来处理请求
 * 4. 设置注解,指定访问的路径
 */
@WebServlet("/ser03")
public class Servlet03 implements Servlet {
   
    @Override
    public void init(ServletConfig servletConfig) throws ServletException {
   

    }

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

    @Override
    public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
   
        System.out.println("实现Servlet接口的方法……");
        servletResponse.getWriter().write("实现Servlet接口的方法……");
    }

    @Override
    public String getServletInfo

最后

以上就是从容小懒猪为你收集整理的Servlet基础教程的全部内容,希望文章能够帮你解决Servlet基础教程所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(53)

评论列表共有 0 条评论

立即
投稿
返回
顶部