Servlet

  1. Tomcat项目发布方式1:复制到webapps
  2. Tomcat项目发布方式2:server.xml虚拟目录
  3. Tomcat项目发布方式3:独立xml虚拟目录发布
  4. Servlet2.5创建第1个Servlet
  5. Servlet3.0的方式开发Servlet
  6. Servlet开发配置模板优化生成Servlet
  7. idea开发工具web项目部署资源方式介绍
  8. Servlet体系结构

1.Tomcat项目发布方式1:复制到webapps

操作方法:

  1. 在webapps目录里面创建一个资源目录
    Servlet_第1张图片
  2. 资源目录里面放一个index.html资源文件
    在这里插入图片描述
  3. 使用浏览器访问:`http://127.0.0.1:8080/itheima/index.html
    Servlet_第2张图片
    webapps发布资源目录2种方式
发布方式 访问路径
webapps/创建目录/资源文件 http://localhost:8080/目录名字/资源文件
webapps/ROOT/资源文件 http://localhost:8080/资源文件

注意:因为ROOT默认网站(项目)根目录,访问的时候ROOT目录不写

webapps发布资源的优点:

发布简单,自己将资源放入到webapps目录下
由于简单,这种发布方式是最重要的,以后大家就使用这种方式

webapps发布资源的缺点:

如果发布很多资源目录会造成资源堆积

2.Tomcat项目发布方式2:server.xml虚拟目录

通过虚拟目录资源发布方式可以将资源发布服务器的外部,解决webapps目录发布资源堆积的问题

配置方式

修改配置文件server.xml,在host标签里面增加Context标签节点

<Context path="虚拟资源目录"  docBase="真实发布资源目录"/>

代码

   <Host name="localhost"  appBase="webapps"
            unpackWARs="true" autoDeploy="true">

        <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
               prefix="localhost_access_log" suffix=".txt"
               pattern="%h %l %u %t "%r" %s %b" />
	    
		
		<Context path="/javaee122" docBase="C:/MyFileTest/gqwm"/>
      Host>

修改了配置文件需要重新启动Tomcat

浏览器上测试

浏览器访问路径:http://localhost:8080/虚拟资源目录/资源路径
Servlet_第3张图片

3.Tomcat项目发布方式3:独立xml虚拟目录发布

  1. 在tomcat/conf/catalina/localhost中创建xml配置文件
  2. 名称假设为:second.xml,这个名称就是项目的访问路径
  3. 添加xml文件的内容为
<Context docBase="项目所在的目录" />

配置
Servlet_第4张图片
浏览器上测试
Servlet_第5张图片
独立xml虚拟目录发布的好处是什么

不用重启Tomcat服务器,资源也放在Tomcat的外面

4.Servlet2.5创建第1个Servlet

Tomcat与Servlet的关系

静态网页
Servlet_第6张图片
动态网页
Servlet_第7张图片

Servlet的作用

能够接收浏览器发送的请求,然后动态生成一个网页返回给浏览器

servlet2.5实现步骤

  1. 使用idea创建web项目
    Servlet_第8张图片
    在这里插入图片描述

  2. 创建一个类Demo1HelloServlet继承于HttpServlet类,并重写doGet()方法。在浏览器上使用打印流输出Hello Servlet!

package com.itheima.servlet;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
import java.sql.Timestamp;

/**
 创建1个Servlet,继承于HttpServlet抽象类,它已经实现了Servlet接口
 */
public class Demo1Servlet extends HttpServlet {

    // 重写doGet或doPost
    // request一个请求对象, response是一个响应对象。这两个对象由tomcat创建,我们直接使用即可
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // 设置内容的类型和编码,告诉浏览器这是一个网页,编码是utf-8
        response.setContentType("text/html;charset=utf-8");
        // 得到打印流,将数据输出给浏览器
        PrintWriter out = response.getWriter();
        // 把网页打印给浏览器
        out.print("

我是第1个Servlet,现在时间是:" + new Timestamp(System.currentTimeMillis()) + "

"
); } }
  1. 配置web.xml让用户访问的路径找到servlet去执行处理请求与响应
    Servlet_第9张图片

idea部署Servlet步骤

  1. 部署项目
    Servlet_第10张图片

  2. 运行项目
    Servlet_第11张图片

  3. 浏览器访问动态资源

http://localhost:8080/day24_03_servlet2_5_war_exploded/demo
Servlet_第12张图片

5. Servlet3.0的方式开发Servlet

Servlet3.0的新特性

  1. 新增了一些注解,简化的javaweb代码开发,可以省略web.xml配置文件
  2. 支持异步处理:多线程技术
  3. 支持可插性特性:书写的代码编译后生成的class文件可以直接部署到其他项目自动加载执行,即可实现新功能的扩充

Servlet3.0开发步骤

  1. 使用idea创建web应用程序
    Servlet_第13张图片

Servlet_第14张图片

  1. 创建Demo2HelloServlet类,重写doGet方法。
package com.itheima.servlet;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;

/**
 使用注解开发Servlet
 */
@WebServlet(name = "demo2", urlPatterns = "/demo2")
public class Demo2Servlet extends HttpServlet {
    // 重写doGet方法
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // 设置响应的类型和编码
        response.setContentType("text/html;charset=utf-8");
        // 得到打印流
        PrintWriter out = response.getWriter();
        out.print("

我是Servlet3.0创建的

"
); } }
  1. 使用注解@WebServlet配置url映射servlet。
    在这里插入图片描述
    在这里插入图片描述
    也可以只写默认属性:
    在这里插入图片描述
  2. 重启服务器部署运行

idea工具会自动将新创建的web项目部署到服务器上,不用切换项目部署,直接启动服务器即可,注意部署新项目一定要重启服务器

在这里插入图片描述
2. 浏览器上执行效果
在这里插入图片描述

6. Servlet开发配置模板优化生成Servlet

使用默认模板向导生成Servlet操作步骤与问题
Servlet_第15张图片
Servlet_第16张图片

修改模板优化生成Servlet

  1. 找到配置servlet的生成模板位置
    在这里插入图片描述

  2. 修改模板内容为

默认模板

#if (${PACKAGE_NAME} && ${PACKAGE_NAME} != "")package ${PACKAGE_NAME};#end
#parse("File Header.java")
@javax.servlet.annotation.WebServlet(name = "${Entity_Name}")
public class ${Class_Name} extends javax.servlet.http.HttpServlet {
    protected void doPost(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response) throws javax.servlet.ServletException, java.io.IOException {
        
    }

    protected void doGet(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response) throws javax.servlet.ServletException, java.io.IOException {

    }
}

修改后的模板

#if (${PACKAGE_NAME} && ${PACKAGE_NAME} != "")package ${PACKAGE_NAME};#end
#parse("File Header.java")
@javax.servlet.annotation.WebServlet(name = "${Entity_Name}", urlPatterns= "/${Entity_Name}")
public class ${Class_Name} extends javax.servlet.http.HttpServlet {
    protected void doPost(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response) throws javax.servlet.ServletException, java.io.IOException {
        doGet(request, response);
    }

    protected void doGet(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response) throws javax.servlet.ServletException, java.io.IOException {

    }
}

Servlet_第17张图片
3. 使用新模板再次生成Servlet看效果
Servlet_第18张图片
以后开发servlet推荐使用Servlet模板+注解的方式

7.idea开发工具web项目部署资源方式介绍

实现步骤

1.idea部署web资源目录的真实位置
Servlet_第19张图片
部署到webapps外部了,采用的是什么部署方式呢?独立xml虚拟目录方式
Servlet_第20张图片
访问资源管理器对应的位置
Servlet_第21张图片
编辑xml文件
Servlet_第22张图片
疑问:将虚拟部署资源目录名字设置为“/”,项目部署到哪里去了?如何访问资源?

配置虚拟目录为“/”
Servlet_第23张图片
Servlet_第24张图片
重启服务器运行
Servlet_第25张图片
访问路径

http://localhost:8080/demo

说明

虚拟部署目录名字“/”,访问的路径中没有虚拟目录名字了,依然采用独立xml虚拟目录部署方式,生成的xml文件为ROOT.xml,这里如果名字为ROOT,访问就不写虚拟目录名字

Servlet_第26张图片

8. Servlet体系结构

面试题,请说出Servlet体系结构?
体系结构关系
  • 查看某一个类的体系结构,光标放到类的上面使用Ctrl+Alt+U

  • 浏览器通过url请求服务器,服务器首先会调用servlet的service方法,由于子类重写了service方法会调用子类重写的doGet或doPost方法

Servlet_第27张图片

Servlet接口都有什么方法

Servlet_第28张图片

GenericServlet 类
实现了Servlet接口,重写很多方法
HttpServlet类
HttpServlet类继承GenericServlet接口,重写service方法,判断是什么请求类型,如果是get请求走子类的doGet方法,如果是post请求,都子类doPost方法。

疑问:直接继承GenericServlet 类能实现处理请求与响应吗?

可以的

新建类继承GenericServlet

package com.itheima.servlet;

import javax.servlet.GenericServlet;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
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(name = "Demo3Servlet", urlPatterns = "/Demo3Servlet")
public class Demo3Servlet extends GenericServlet {

    @Override
    public void service(ServletRequest request, ServletResponse response) throws ServletException, IOException {
        response.getWriter().write("hello Demo3Servlet");
    }
}

浏览器访问
Servlet_第29张图片
注意:404意味找不到资源,如果服务已经启动,修改或新增了web项目的任何资源,必须重新部署项目再访问

重新部署
Servlet_第30张图片
部署完成的标识
在这里插入图片描述
访问
Servlet_第31张图片

你可能感兴趣的:(java,Web,Tomcat)