14.TomcatServlet

①预备知识

  • 资源分类
    静态资源:所有用户访问得到一样的资源,被称为静态资源。静态资源可以直接被浏览器解析,如: html,css,JavaScript
    动态资源:每个用户访问得到可能不一样的资源,被称为动态资源。动态资源需要先转换为静态资源,再返回给浏览器,如:servlet/jsp,php,asp

  • web服务器软件
    服务器:指安装了服务器软件(接收用户的请求,处理请求,做出响应)的计算机
    web服务器软件:可以部署web项目,让用户通过浏览器来访问这些项目

  • 常见的java相关的web服务器软件

    • webLogic:oracle公司,大型的JavaEE服务器,支持所有的JavaEE规范,收费的。
    • webSphere:IBM公司,大型的JavaEE服务器,支持所有的JavaEE规范,收费的。
    • JBOSS:JBOSS公司的,大型的JavaEE服务器,支持所有的JavaEE规范,收费的。
    • Tomcat:Apache基金组织,中小型的JavaEE服务器,仅仅支持少量的JavaEE规范servlet/jsp。
  • JavaEE:Java语言在企业级开发中使用的技术规范的总和,一共规定了13项大的规范

②Tomcat

  • Tomcat:web服务器软件
    在这里插入图片描述
  • java动态项目的目录结构
    在这里插入图片描述

第1步:启动

	bin/startup.bat 
    http://localhost:8080 访问自己
	http://别人的ip:8080 访问别人

注意:环境变量和端口号占用

	1. 暴力:netstat -ano 找到占用的端口号,并且找到对应的进程,杀死该进程

	2. 温柔:修改自身的端口号,一般会将tomcat的默认端口号修改为80,http协议的默认端口号,访问时不用输入端口号
			conf/server.xml
			<Connector port="8888" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8445" />		       

第2步:部署项目的3种方式

直接放到webapps目录下

	/hello:项目的访问路径-->虚拟目录
	简化部署:将项目打成一个war包,再将war包放置到webapps目录下。
	war包会自动解压缩

在这里插入图片描述

配置conf/server.xml文件

<Host>标签体中配置 <Context docBase="D:\hello" path="/hehe" />
	docBase:项目存放的路径 path:虚拟目录

在这里插入图片描述

在conf\Catalina\localhost创建任意名称的xml文件。在文件中编写

	<Context docBase="D:\hello" />
	虚拟目录:xml文件的名称			

在这里插入图片描述

第3步:关闭

  • 正常关闭: bin/shutdown.bat ctrl+c
  • 强制关闭:点击启动窗口的 X

③ Tomcat与idea的结合

第1步:点击配置文件

在这里插入图片描述

第2步:添加Tomcat

在这里插入图片描述

第3步:新建JAVA_EE

  • 新建web项目
    在这里插入图片描述
  • 项目一栏
    在这里插入图片描述
    改成update resource 可以热部署
	http://localhost:8080/
	http://localhost:8080/index.jsp
	http://localhost:8080/hello.html

④ Servlet的使用

  • Server applet 运行在服务器端的小程序,
  • Servlet 接口定义了Java类被识别到 Tomcat 的规则

第1步:定义一个类实现 Servlet 及其方法

第2步:配置Servlet( XML 最基础的方法 )

在这里插入图片描述

  • 注:Servlet 生命周期方法详解

① init( ):创建Servlet时,执行一次

  • init 只执行1次,说明一个Servlet在内存中只存在一个对象,Servlet是单例的,所以多个用户同时访问时,可能存在线程安全问题。
  • 解决:尽量不要在Servlet中定义成员变量,即使定义了成员变量,也不要对修改值
  • Servlet 什么时候 被创建?
    默认情况:第一次被访问时,Servlet被创建,可以配置执行Servlet的创建时机
    在这里插入图片描述
    1. 指定 的值为负数,则第一次被访问时创建
    2. 指定 的值为正数,则在服务器启动时创建

②service( ):每访问Servlet时,都执行一次

③destroy( ):只有服务器正常关闭时,才会执行,因此destroy( )在Servlet被销毁之前执行,一般用于释放资源

第2步:配置Servlet( @WebServlet 方便的方法 )

  • 直接搞定!不需要web.xml
	@WebServlet(value = "zhang")
	@WebServlet(urlPatterns = "zhang")
	@WebServlet("zhang")
	public class TestServlet implements Servlet {
			...
	}

第2步:配置Servlet( 最简单的方法 )

  • 也不用写 class,直接创建

在这里插入图片描述

  • 直接生成啦!在这里插入图片描述

可只用了一个service方法,却要实现Servlet接口中的四个方法,有没有办法只写一个service方法就行呢?

:把不需要的方法做为默认空实现,抽象service()方法

  • GenericServlet
	//jdk的GenericServlet类
	public abstract class GenericServlet implements Servlet{
		// public void init
		// public void destroy() 等其他方法都是空实现,没有内容
		public abstract void service();
	}
	
	@WebServlet("/demo")
	public class TestServlet extends GenericServlet{
		@Override
    	public void service() {
	    	System.out.println("test.....");
    	}
	}	
  • HttpServlet 对http协议的一种封装
	public abstract class HttpServlet extends GenericServlet

http重写 doGet 和 doPost 的原因
https://blog.csdn.net/zhuhuihui123/article/details/91042061

	@WebServlet("/demo")
	public class TestServlet extends HttpServlet {
    	@Override
    	protected void doGet(){
        	System.out.println("doGet....");
    	}

    	@Override
    	protected void doPost() {
        	System.out.println("doPost...");
    	}
	}

在这里插入图片描述

  • Servlet路径配置
    多访问路径访问:@WebServlet( { “/d4”,"/dd4","/ddd4" } )
    多层路径目录结构:@WebServlet("/user/demo")
    扩展名匹配:@WebServlet("*.do")
	@WebServlet({"/d4","/dd4","/ddd4"})
	@WebServlet("/user/demo")
	@WebServlet("/user/*")
	@WebServlet("/*")   优先级很低
	@WebServlet("*.do")
	public class TestServlet extends HttpServlet {
    	@Override
    	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        	System.out.println("demo...");
        	System.out.println(req);
    	}
	}
  • WEB-INF目录下的资源不能被浏览器直接访问
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值