Java学习之servlet篇

Java学习之servlet篇0x00前言这里就后面正式步入到javaEE的阶段了,记录一下学习内容。0x01Java中间件在Java里面常用的几个中间件在这里列出来一下:*webSp

大家好,又见面了,我是全栈君,祝每个程序员都可以多学几门语言。

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包的结构。

Java学习之servlet篇

-- 项目的根目录
						-- 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到tomcat\conf\Catalina\localhost目录下,这样也能实现同样的效果。

 在conf\Catalina\localhost创建任意名称的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,明天再写

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/119942.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • dsp运动控制卡_营销行动方案控制

    dsp运动控制卡_营销行动方案控制ARM+FPGA运动控制卡运动控制卡方案运动控制卡方案运动控制卡方案由于ARM源码核心运动控制算法部分缺失,因此便宜出售此资料,拍前请了解好,不接受退货,资料包含此运动控制卡原理图,PCB图,FPGA源码,ARM去掉算法后的框架源码,拍下后发邮箱。本运动控制卡采用ARM单片机+FPGA架构;ARM单片机是基于Cortex-M3内核的LM3S6911,插补核心算法均在该ARM内完成,一方面通过以太网与上位机界面交换加工数据,另一方面与FPGA(ALTERA的EP1C3)交换加工脉冲计数与IO

    2022年10月15日
  • 秒杀多线程第九篇 经典线程同步总结 关键段 事件 互斥量 信号量

    秒杀多线程第九篇 经典线程同步总结 关键段 事件 互斥量 信号量前面《秒杀多线程第四篇一个经典的多线程同步问题》提出了一个经典的多线程同步互斥问题,这个问题包括了主线程与子线程的同步,子线程间的互斥,是一道非常经典的多线程同步互斥问题范例,后面分别用了四篇《秒杀多线程第五篇经典线程同步关键段CS》《秒杀多线程第六篇经典线程同步事件Event》《秒杀多线程第七篇经典线程同步互斥量Mutex》《秒杀多线程第八篇经典线程同步信号量Semaphore》来详细介绍常用的

    2022年7月15日
  • MySQL常用命令大全(完整)

    MySQL常用命令大全(完整)打开Linux或MacOS的Terminal(终端)直接在终端中输入windows快捷键win+R,输入cmd,直接在cmd上输入1、mysql服务的启动和停止netstopmysqlnetstartmysql启动失败可按快捷键win+R,输入services.msc,找到MySQL服务器的名称启动2、登陆mysqlmysql(…

    2022年6月30日
  • Server.MapPath 的用法说明

    Server.MapPath 的用法说明用法:1.Server.MapPath(“/”)应用程序根目录所在的位置如C:\Inetpub\wwwroot\2.Server.MapPath(“./”)表示所在页面的当前目录3.Server.MapPath(“../”)表示上一级目录4.Server.MapPath(“~/”)表示当前应用级程序的目录,如果是根目录,就是根目录,如果是虚拟目录,就

    2022年7月12日
  • docker 卸载出错

    docker 卸载出错场景:win10,一时脑抽,在安装了docker之后没有用正常的方式卸载(比如win10卸载,软件管家等)。直接把docker在c盘下的文件夹给删了,结果这一删,再也安不上了。现象:安装docker显示已经是最新版本(Existinginstallationisuptodate),如下图解决方法:…

    2022年9月8日
  • 什么是泛型,怎么使用泛型分析

    什么是泛型,怎么使用泛型分析1、泛型1:什么是泛型?泛型就是广泛的类型,也是一种数据类型,而这种数据类型可以是任意类型,编写过程中当中不能确定类型,创建对象时必须指定具体类型,不指定也可以,但是会出现一些错误。泛型是编译器行为,只能在编译期有效,如果能够跨过编译器,那么泛型就没有任何意义了。2、泛型类怎么定义泛型类?在类后面加<&g…

    2022年6月22日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号