|

楼主 |
发表于 2021-11-19 00:14:44
|
显示全部楼层
代码审计学习
原文链接:https://mp.weixin.qq.com/s/bgFsBvEFrXOW47Frfo7WdA
Servlet
Servlet是java web容器运行的小程序,原则上可以通过任何客户端-服务端协议进行通信,常与http一起使用。
配置:
1、基于web.xml的配置
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
version="2.5">
<display-name>manage</display-name>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<servlet>
<description></description>
<display-name>user</display-name>
<servlet-name>user</servlet-name>
<servlet-class>com.sec.servlet.UserServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>user</servlet-name>
<url-pattern>/user</url-pattern>
</servlet-mapping>
</web-app>
2、基于注解方式
Servlet3.0以上版本,只需添加@WebServlet注解即可修改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.io.PrintWriter;
/**
* 基于注解开发Servlet
*/
@WebServlet(urlPatterns = "/ann.do")
public class AnnotationServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
this.doPost(req, resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
PrintWriter out = resp.getWriter();
out.println("<!DOCTYPE HTML PUBLIC '-//W3C//DTD HTML 4.0 Transitional//EN'>");
out.println("<HTML>");
out.println("<HEAD><TITLE> ITBZ </TITLE></HEAD>");
out.println("<BODY>");
out.println("Annotation Servlet!");
out.println("</BODY>");
out.println("</HTML>");
out.flush();
out.close();
}
}
Servlet 的访问流程:
首先用户访问URL,找到文件名user,通过地址映射找到对应的Servlet。
用户在浏览器里输入URL,然后浏览器发起请求,服务器通过 servlet-mapping 标签找到文件名为 user 的 url-pattern,通过其对应的 servlet-name 寻找 servlet 标签中 servlet-name 相同的 servlet,再获取其 servlet 标签里的 servlet-class 参数,最后得到具体的 class 文件路径,从而执行相关文件。
Servlet 的接口方法
1、init() 接口
在docker中init或supervisor进程,用于启动和维护其他程序状态。
在 Servlet 实例化后,Servlet 容器会调用 init() 方法来初始化该对象,主要是为了让 Servlet 对象在处理客户请求前可以完成一些初始化的工作,例如建立数据库连接,获取配置信息等。
对于每一个 Servlet 实例,init() 方法只能被调用一次。
init() 方法的定义如下:
public void init() throws ServletException{ }
2、service() 接口
service() 方法是执行实际任务的主要方法,容器调用 service() 方法来处理来自客户端(的请求,并将格式化的响应写回客户端,每次服务器接收到一个 Servlet 请求时,服务器都会产生一个新的线程并调用服务。并且在 service() 方法被容器调用之前,必须确保 init() 方法正确完成。
定义如下:
public void service (ServletRequest request,ServletResponse response) throws ServletException,IOException{}
3、doGet() / doPost() 等接口
public void doGet(HttpServletRequest request,HttpServletResponse response) throws ServletException,IOException{}
4、destroy() 接口
public void destroy(){}
5、getServletConfig() 接口
返回容器调用 init() 方法时传递给 Servlet 对象的 ServletConfig 对象
6、getServletInfo() 接口
返回一个 String 类型的字符串
———————————————————————————————————————
filter
原文链接:https://mp.weixin.qq.com/s/5ZJopsvdD7JAMmEvmezRbA
过滤器实际上就是对 Web 资源进行拦截,做一些处理后再交给下一个过滤器或 Servlet 处理
配置与上面类似。
filter 的流程:
用户向服务器发送请求->服务器->filter 1->......->filter n->service()方法->filter n->......
->filter 1->服务器->服务器返回结果给用户
三种接口:
init() 接口,doFilter() 接口,destroy() 接口
其中:doFilter() 接口定义如下:
public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, IOException {
/*过滤方法 主要是对request和response进行一些处理,然后交给下一个过滤器或Servlet处理*/
chain.doFilter(req, resp);//交给下一个过滤器或servlet处理
} |
|