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();
相关推荐
为将者,自当识天晓地。11 分钟前
c++多线程
java·开发语言
daqinzl19 分钟前
java获取机器ip、mac
java·mac·ip
激流丶35 分钟前
【Kafka 实战】如何解决Kafka Topic数量过多带来的性能问题?
java·大数据·kafka·topic
Themberfue39 分钟前
Java多线程详解⑤(全程干货!!!)线程安全问题 || 锁 || synchronized
java·开发语言·线程·多线程·synchronized·
让学习成为一种生活方式1 小时前
R包下载太慢安装中止的解决策略-R语言003
java·数据库·r语言
晨曦_子画1 小时前
编程语言之战:AI 之后的 Kotlin 与 Java
android·java·开发语言·人工智能·kotlin
南宫生1 小时前
贪心算法习题其三【力扣】【算法学习day.20】
java·数据结构·学习·算法·leetcode·贪心算法
Heavydrink2 小时前
HTTP动词与状态码
java
ktkiko112 小时前
Java中的远程方法调用——RPC详解
java·开发语言·rpc
计算机-秋大田2 小时前
基于Spring Boot的船舶监造系统的设计与实现,LW+源码+讲解
java·论文阅读·spring boot·后端·vue