• Java学习之servlet篇


    Java学习之servlet篇

    0x00 前言

    这里就后面正式步入到javaEE的阶段了,记录一下学习内容。

    0x01 Java中间件

    在Java里面常用的几个中间件在这里列出来一下:

    
    * webSphere:IBM公司,大型的JavaEE服务器,支持所有的JavaEE规范,收费的。
    	* JBOSS:JBOSS公司的,大型的JavaEE服务器,支持所有的JavaEE规范,收费的。
    	* Tomcat:Apache基金组织,中小型的JavaEE服务器,仅仅支持少量的JavaEE规范servlet/jsp。开源的,免费的。
    

    这些java常见的中间件都曾爆出过一些漏洞,后面可以专门去分析一下这些漏洞的产生原因。

    我们使用得最多的可能就是tomcat了,因为该中间件是免费开源的。

    0x02 基础概念

    在我们部署jsp网站的时候通常都是将文件打包成war包,然后再进行上传,上传后会自动进行解压,那么我们来看看war包的结构。

    -- 项目的根目录
    						-- WEB-INF目录:
    							-- web.xml:web项目的核心配置文件
    							-- classes目录:放置字节码文件的目录
    							-- lib目录:放置依赖的jar包
    

    tomcat网站虚拟路径配置:

    配置conf/server.xml文件
    				在<Host>标签体中配置
    				<Context docBase="D:hello" path="/hehe" />
    				* docBase:项目存放的路径
    				* path:虚拟目录
    

    配置完成后,我们访问127.0.0.1:8080/hehe的时候,tomcat中间件会查找本机d盘下的dede目录。

    还有种方法是直接些xx.xml到tomcatconfCatalinalocalhost目录下,这样也能实现同样的效果。

     在confCatalinalocalhost创建任意名称的xml文件。在文件中编写
    				<Context docBase="D:hello" />
    				* 虚拟目录:xml文件的名称
    

    0x03 Servlet

    Servlet概念:运行在服务器端的小程序

    Servlet其实就是一个接口,定义了Java的类被浏览器访问到tomcat的规则,后面会定义一个实现类,来实现Servlet接口的方法。

    创建一个Java EE项目,并配置web.xml文件

    编辑一段代码,代码文件不能放在WEB-INF文件目录下,放在该文件目录下是无法执行的。

    package it.Test.servlet;
    
    import javax.servlet.*;
    import java.io.IOException;
    
    public class servelet implements Servlet {
    //    初始化方法,默认情况下,第一次被访问时,Servlet被创建。
        @Override
        public void init(ServletConfig servletConfig) throws ServletException {
            System.out.println("nihao");
        }
    
    
        @Override
        public ServletConfig getServletConfig() {
            return null;
        }
    //提供服务方法,每次被访问执行一次
        @Override
        public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
    
        }
    //获取servlet配置对象
        @Override
        public String getServletInfo() {
            return null;
        }
    //销毁方法,服务器关闭时,执行该方法
        @Override
        public void destroy() {
    
        }
    }
    

    定义好后直接去访问,肯定是不能访问成功得,还需要配置一下web.xml文件。

    <servlet>
            <servlet-name> demo1</servlet-name>
            <servlet-class>it.Test.servlet.servelet</servlet-class>
    
    
        </servlet>
        <servlet-mapping>
            <servlet-name>demo1</servlet-name>
            <url-pattern>/demo1</url-pattern>
        </servlet-mapping>
    

    执行原理:

    	1. 当服务器接受到客户端浏览器的请求后,会解析请求URL路径,获取访问的Servlet的资源路径
    	2. 查找web.xml文件,是否有对应的<url-pattern>标签体内容。
    	3. 如果有,则在找到对应的<servlet-class>全类名
    	4. tomcat会将字节码文件加载进内存,并且创建其对象
    	5. 调用其方法
    
    

    在servlet3.0版本后可以不用写web.xml文件,可以直接使用注解定义加载。
    我们直接在类上面加入注解

    @WebServlet(urlPatterns = "/demo")
    

    这样就定义完成了。

    但是我们这样定义每次都需要去继承servlet类,然后对几个方法进行重写,这样会多出很多代码,而在java里面给我们提供了几个servlet的实现类。

    GenericServlet抽象类:该类对除了service()的几个方法进行重写,其他的方法进行空实现。使用的时候只需要重写service()方法就可以了
    
    HttpServlet 抽象类:
    对http协议的一种封装,简化操作
    		1. 定义类继承HttpServlet
    		2. 复写doGet/doPost方法
    
    
    

    GenericServlet类比较简单就不演示了,直接继承重写方法就可以了。

    这里来演示一下HttpServlet类

    package it.Test.servlet;
    
    
    import javax.servlet.*;
    import javax.servlet.annotation.WebServlet;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import java.io.IOException;
    @WebServlet(urlPatterns = "/demo")
    public class servelet extends HttpServlet {
        @Override
        protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            System.out.println("get请求");
        }
    
        @Override
        protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            System.out.println("post请求");
        }
    }
    

    0x04 结尾

    后面还有点内容没总结完,后面的Request和Resonse,明天再写

  • 相关阅读:
    filter过滤组件Grok 正则捕获
    Logstash 最佳实践配置语法
    【小记】Ubuntu 工具链升级 gcc 流程
    图数据集cora详解
    HGNN超图神经网络代码
    modelnet40数据集
    GCN代码解读(版本1)
    GCN代码解读(版本2:github版本)
    企业微信代开发自建应用开发
    企业微信服务商工具实现
  • 原文地址:https://www.cnblogs.com/nice0e3/p/13515458.html
Copyright © 2020-2023  润新知