【代码审计】JAVAWeb基础第一个Servlet

JAVAWeb基础第一个Servlet

0x00 版权声明

JAVA基础系列是笔者学习@炼石星球的笔记,大部分文字描述取自星球内发布的教程文件,仅作学习。

0x01 什么是Servlet

Servlet 是运行在 Web 服务器或应用服务器上的程序,它是作为来自 Web 浏览器或其他HTTP 客户端的请求和 HTTP 服务器上的数据库或应用程序之间的中间层。

比如,我们打开一个网站有个注册功能,在填写完信息后,点击提交,所填写的信息传输到后端,根据所指向的路径,来匹配对应的servlet,专门用于处理注册流程。

从代码上来说,Servlets 是 Java 类,服务于 HTTP 请求并实现了 javax.servlet.Servlet接口。

0x02 Servlet生命周期

  1. init():初始化阶段,只被调用一次,也就是在第一次创建Servlet时被调用。
  2. service():服务阶段,主要处理来自客户端的请求,并可以根据HTTP请求类型来调用对应的方法,比如 doGet(),doPost(),doPut() 等等。
  3. doGet(),doPost():处理阶段,将主要代码逻辑写在此处。根据不同HTTP请求对应不同方法。
  4. destroy():毁灭阶段,该方法只会被调用一次,即在Servlet生命期结束时被调用

0x03 第一个Servlet

第一步,创建新的Maven项目,选择maven-archetype-webapp:

https://zebpic-1301715962.cos.ap-nanjing.myqcloud.com/blog/202209241553704.png

接着点击NEXT,设置项目名称,默认下一步等待自动创建:

https://zebpic-1301715962.cos.ap-nanjing.myqcloud.com/blog/202209241556967.png

第二步,在 pom.xml 中引入servlet的依赖

写在 标签内,然后可以点击右上角 加载文件改动 的按钮(也就是重新加载安装依赖),如下图所示:

1
2
3
4
5
6
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
<scope>compile</scope>
</dependency>

https://zebpic-1301715962.cos.ap-nanjing.myqcloud.com/blog/202209241559817.png

第三步,下载tomcat

https://zebpic-1301715962.cos.ap-nanjing.myqcloud.com/blog/202209241601243.png

问题:Windows环境tomcat启动出现乱码,打开conf目录下的logging.properties文件,全文搜索UTF-8,替换为GBK,重新启动。

第四步,项目配置tomcat

点击右上角增加配置,选择tomcat server:

https://zebpic-1301715962.cos.ap-nanjing.myqcloud.com/blog/202209241604148.png

问题:选项没有tomcat server,确认版本是否为专业版,社区版无此配置

点击本地方式,打开Application Server的配置页面,配置tomcat位置,同样也可自定义端口等信息:

https://zebpic-1301715962.cos.ap-nanjing.myqcloud.com/blog/202209241608753.png

接着配置部署方式,点击Deployment新增部署方式为war exploded:

https://zebpic-1301715962.cos.ap-nanjing.myqcloud.com/blog/202209241611749.png

接着向下滑动,设置Application Context目录为/

接着点击apply然后OK,项目会自动进行配置。

第五步,编写Servlet

在src/main目录鼠标右键,新建java目录,在java目录下新建FirstServlet.class java文件:

https://zebpic-1301715962.cos.ap-nanjing.myqcloud.com/blog/202209241616098.png

问题:右键没有java class选项。点击file→project structure→Moudle→Mark as→source,然后点击Apply,OK。

https://zebpic-1301715962.cos.ap-nanjing.myqcloud.com/blog/202209241624685.png

编写FirstServlet.class:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
package src.main.java;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;

public class FirstServlet extends HttpServlet{
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException,IOException {

resp.setContentType("text/html");

PrintWriter out = resp.getWriter();
out.println("<h1>hello,first servlet.by zebra</h1>");
}

@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException{
doGet(req,resp);
}

}

https://zebpic-1301715962.cos.ap-nanjing.myqcloud.com/blog/202209241628023.png

第六步,注册servlet

在 web.xml 中注册servlet

1
2
3
4
5
6
7
8
<servlet>
<servlet-name>FirstServlet</servlet-name>
<servlet-class>FirstServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>FirstServlet</servlet-name>
<url-pattern>/FirstServlet</url-pattern>
</servlet-mapping>

https://zebpic-1301715962.cos.ap-nanjing.myqcloud.com/blog/202209241634397.png

第七步,运行项目

点击右上方运行按钮,等待项目编译运行,第一个Servlet项目就运行起来了:

https://zebpic-1301715962.cos.ap-nanjing.myqcloud.com/blog/202209241637569.png