Servlet

目录

背景知识

Tomcat

使用Tomcat可能遇到的问题

Servlet

什么是servlet

创建Web项目

编写Servlet程序

Servlet的生命周期

什么是生命周期

生命周期的三个阶段

三个生命周期方法

Tomcat与Servlet的工作流程

HttpServletRequest对象

什么是HttpServletRequest

HttpServletRequest常用方法


背景知识

Tomcat

Tomcat为web服务器的一种,Tomcat运行JSP页面和Servlet,另外它还是一个Servlet的JSP容器,独立的Servlet容器是Tomcat的默认模式。

使用Tomcat可能遇到的问题

这里说的两个问题都是我遇到的问题,调了好久T_T

  • 闪退问题

我的闪退原因是jdk的环境变量路径错误(自己把文件挪到另一个文件夹之后忘记改环境变量路径了,查了改了好多东西之后发现是这个问题)。注意设置Tomcat的环境变量时的变量值为解压后的路径。

  • 乱码问题

乱码问题的解决需要更改配置文件中的设置。打开conf文件夹下的logging.properties文件,将

java.util.logging.ConsoleHandle.encoding = UTF-8这行代码改为java.util.logging.ConsoleHandle.encoding = GBK

a625d92de0af4a5bbdc2a99a9a620a2d.png

Servlet

什么是servlet

Servlet即server applet,直译过来即运行在服务器端的小程序,是sun公司开发动态web的一门技术。Servlet就是一个接口,定义了Java类被浏览器访问到(tomcat识别)的规则。Servlet本质上也是JAVA类,但要遵循Servlet规范进行编写,没有main()方法,它的创建,使用,销毁都由Servlet容器进行管理(如Tomcat)。

创建Web项目

1.新建java项目

2.添加框架支持,选中web应用程序,创建web.xml,创建WEB-INF目录

3.在WEB-INF目录下创建classes和lib目录

4.将classes和lib目录配置到项目中,如图

 5.导入Servlet需要的支持包,将Tomcat的lib目录中的servlet-api.jar加入到项目中,如图

编写Servlet程序

Serlvet接口Sun公司有两个默认的实现类:HttpServlet,GenericServlet

1.创建web项目 ,创建后即可创建Servlet

2.编写一个普通类。

3.实现Servlet接口,可直接继承HttpServlet。

4.重写service方法。

5.设置注释,使用@WebServlet将一个继承于javax.servlet.http.HttpServlet的类定义为Servlet组件。

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.net.SocketOption;
/**
 * @author 86130
 */
@WebServlet("/ser01")
public class Servlet extends HttpServlet {
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
       //打印内容在控制台
        System.out.println("Bluemsun");
        //通过流输出数据到浏览器
        resp.getWriter().write("Blusmsun");
    }
}

输出结果:  

Servlet的生命周期

什么是生命周期

Servlet没有main()方法,不能独立运行,它的运行完全由Servlet引擎来控制和调度。所谓生命周期,指的是servlet容器何时创建servlet实例,何时调用其方法进行请求的处理,何时销毁其实例的整个过程。

生命周期的三个阶段

  • 实例和初始化时机

当请求到达容器时,容器查找该Servlet对象是否存在,如果不存在,则会创建实例并进行初始化。

  • 就绪/调用/服务阶段

当请求到达容器,容器调用Servlet对象的service()方法,处理请求的方法在整个生命周期中可以被多次调用。HttpServlet的service()方法,会依据请求方式来调用doGet()或doPost()方法。但是这两个do方法默认情况下会抛出异常,需要子类去override。

  • 销毁时机

当容器关闭时,或应用程序停止时,会将程序中的Servlet实例进行销毁。


上述的生命周期可以通过Servlet中的生命周期方法来观察。在Servlet中有三个生命周期方法,不由用户手动调用,而是在特定的时机由容器自动调用,通过观察这三个生命周期方法即可观察到Servlet的生命周期。

三个生命周期方法

  • init方法,在Servlet实例创建之后执行(证明Servlet有实例创建了)
public void init(ServletConfig config) throws ServletException {
    System.out.println("实例创建了...");
}
  • service方法,每次有请求到达某个Servlet方法时执行,用来处理请求(证明该Servlet进行服务了)
protected void service(HttpServletRequest req, HttpServletResponse resp)
    throws ServletException, IOException {
    System.out.println("服务调用了...");
}
  • destroy方法,Servlet实例销毁时执行(证明该Servlet的实例被销毁了)
public void destroy() {
    System.out.println("实例销毁了...");
}

Servlet的生命周期可概括为四步:servlet类加载-->实例化-->服务-->销毁

Tomcat与Servlet的工作流程

  1. Web Client向Servlet容器(Tomcat)发出Http请求
  2. Servlet容器接收Web Client的请求
  3. Servlet容器创建一个HttpServletRequest对象,将Web Client请求的信息封装到这个对象中
  4. Servlet容器创建一个HttpServletResponse对象
  5. Servlet容器调HttpServlet对象service方法,把Request与Response作为参数,传给HttpServlet
  6. HttpServlet调用HttpServletRequest对象的有关方法,获取Http请求信息

HttpServletRequest对象

什么是HttpServletRequest

HttpServletRequest是ServletRequest的子接口,主要作用是用来接收客户端发送过来的请求信息。service()方法中形参接收的是HttpServletRequest接口的实例化对象,表示该对象主要应用在HTTP协议上,该对象是由Tomcat封装好传递过来的。

HttpServletRequest常用方法

getRequestURL()获取客户端发出请求时的完整URL
getRequestURI()获取请求行中的资源名称部分(项目名称开始)

getQueryString()

获取请求行中的参数部分
getMethod()获取客户端请求方式
getProtocol()获取HTTP版本号
getContextPath()获取webapp名字

示例:

​//获取客户端请求的完整URL
String url = request.getRequestURL().toString();
System.out.println("获取客户端请求的完整URL:" + url);
//获取客户端请求的部分URL
String uri = request.getRequestURL();
System.out.println("获取客户端请求的部分URL:" + uri);
//获取请求行中的参数部分
String queryString = request.getQueryString();
System.out.println("获取请求行中的参数部分:" + queryString);
//获取客户端的请求方式
String method = request.getMethod();
System.out.println("获取客户端的请求方式:" + method);
//获取HTTP版本号
String prototol = request.getPrototol();
System.out.println("获取当前HTTP版本号:" + prototol);
//获取webapp名字
​String webapp = request.getContextPath();
System.out.println("获取客户端的请求方式:" + webapp);

总结:

 1.json全称JavaScript Object Notation,JS对象简谱 , 是一种轻量级的数据交换格式。json与Java对象进行转换时需要用到第三方的jar包,这个jar包要放到lib目录下。

2.jakarta EE和javax区别:jakarta EE为免费版本,这是两个公司之间的争端,我们负责用就好了(~ ̄▽ ̄)~

3.单例模式:在整个webapp运行中,Servlet对象只有一个,每个用户调用的都是同一个方法,所有人都可以访问。

4.Servlet对象的创建时机:启动服务器时Servlet对象并没有被创建,只有在第一次被调用时才会创建。如果希望在启动时创建Servlet对象,可以在web.xml中加入参数,该标签中写整数,数字越小,优先级越高。

<servlet>
   <load-on-startup>1</load-on-startup>
</servlet>

5.不要手动定义Servlet对象的构造函数。需要长久保存的信息,要在destroy中重写。

6. GenericServlet是一种适配器,构建一个GenericServlet抽象类,使用Servlet时继承,可减少重写的代码量。

小结:

听学长学姐讲课真的学到了很多,这次听学长讲课学到了有什么不理解的地方及时上网查询的学习方法。对我来说后端真的有一定的难度,还要平衡与其他专业课的时间,后端的第一次作业写的也是很困难,没有及时提交,但是我会利用五一这段时间继续努力,在下一次培训之前一定会把作业写完!!!感觉大家都很厉害🥺,不管我最后有没有留在工作室,我都要在学长学姐的带领下继续努力,这个过程真的收获了很多!!!( •̀ ω •́ )y

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值