一.基础信息

内存马的知识还是比较多的,所以我就从基础开始讲,不然到后面是很难理解的,下面讲一下三大件和jsp知识。

二.Java Web三大件

2.1:Servlet

Servlet 是 Java 的服务端组件,用于在 Web 应用中处理客户端的 HTTP 请求并生成响应。它是一个接口,
运行在 Servlet 容器(如 Tomcat)中,这里可以执行修改删除等操作,并且定义了http请求和相应的基本方法例如 
init(), service(..) 和 destroy(),这也是Servlet的生命周期分别是服务启动的时候执行init()只执行一次,
每次请求的时候执行service(..)再到程序结束执行销毁方法destroy(),Servlet 可以处理 GET、POST、PUT、DELETE 等不同 HTTP 方法对应的请求,
通过使用扩展类(如 HttpServlet)可以简化不同请求方法的逻辑处理:doGet(), doPost(), doDelete(), doPut() 等。
下面我们举个例子,来看看Servlet的声明周期(图一,图二),可以看到先执行的是init,其实这也不对,
来点杠精的意思就是静态代码块和无参构造先执行,接下来说一下HttpServlet他是GenericServlet的扩展类,
GenericServlet并且实现了Servlet接口,在这个接口中实际上用到HTTP请求的是service那么HttpServlet就对他做了一个代码冗余的简化,
可以直接除了各种请求如GET POST等,下面我们在看一个例子(图三),可以看到doGet和doPost分别对应的就是请求方式。

2.2:Filter

Filter过滤器,主要用来权限验证减少代码量说明白点就是处理请求和相应,我们进去看看这个接口,
发现存在有init和destriy效果和我们讲Servlet是一样的,那么这里的doFilter就是过滤器的主要代码了,
说一个细小的细节知识我们可以看到default这里是java 8引入的特征,当有default的时候在实现是可以不需要写具体的实现代码的(可有可无),
那么只需要实现doFilter就可以了,@WebFilter("/*")请求任意路径都会经过doFilter。

最后呢我们再讲一下Filter的生命周期,我们先看一下代码一,之后看下面。
启动程序调用一次:过滤器无参构造	过滤器初始化
访问过滤器:过滤器开始执行
停止项目:过滤器销毁
package com.example.webshell1;
import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import java.io.IOException;

@WebFilter("/admin")
public class Filters implements Filter {
    public Filters() {
        System.out.println("过滤器无参构造");
    }
    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        System.out.println("过滤器开始执行");
    }

    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        System.out.println("过滤器初始化");
    }

    @Override
    public void destroy() {
        System.out.println("过滤器销毁");
    }
}

2.3:Listener

简介
Java Web 开发中的监听器(Listener)就是 Application、Session 和 Request 三大对象创建、销毁或者往其中添加、修改、删除属性时自动执行代码的功能组件。
ServletContextListener:对Servlet上下文的创建和销毁进行监听; ServletContextAttributeListener:监听 Servlet 上下文属性的添加、删除和替换;
HttpSessionListener:对 Session 的创建和销毁进行监听。Session 的销毁有两种情况,一个中 Session 超时,还有一种是通过调用 Session 对象的 invalidate() 方法使 session 失效。
HttpSessionAttributeListener:对 Session 对象中属性的添加、删除和替换进行监听;
ServletRequestListener:对请求对象的初始化和销毁进行监听; ServletRequestAttributeListener:对请求对象属性的添加、删除和替换进行监听。
用途
可以使用监听器监听客户端的请求、服务端的操作等。通过监听器,可以自动出发一些动作,比如监听在线的用户数量,统计网站访问量、网站访问监控等,上面感兴趣的可以去学一下我是懒得写了复制别人的无所谓这里知识也不是很难。

三.JSP

JSP我们可以理解成JAVA Servlet,从开发角度来讲的话就是在HTML里面嵌入JAVA代码,类似于脚本语言PHP一样,下面我们讲一下在JSP文件中嵌入方式三种方式,并且使用图一和代码一一次性解释下面三种嵌入使用。
第一种:执行JAVA逻辑代码
<%  
JAVA代码
%>

第二种:定义JAVA方法
<%!
JAVA代码
%>

第三种:JSP表达式直接把对象嵌入到网页
<%=
JAVA代码
%>

<%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
<!DOCTYPE html>
<html>
<head>
    <title>JSP - Hello World</title>
</head>
<body>
<h1>
    //定义java方法
    <%!
    public String getWord(){
        return "Hell Word";
    }
    %>
    //执行java逻辑代码
    <%String word = getWord();%>
    //JSP表达式
    <%=word%>
</h1>
<br/>
<a href="hello-servlet">Hello Servlet</a>
</body>
</html>
<h3 id="vLWjl">3.2:JSP内置对象(指令)</h3>

JSP有九大内置对象,他们能够在客户端和服务器端交互的过程中分别完成不同的功能。其特点如下

+ 由 JSP 规范提供,不用编写者实例化
+ 通过 Web 容器实现和管理
+ 所有 JSP 页面均可使用
+ 只有在脚本元素的表达式或代码段中才能使用

| 对象 | 类型 | 描述 |
| --- | --- | --- |
| request | javax.servlet.http.HttpServletRequest | 获取用户请求信息 |
| response | javax.servlet.http.HttpServletResponse | 响应客户端请求,并将处理信息返回到客户端 |
| response | javax.servlet.jsp.JspWriter | 输出内容到 HTML 中 |
| session |  javax.servlet.http.HttpSession | 用来保存用户信息 |
| application | javax.servlet.ServletContext | 所有用户共享信息 |
| config | javax.servlet.ServletConfig | 这是一个 Servlet 配置对象,用于 Servlet 和页面的初始化参数 |
| pageContext | javax.servlet.jsp.PageContext | JSP 的页面容器,用于访问 page、request、application 和 session 的属性 |
| page |  javax.servlet.jsp.HttpJspPage | 类似于 Java 类的 this 关键字,表示当前 JSP 页面 |
| exception | java.lang.Throwable |  	该对象用于处理 JSP 文件执行时发生的错误和异常;只有在 JSP 页面的 page 指令中指定 isErrorPage 的取值 true 时,才可以在本页面使用 exception 对象 |

//例子
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ page import="javax.servlet.http.HttpServletRequest" %>
后面遇到什么在进行补上。