IDEA配置JavaWeb和Servlet(2024版)

常用的JavaWeb服务软件

1,Tomcat:由 Apache 组织提供的一种 Web 服务器,提供对 jsp 和 Servlet 的支持。它 是一种轻量级的 javaWeb 容器(服务器),也是当前应用最广的 JavaWeb 服务器(免费)

2,Jboss:是一个遵从 JavaEE 规范的、它支持所有的 JavaEE 规范(免费)

3,GlassFish: 由 Oracle 公司开发的一款 JavaWeb 服务器,是一款商业服务器,达到产 韩顺平Java 工程师 品级质量(应用很少)

4, Resin:是 CAUCHO 公司的产品,是一个非常流行的服务器,对 servlet 和 JSP 提供了 良好的支持, 性能也比较优良(收费)

5,WebLogic【很猛】:是 Oracle 公司的产品,支持 JavaEE 规范, 而且不断的完善以适 应新的开发要求,适合大型项目(收费,用的不多,适合大公司)

Tomcat下载配置流程

1,下载Tomcat:Apache Tomcat® - Welcome!(以8.5版本为例)

2,获取Tomcat安装程序包

3,使用zip包安装Tomcat

找到你需要用的 Tomcat 版本对应的 zip 压缩包,解压到需要安装的目录即可

4,配置JAVA_HOME 环境变量

Tomcat 本质是一个Java程序,所以要jdk, 会去根据JAVA_HOME 使用指定jdk

5,Tomcat启动

双击 bin 目录下的 startup.bat 文件

6,关闭Tomcat服务

进入Tomcat 的 bin 目录下的 shutdown.bat 双击,就可以停止 Tomcat 服务器(推荐)

7,修改Tomcat服务端口

Tomcat 目录下的 conf 目录,修改 server.xml 配置文件

Tomcat目录结构

Web应用的组成

一个WEB应用由多个WEB资源或其它文件组成,包括html文件、css文件、js文件、动 态web页面、java程序、支持jar包、配置文件等。开发人员在开发web应用时,按照规 定目录结构存放这些文件。否则,在把web应用交给web服务器管理时,不仅可能会使 web 应用无法访问,还会导致web服务器启动报错。

JavaWeb程序/应用/工程目录结构

浏览器访问web服务器文件UMl时序图

IDEA开发配置JavaWeb工程(IDEA2024版)

1,新建java项目

2,右键项目名选择Add FrameWork Support

注:如果右键没有Add FrameWork Support,点击Help搜索Add FrameWork Support

4,选择Web Application,点击ok

5,配置完后,项目路径为

路径介绍

当tomcat 启动时,会生成out目录,该目录就是 原项目资源的映射,我们浏览器访问的 资源是 out目录

6,配置Tomcat,点击项目配置按钮

7,点击左上角加号,选择Tomcat Server->Local

8,点击Configure,配置Tomca的启动路径(前面解压的安装路径)

9,点击Deployment,点击加号,选择Artifact

10,推荐修改为与此项目名相同

11,配置启动选项,推荐为热启动,点击应用,ok

on update action : 表示当我们更新操作是,Tomcat 会自动更新类和资源 (当jsp/html文件修改时,可以生效,但是如果你修改的java文件,需要Redepoly才会生效)

on frame deactivation : 表示 IDEA 失去焦点(比如最小化), 也会导致 jsp/html 发生更 新 , 但是java修改了,还是需要redeploy

动态WEB开发核心-Servlet

什么是Servlet

Servlet 在开发动态WEB工程中,得到广泛的应用,掌握好Servlet非常重要了,Servlet(基 石)是SpringMVC 的基础

Servlet(java 服务器小程序),它的特点:

  1. 他是由服务器端调用和执行的(一句话:是Tomcat解析和执行)

  2. 他是用java语言编写的, 本质就是Java类

  3. 他是按照Servlet规范开发的(除了tomcat->Servletweblogic->Servlet)

  4. 功能强大,可以完成几乎所有的网站功能(在以前,我们老程员,使用Servlet开发网站) 技 术栈要求高

IDEA实现Servlet开发

1,在Tomcat的安装路径下的lib路径下,复制servlet-api.jar包

2,在新建的Web项目下的web-WEB-INF下新建lib文件夹,并粘贴刚才复制的jar包在这个文件夹下

3,右键这个jar包,选择Add as Library

4,选择默认命名,点击ok,servlet-jar包会出现下级目录,表示配置成功

实现XMl文件配置servlet程序的访问地址

1,在src下新建java文件类,使其实现Servlet接口,重写对应的方法

package com.zhang.servlet;

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

/**
 * @author 子佩
 * @version 1.0
 * 1,开发Servlet 需要 实现Servlet接口
 * 2,实现Servlet接口的方法
 */
public class HelloServlet implements Servlet {

    /**
     * 初始化servlet
     * 当创建HttpServlet 实例时,会调用init方法
     * @param servletConfig
     * @throws ServletException
     */
    @Override
    public void init(ServletConfig servletConfig) throws ServletException {
        System.out.println("Hello Servlet");
    }

    /**
     * 返回servletConfig 也就是返回Servlet配置信息
     * @return
     */

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

    /**
     * service方法处理浏览器的请求(包括get/post)
     * 当浏览器每次请求servlet时,就会调用service
     * 当tomcat调用该方法时,会把http请求的数据封装成实现了ServletRequest接口的request对象
     * 通过ServletRequest对象,可以得到用户提交的数据
     * ServletResponse 对象用于返回数据给tomcat->浏览器
     * @param servletRequest
     * @param servletResponse
     * @throws ServletException
     * @throws IOException
     */
    @Override
    public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {

    }

    /**
     * 返回servlet信息
     * @return
     */
    @Override
    public String getServletInfo() {
        return "";
    }

    /**
     * 该方法是在servlet销毁时,被调用
     * 只调用一次
     */
    @Override
    public void destroy() {

    }
}

2,在WEB-INF文件下的web.xml配置访问路径

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
         version="4.0">
    <!--web.xml 主要用来配置web应用使用到的servlet-->
    <!--配置HelloServlet-->



    <!--
     <servlet-name>HelloServlet</servlet-name>   给Servlet取名,该名字唯一
     <servlet-class>com.zhang.servlet.HelloServlet</servlet-class>   Servlet的类的全路径:Tomcat在反射生成该Servlet需要使用
     <url-pattern>helloServlet</url-pattern>   这个就是该servlet访问的url的配置(路径)
     这时我们应该这样访问servlet http://localhost:8080/web应用名/helloServlet
     url-pattern 取名是程序员决定的
     load-on-startup 表示在tomcat启动时,会自动的去加载servlet实例
    -->
    <servlet>
        <servlet-name>HelloServlet</servlet-name>
        <servlet-class>com.zhang.servlet.HelloServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>HelloServlet</servlet-name>
        <url-pattern>/helloServlet</url-pattern>
    </servlet-mapping>
</web-app>

31,启动服务器,浏览器访问http://localhost:8080/web应用名/helloServlet

浏览器调用Servlet流程分析

Servlet生命周期

  1. init()初始化阶段

  2. service()处理浏览器请求阶段

  3. destroy()终止阶段

初始化阶段

Servlet 容器(比如:Tomcat)加载 Servlet,加载完成后,Servlet 容器会创建一个Servlet实例 并调用init()方法,init()方法只会调用一次,Servlet容器在下面的情况装载Servlet

处理浏览器请求阶段(service方法)

  1. 每收到一个http请求,服务器就会产生一个新的线程去处理[线程]

  2. 创建一个用于封装HTTP请求消息的ServletRequest对象和一个代表HTTP响应消息的 ServletResponse 对象

  3. 然后调用Servlet的service()方法并将请求和响应对象作为参数传递进去

终止阶段 destory方法(体现Servlet完整的生命周期)

当web应用被终止,或者Servlet容器终止运行,或者Servlet类重新装载时,会调用destroy() 方法 , 比如重启tomcat,或者 redeployweb应用

Servlet注意事项

1,Servlet是一个供其他Java程序(Servlet引擎)调用的Java类,不能独自运行

2,针对浏览器的多次Servlet请求,通常情况下,服务器只会创建一个Servlet实例对象,也就是说Servlet实例对象一旦创建,就会驻留在内存中,为后续的其他请求服务,直至web容器退出/或者redeploy该web应用,servlet实例对象才会销毁

3,在Servlet的整个生命周期内,init方法只被调用一次。而每次请求导致Servlet引擎调用一次servlet的service方法

4,对于每次访问请求,Servlet引擎都会创建一个新的HttpServletRequset请求对象和一个新的HttpServletResponse响应对象,然后将这两个对象作为参数传递给它调用的Servlet的servlce方法,servlce方法再根据请求方式分别调用doXXX方法

5,如果在<servlet>元素中配置了一个<load-on-startup>元素,那么WEB应用程序在启动时, 就会装载并创建Servlet的实例对象、以及调用Servlet实例对象的init()方法.

Servlet-使用注解开发

使用xml去配置路径太过麻烦,再后面开发中会使用基于注解的开发模式

也就是使用@WebServlet注解配置访问路径

谈谈HttpServlet类

当需要处理不同的Http请求时,如处理POST和GET请求时,需要不同的处理业务,这时继承Servlet接口,不能满足业务需求,需要使用它的子类HttpServlet类

HttpServlet的继承关系图

HttpServlet继承自GenericServlet抽象类(GenericServlet了解就行)

HttpServlet类详解(重点)

1,HttpServlet类重写了service方法,根据不同的请求调用不同的方法

2,新增doGet和doPost方法,用于处理不同的请求(后面实现自己的业务会重写这些方法)

对于新手目前只需要了解这些方法就行,接下来我们做一个使用小案例

1,编写OkServlet去继承HttpServlet

2,注解方式配置OkServlet,一个Servlet支持配置多个urlpattern

package com.zhang.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;

/**
 * @author 子佩
 * @version 1.0
 */

@WebServlet(urlPatterns = {"/ok1","/ok2"})
public class OkServlet extends HttpServlet {


    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("get请求");
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("post请求");
    }
}

3,启动服务器,浏览器访问http://localhost:8080/web应用名/ok1或者访问http://localhost:8080/web应用名/helloServlet/ok2

4,响应处理流程

Http请求被tomcat处理,并封装成对应的request,这里继承于HttpServlet类,会被封装成HttpServletRequest对象(里面包括http请求的一些必要参数)。然后调用Servlet实例对象,这里会调用HttpServlet类,然后执行service方法,根据不同的请求方式,调用不同的doXXX方法,最后根据动态绑定机制,调用我们这里重写的doXXX方法(不了解动态绑定机制可能理解有点吃力,本质就是面向对象的知识)

Servlet urlPattern配置

精确匹配

配置路径 :@WebServlet(urlPatterns="/ok/zs")

访问servlet:localhost:8080/web项目名/ok/zs

目录匹配

配置路径 :@WebServlet(urlPatterns="/ok/*")

访问servlet:localhost:8080/web项目名/ok/aaa或者localhost:8080/web项目名/ok/bbb

即会匹配ok路径下的文件

扩展名匹配 配置路径 :@WebServlet("urlPatterns=*.action")注意不能带“/"

访问servlet:localhost:8080/web项目名/zbq/start.action或者 localhost:8080/web项目 名/zbq/ls.action

任意匹配

配置路径:@WebServlet(urlPatterns = "/")

访问servlet:localhost:8080/web项目名/aaa localhost:8080/web项目名/bbb localhost:8080/web项目名/ccc

注意:/ 和 /*的配置,会匹配所有的请求,这个比较麻烦,要避免

优先级遵守

精确路径>目录路径>扩展名路径>/*>/

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值