Java学习笔记7-Tomcat和Servlet

本文介绍了在IDEA中配置和使用Tomcat,包括修改端口号、处理启动问题以及通过Maven插件简化部署。同时,详细讲解了Servlet的生命周期、体系结构以及如何配置urlPattern。通过实例展示了Servlet的快速入门、初始化、服务和销毁过程,以及如何通过自定义Servlet简化请求处理。
摘要由CSDN通过智能技术生成

0X0a Tomcat

1、基本使用

配置
	修改启动端口号:conf/server.xml
	<Connector port="8080">
启动时候可能出现的问题
	Address already in use:端口号冲突
	启动窗口一闪而过:检查JAVA_HOME环境变量是否正确配置

2、Maven Web项目结构(开发中的项目)

Java							项目名称
	src							主目录
		main					
			java				Java代码
			resource			资源文件
			webapp				Web项目特有目录
				html			HTML文件目录
				web-INF			Web项目核心目录(固定名称)
					web.xml		web项目配置文件
		test					测试目录
		pom.xml

3、IDEA使用Tomcat

  • 在IDEA中使用本地Tomcat进行项目部署,相对来说步骤比较繁琐,所以我们需要一种更简便的方式来替换它,那就是直接使用Maven中的Tomcat插件来部署项目,具体的实现步骤,只需要两步,分别是:

    • 在pom.xml中添加Tomcat插件

      <build>
      	<plugins>
      		<!--Tomcat插件 -->
      		<plugin>
      			<groupId>org.apache.tomcat.maven</groupId>
      			<artifactId>tomcat7-maven-plugin</artifactId>
      			<version>2.2</version>
                  <configuration>
                      <port>80</port>
                      <path>/</path>
                  </configuration>
      		</plugin>
      	</plugins>
      </build> 
      
    • 使用Maven Helper插件快速启动项目,选中项目,右键–>Run Maven --> tomcat7:run

【注】
如果选中项目并右键点击后,看不到Run Maven和Debug Maven,这个时候就需要在IDEA中下载Maven Helper插件,具体的操作方式为: File -->Settings --> Plugins --> Maven Helper ---> Install,安装完后按照提示重启IDEA,就可以看到了。

0X0b Servlet

1、快速入门

创建Web项目,导入Servlet依赖坐标
<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>javax.servlet-api</artifactId>
    <version>3.1.0</version>
    <scope>provided</scope>
</dependency>
// ServletDemo.java
package com.company;

import javax.servlet.*;
import javax.servlet.annotation.WebServlet;
import java.io.IOException;

@WebServlet("/demo")
public class ServletDemo implements Servlet {
    // 五种方法全部重写,此处只写一个
    @Override
    public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
        System.out.println("Servlet Hello World!");
    }
}

2、Servlet生命周期

1、加载和实例化阶段
2、初始化
3、请求处理
4、服务终止
package com.company;

import javax.servlet.*;
import javax.servlet.annotation.WebServlet;
import java.io.IOException;

//负整数:第一次被访问时创建Servlet对象
//0或正整数:服务器启动时创建Servlet对象,数字越小优先级越高
@WebServlet(urlPattern("/demo"), loadOnSatrtup=1)
public class ServletDemo implements Servlet {
    /*
    * 初始化方法
    * 调用时机:默认情况下,Servlet第一次被访问时,调用
    * 调用次数:1次
    */
    @Override
    public void init(ServletConfig servletConfig) throws ServletException {
        System.out.println("init...");
    }
    
    /*
     * 提供服务
     * 调用时机:每一次Servlet被访问调用
     * 调用次数:多次
     */
    @Override
    public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
        System.out.println("Servlet Hello World!");
    }
    
    /*
     * 销毁
     * 调用时机:内存释放或者服务器关闭的时候,Servlet对象会被销毁
     * 调用次数:1次
     */
    @Override
    public void destroy() {
        System.out.println("destroy...");
    }
}

3、Servlet体系结构

每个Servlet类中都会使用HttpServlet类中的doGet和doPost方法。因此每个类都需要将请求区分,我们可以使用自定义一个MyHttpServlet类来封装判断处理业务
因此在Servlet只需要继承MyHttpServlet类,并且重写doGet和doPost方法即可
// MyHttpServlet.java
package com.company;

import javax.servlet.*;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServletRequest;
import java.io.IOException;

public class MyHttpServlet implements Servlet {
    @Override
    public void init(ServletConfig servletConfig) throws ServletException {
        System.out.println("init...");
    }

    @Override
    public ServletConfig getServletConfig() {
        return null;
    }

    @Override
    public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
        HttpServletRequest request = (HttpServletRequest) servletRequest;
        String method = request.getMethod();
        if ("GET".equals(method)){
            doGet(servletRequest, servletResponse);
        }
        else if("POST".equals(method)){
            doPost(servletRequest, servletResponse);
        }
    }

    protected void doGet(ServletRequest servletRequest, ServletResponse servletResponse){
    }

    protected void doPost(ServletRequest servletRequest, ServletResponse servletResponse){
    }

    @Override
    public String getServletInfo() {
        return null;
    }

    @Override
    public void destroy() {
        System.out.println("destroy...");
    }
}
//ServletDemo.java
package com.company;

import javax.servlet.*;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServletRequest;
import java.io.IOException;

@WebServlet("/demo")
public class ServletDemo extends MyHttpServlet {
    @Override
    protected void doGet(ServletRequest servletRequest, ServletResponse servletResponse){
        System.out.println("get...");
    }

    @Override
    protected void doPost(ServletRequest servletRequest, ServletResponse servletResponse) {
        System.out.println("post...");
    }
}

4、Servlet的urlPattern配置

一个Servlet,可以配置多个urlPattern
@WebServlet(urlPatterns = {"/demo1", "/demo2"})
匹配规则:
	1、精确匹配:"/user/demo"		路径必须为/user/select
	2、目录匹配:"/user/*"		路径为/user/aaa、/user/bbb等等
	3、扩展名匹配:"*.do"		   路径为/aaa.do、/bbb.do等等,不能以/开头
	4、任意匹配:"/"				路径为所有
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

horizonTel

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值