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();
相关推荐
源码技术栈15 分钟前
SaaS基于云计算、大数据的Java云HIS平台信息化系统源码
java·大数据·云计算·云his·his系统·云医院·区域his
编程、小哥哥17 分钟前
互联网大厂Java面试:从Spring Boot到微服务架构的技术深挖
java·spring boot·redis·微服务·prometheus·面试技巧
揽你·入怀29 分钟前
数据结构:ArrayList简单实现与常见操作实例详解
java·开发语言
okok__TXF42 分钟前
SpringBoot3+AI
java·人工智能·spring
AA-代码批发V哥1 小时前
Math工具类全面指南
java·开发语言·数学建模
caihuayuan53 小时前
生产模式下react项目报错minified react error #130的问题
java·大数据·spring boot·后端·课程设计
编程、小哥哥3 小时前
Java大厂面试:从Web框架到微服务技术的场景化提问与解析
java·spring boot·微服务·面试·技术栈·数据库设计·分布式系统
界面开发小八哥3 小时前
「Java EE开发指南」如何使用MyEclipse的可视化JSF编辑器设计JSP?(二)
java·ide·人工智能·java-ee·myeclipse
川石课堂软件测试3 小时前
涨薪技术|0到1学会性能测试第65课-SQL捕获阻塞事件
数据库·sql·功能测试·oracle·性能优化·单元测试·tomcat
找不到、了4 小时前
Spring-Beans的生命周期的介绍
java·开发语言·spring