zoukankan      html  css  js  c++  java
  • 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,明天再写

  • 相关阅读:
    Maven关于web.xml中Servlet和Servlet映射的问题
    intellij idea的Maven项目运行报程序包找不到的错误
    修改Maven项目默认JDK版本
    刷题15. 3Sum
    刷题11. Container With Most Water
    刷题10. Regular Expression Matching
    刷题5. Longest Palindromic Substring
    刷题4. Median of Two Sorted Arrays
    刷题3. Longest Substring Without Repeating Characters
    刷题2. Add Two Numbers
  • 原文地址:https://www.cnblogs.com/nice0e3/p/13515458.html
Copyright © 2011-2022 走看看