JavaWeb核心-Tomcat基本使用

IDEA中创建Maven Web项目

web项目结构:

Maven Web项目结构:

开发中的项目

部署的Java项目结构:

开发完成可以部署的项目

注意:

编译后的Java字节码文件和resources的资源文件,放到WEB-INF下的classes目录下

pom.xml中依赖坐标对应的jar包,放入WEB-INF下的lib目录下

方式一:使用骨架

骨架:项目模板

1.选择web项目骨架,创建项目

2.删除pom.xml中多余的坐标

3.补齐缺失的目录结构

方式二:不使用骨架

1.选择web项目骨架,创建项目

2.pom.xml中添加打包方式为war

3.补齐缺失的目录:webapp

IDEA中使用Tomcat

1.集成本地Tomcat

将本地Tomcat集成到idea中,然后进行项目部署即可

2.使用Tomcat Maven插件

1.pom.xml添加Tomcat插件

2.使用Maven Helper插件快速启动项目,选中项目,右键Run Maven-->tomcat7:run

Servlet

Servlet是Java提供的一门动态web资源开发技术

Servlet是JavaEE规范之一,其实就是一个接口,将来我们需要定义Servlet类实现Servlet接口,并由web服务器运行Servlet

Servlet快速入门

1.创建web项目,导入Servlet依赖坐标

java 复制代码
<dependencies>
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>3.1.0</version>
            <scope>provided</scope>
        </dependency>
    </dependencies>

2.创建:定义一个类,实现Servlet接口,并重写接口中所有方法,并在service方法中输入一句话

java 复制代码
package com.itheima.web;

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

public class ServletDemo1 implements Servlet {
    @Override
    public void init(ServletConfig servletConfig) throws ServletException {

    }

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

    @Override
    public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
        System.out.println("servlet hello world~");
    }

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

    @Override
    public void destroy() {

    }
}

3.配置:在类上使用@WebServlet注解,配置该Servlet的访问路径

java 复制代码
@WebServlet("/demo")

4.访问:启动Tomcat,浏览器输入URL访问该Servlet

html 复制代码
http://localhost:8080/web-demo/demo1

Servlet执行流程&生命周期

Servlet执行流程

1.Servlet由谁创建?Servlet方法由谁调用

Servlet由服务器创建,Servlet方法由web服务器调用

2.服务器怎么知道Servlet中一定有service方法?

因为我们自定义的Servlet,必须实现Servlet'接口并复写其方法,而Servlet接口中有service方法

Servlet执行周期

对象的生命周期指一个对象从被创建到被销毁的整个过程

Servlet运行在Servlet容器(web服务器)中,其生命周期由容器来管理,分为四个阶段:

1.加载和实例化:默认情况下,当Servlet第一次被访问时,由容器创建Servlet对象

2.初始化:在Servlet实例化后,容器将调用Servlet的init()方法初始化这个对象,完成一些如加载配置文件、创建连接等初始化的工作。该方法只调用一次

3.请求处理:每次请求Servlet时,Servlet容器都会调用Servlet的service()方法对请求进行处理。

4.服务终止:当需要释放内存或者容器关闭时,容器就会调用Servlet实例的destroy()方法完成资源的释放。在destroy()方法调用之后,容器会释放Servlet实例,该实例随后会被Java的垃圾收集器所回收

Servlet方法介绍

初始化方法,在Servlet被创建时执行,只执行一次

java 复制代码
void init(Servlet config)

提供服务方法,每次Servlet被访问,都会调用该方法

java 复制代码
void service(ServletRequest req,ServletResponse res)

销毁方法,当Servlet被销毁时,调用该方法。在内存释放或服务器关闭时销毁Servlet

java 复制代码
void destory()

获取ServletConfig对象

java 复制代码
ServletConfig getServletConfig()

获取Servlet信息

java 复制代码
String getServletInfo()

Servlet体系结构

Servlet体系根接口

Servlet抽象实现类

对HTTP协议封装的Servlet实现类

我们将来开发B/S架构的web项目,都是针对HTTP协议,所以我们自定义Servlet,会继承HttpServlet

Servlet urlPattern配置

Servlet要想被访问,必须配置其访问路径(urlPattern)

1.一个Servlet,可以配置多个urlPattern

java 复制代码
@WebSrvlet(urlPatterns = {"/demo1","/demo2"})

2.urlPattern配置规则

1.精确匹配

配置路径:
java 复制代码
@WebServlet("/user/select")
访问路径:

localhost:8080/web-demo/user/select

2.目录匹配

配置路径:
java 复制代码
@WebServlet("/user/*")
访问路径:

localhost:8080/web-demo/user/aaa

localhost:8080/web-demo/user/bbb

3.扩展名匹配

配置路径:
java 复制代码
@WebServlet("*.do")
访问路径:

localhost:8080/web-demo/aaa.do

localhost:8080/web-demo/bbb.do

4.任意匹配

配置路径:
java 复制代码
@WebServlet("/")
java 复制代码
@WebServlet("/*")
访问路径:

localhost:8080/web-demo/hehe

localhost:8080/web-demo/haha

Request获取请求数据

请求数据分为3部分:

1.请求行:

Stinrg getMethod():获取请求方式:GET

String getContexPath():获取虚拟目录(项目访问路径)

StringBuffer getRequestURL():获取URL(统一资源定位符)

String getRequestURI():获取URL(统一资源标识符)

String getQueryString():获取请求参数(GET方式)

2.请求头:

String getHeader(String name):根据请求头名称,获取值

3.请求体:

ServletputStream getInputStream():获取字节输入流

BufferReader getReader():获取字符输入流

Request通用方式获取请求参数

请求参数获取方式:

GET方式:
java 复制代码
String getQueryString()
POST方式:
java 复制代码
BufferdReader getReader()
Map<String,String[]> getParameterMap():获取所有参数Map集合

String[] getParameterValues(String name):根据名称获取参数值(数组)

String getParameter(String name):根据名称获取参数值(单个值)

请求转发

请求转发(forward):一种在服务器内部的资源跳转方式

实现方式:

java 复制代码
req.getRequestDispatcher("资源B路径").forward(req,resp);

请求转发资源间共享数据:使用Request对象

void setAttribute(String name,Object o):存储数据到request域中

Object getAttribute(String name):根据key,获取值

void removeAttribute(String name):根据key,删除该键值对

请求转发特点:

浏览器地址栏路径不发生变化

只能转发到当前服务器的内部资源

一次请求,可以在转发的资源间使用request共享数据

Response设置响应数据功能

响应数据分为3部分:

1.响应行:

void setStatus(int sc):设置响应状态码

2.响应头:

void setHeader(String name,String value):设置响应头键值对

3.响应体:

PrintWriter getWriter():获取字符输出流

ServletOutPutStream getOutputStream():获取字节输出流

Respon完成重定向

重定向(Redirect):

一种资源跳转方式

实现方式:

java 复制代码
resp.setStatus(302);
resp.setHeader("location","资源B的路径");

重定向特点:

浏览器地址栏路径发生变化

可以重定向到任意位置的资源(服务器内部、外部均可)

两次请求,不能在多个资源使用request共享数据

资源路径问题

明确路径对谁使用

浏览器使用:

需要加虚拟目录(项目访问路径)

服务器使用:

不需要加虚拟目录

Response响应字符数据

使用:

1.通过Response对象获取字符输出流

java 复制代码
PrintWriter writer = resp.getWriter();

2.写数据

java 复制代码
writer.writer("aaa");

注意:

该流不需要关闭,随着响应结束,response对象销毁,由服务器关闭

中文数据乱码:原因通过Response获取的字符输出流默认编码:ISO-8859-1

java 复制代码
resp.setContentType("text/html;charset=utf-8");

Response响应字节数据

使用:

1.通过Response对象获取字符输出流

java 复制代码
ServletOutputStream outputStream = resp.getOutputStream();

2.写数据

java 复制代码
outputStream.write(字节数据);

Response响应字节数据

java 复制代码
FileInputStream fis = new FileInputStream("d://a.jpg");
        ServletOutputStream os = resp.getOutputStream();
        byte[] buff = new byte[1024];
        int len = 0;
        while ((len = fis.read(buff)) != -1){
            os.write(buff,0,len);
        }
        fis.close();
相关推荐
FIN技术铺1 分钟前
Spring Boot框架Starter组件整理
java·spring boot·后端
小曲程序8 分钟前
vue3 封装request请求
java·前端·typescript·vue
陈王卜26 分钟前
django+boostrap实现发布博客权限控制
java·前端·django
小码的头发丝、26 分钟前
Spring Boot 注解
java·spring boot
java亮小白199731 分钟前
Spring循环依赖如何解决的?
java·后端·spring
飞滕人生TYF38 分钟前
java Queue 详解
java·队列
武子康1 小时前
大数据-230 离线数仓 - ODS层的构建 Hive处理 UDF 与 SerDe 处理 与 当前总结
java·大数据·数据仓库·hive·hadoop·sql·hdfs
武子康1 小时前
大数据-231 离线数仓 - DWS 层、ADS 层的创建 Hive 执行脚本
java·大数据·数据仓库·hive·hadoop·mysql
苏-言1 小时前
Spring IOC实战指南:从零到一的构建过程
java·数据库·spring
界面开发小八哥1 小时前
更高效的Java 23开发,IntelliJ IDEA助力全面升级
java·开发语言·ide·intellij-idea·开发工具