JavaWeb核心-Tomcat基本使用

本文详细介绍了如何在IntelliJIDEA中使用Maven创建和部署Web项目,包括配置Servlet、处理依赖、部署结构以及Servlet的生命周期和资源路径管理。
摘要由CSDN通过智能技术生成

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依赖坐标

<dependencies>
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>3.1.0</version>
            <scope>provided</scope>
        </dependency>
    </dependencies>

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

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的访问路径

@WebServlet("/demo")

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

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被创建时执行,只执行一次

void init(Servlet config)

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

void service(ServletRequest req,ServletResponse res)

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

void destory()

获取ServletConfig对象

ServletConfig getServletConfig()

获取Servlet信息

String getServletInfo()

Servlet体系结构

Servlet体系根接口

Servlet抽象实现类

对HTTP协议封装的Servlet实现类

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

Servlet urlPattern配置

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

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

@WebSrvlet(urlPatterns = {"/demo1","/demo2"})

2.urlPattern配置规则

1.精确匹配

配置路径:
@WebServlet("/user/select")
访问路径:

localhost:8080/web-demo/user/select

2.目录匹配

配置路径:
@WebServlet("/user/*")
访问路径:

localhost:8080/web-demo/user/aaa

localhost:8080/web-demo/user/bbb

3.扩展名匹配

配置路径:
@WebServlet("*.do")
访问路径:

localhost:8080/web-demo/aaa.do

localhost:8080/web-demo/bbb.do

4.任意匹配

配置路径:
@WebServlet("/")
@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方式:
String getQueryString()
POST方式:
BufferdReader getReader()
Map<String,String[]> getParameterMap():获取所有参数Map集合

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

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

请求转发

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

实现方式:

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):

一种资源跳转方式

实现方式:

resp.setStatus(302);
resp.setHeader("location","资源B的路径");

重定向特点:

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

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

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

资源路径问题

明确路径对谁使用

浏览器使用:

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

服务器使用:

不需要加虚拟目录

Response响应字符数据

使用:

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

PrintWriter writer = resp.getWriter();

2.写数据

writer.writer("aaa");

注意:

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

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

resp.setContentType("text/html;charset=utf-8");

Response响应字节数据

使用:

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

ServletOutputStream outputStream = resp.getOutputStream();

2.写数据

outputStream.write(字节数据);

Response响应字节数据

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();

  • 10
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值