【JavaWeb】Servlet基础

news/2024/4/20 5:01:58/文章来源:https://blog.csdn.net/weixin_45965358/article/details/129251442

文章目录

  • 1.Tomcat服务器安装注意事项
  • 2.编写WebApp
  • 3.BS系统角色和协议
  • 4.模拟Servlet
    • 4.1模拟sun公司
    • 4.2模拟Tomcat服务器
    • 4.3模拟WebApp开发者
  • 5.开发一个带有Servlet的WebApp
    • 5.1创建一个名为crm的项目
    • 5.2 在项目中创建一个名为WEB-INF的文件(必须)
    • 5.3在WEB-INF下新建一个名为classes,将来存储java字节码文件。(必须)
    • 5.4在WENINF下新建一个名为lib的文件夹,将来存储jar包。
    • 5.5在WEB-INF下新建一个名为web.xml文件(必须)
    • 5.6 编写小Java程序,必须实现Servlet接口
    • 5.7编写HelloServlet程序
    • 5.8 将以上生成的class字节码拷贝到WEB-INF\classes下
    • 5.9 在web.xm注册Servlet类
    • 5.10启动Tomcat服务器
    • 5.11打开浏览器
  • 6.使用IDEA开发Servlet
    • 6.1项目
    • 6.2模块
    • 6.3 Module变成Java EE模块
    • 6.4编写Servlet
    • 6.5 导入数据库驱动
    • 6.6 在web.xm注册Servlet类
    • 6.7 前端页面
    • 6.8项目部署
    • 6.9启动Tomcat服务器
    • 6.10浏览器访问

1.Tomcat服务器安装注意事项

两个环境变量的配置:

  • JAVA_HOME jdk的根

在这里插入图片描述

  • CATALINK_HOME Tomcat服务器的根

请添加图片描述
没有配置CATALINK_HOME会出现如下:
请添加图片描述
防止使用命令shutdown.bat关机,将tomcat目录的bin下的shutdown.bat改为stop.bat
在这里插入图片描述

解决乱码:
conf下的logging.properties

在这里插入图片描述

2.编写WebApp

以下路径以/开头,带项目名,是一个绝对路径,不带
http://127.0.0.1:8080

<a href="/oa/login.html">user login</a>

3.BS系统角色和协议

在这里插入图片描述

4.模拟Servlet

4.1模拟sun公司

package javax.servlet;/*** 充当sun公司,将Servlet接口/规范制定出来** @author Beyong* @date 2023/02/28 09:11**/
public interface Servlet {void service();
}

4.2模拟Tomcat服务器

package org.apache;import javax.servlet.Servlet;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.Properties;
import java.io.FileReader;
import java.util.Scanner;/*** 充当Tomcat服务器的开发者** @author Beyong* @date 2023/02/28 09:26**/
public class Tomcat {public static void main(String[] args) throws IOException, ClassNotFoundException, IllegalAccessException, InstantiationException {System.out.println("tomcat服务器启动成功,开始接收用户输入");System.out.println("请输入访问地址");Scanner s = new Scanner(System.in);//用户输入请求路径String key = s.nextLine();//请求路径和Servlet之间的关系//Tomcat服务器解析配置文件FileReader reader = new FileReader("web.properties");Properties pro = new Properties();pro.load(reader);reader.close();//通过key获取valueString className = pro.getProperty(key);//通过反射机制创建对象Class clazz = Class.forName(className);//obj类型对于Tomcat服务器开发人员来说不知道Object obj = clazz.newInstance();//Tomcat服务器的开发者知道,你写的Servlet一定实现了Servlet接口Servlet servlet = (Servlet)obj;servlet.service();}
}

4.3模拟WebApp开发者

package com.sdnu.servlet;import javax.servlet.Servlet;/*** 充当银行webapp开发者** @author Beyong* @date 2023/02/28 08:47**/
public class BankServlet implements Servlet {public void service() {System.out.println("BankServlet's service...");}
}
package com.sdnu.servlet;import javax.servlet.Servlet;/*** 充当用户列表webapp开发者** @author Beyong* @date 2023/02/28 08:50**/
public class UserListServlet implements Servlet {public void service() {System.out.println("UserListServlet's service...");}
}
package com.sdnu.servlet;import javax.servlet.Servlet;/*** 充当用户登录webapp开发者** @author Beyong* @date 2023/02/28 08:51**/
public class UserLoginServlet implements Servlet {public void service() {System.out.println("UserLoginServlet's service...");}
}

web.properties

/aaa=com.sdnu.servlet.UserListServlet
/bbb=com.sdnu.servlet.UserLoginServlet
/ccc=com.sdnu.servlet.BankServlet

5.开发一个带有Servlet的WebApp

5.1创建一个名为crm的项目

在这里插入图片描述

5.2 在项目中创建一个名为WEB-INF的文件(必须)

在这里插入图片描述

5.3在WEB-INF下新建一个名为classes,将来存储java字节码文件。(必须)

在这里插入图片描述

5.4在WENINF下新建一个名为lib的文件夹,将来存储jar包。

在这里插入图片描述

5.5在WEB-INF下新建一个名为web.xml文件(必须)

在这里插入图片描述
从其它地方拷贝即可。

在这里插入图片描述

5.6 编写小Java程序,必须实现Servlet接口

在这里插入图片描述

  • 将这个路径配置到环境变量
    在这里插入图片描述

在这里插入图片描述

5.7编写HelloServlet程序

小程序:

package com.sdnu.servlet;import jakarta.servlet.Servlet;
import jakarta.servlet.ServletException;
import jakarta.servlet.ServletRequest;
import jakarta.servlet.ServletResponse;
import jakarta.servlet.ServletConfig;
import java.io.IOException;public class HelloServlet implements Servlet{public void init(ServletConfig config) throws ServletException{}public void service(ServletRequest request, ServletResponse response)throws ServletException, IOException{System.out.println("My Hello World!!!");}public void destroy(){}public String getServletInfo(){return "";}public ServletConfig getServletConfig(){return null;}
}

编译后:
在这里插入图片描述

获得字节码:
在这里插入图片描述

5.8 将以上生成的class字节码拷贝到WEB-INF\classes下

在这里插入图片描述

5.9 在web.xm注册Servlet类

目的:使得请求路径和Servlet类关联到一起。

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="https://jakarta.ee/xml/ns/jakartaee"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="https://jakarta.ee/xml/ns/jakartaeehttps://jakarta.ee/xml/ns/jakartaee/web-app_5_0.xsd"version="5.0"metadata-complete="true"><!--servlet描述信息--><!--任何一个servlet都对应一个servlet-mapping--><srvlrt><srvlet-name>aaa</servlet-name><srvlet-class>com.sdnu.servlet.HelloServlet</servlet-class></servlet><!--servlet映射信息--><servlet-mapping><!--这里名字随便,但要和上面的内容一致--><srvlet-name>aaa</servlet-name><!--这里要一个路径--><!--必须以/开始--><srvlet-pattern>/bbb/ccc/ddd</servlet-pattern></servlet-mapping>
</web-app>

5.10启动Tomcat服务器

5.11打开浏览器

输入url:

http://127.0.0.1:8080/crm/bbb/ccc/ddd

在这里插入图片描述

6.使用IDEA开发Servlet

6.1项目

新建一个空的项目。

6.2模块

在项目中新建一个新的javase模块。

6.3 Module变成Java EE模块

在这里插入图片描述
在这里插入图片描述
如下结构符合WebApp
在这里插入图片描述

6.4编写Servlet

package com.sdnu.javaweb.servlet;import jakarta.servlet.*;import java.io.IOException;
import java.io.PrintWriter;
import java.sql.*;/*** StudentServlet** @author Beyong* @date 2023/02/28 17:37**/
public class StudentServlet implements Servlet{@Overridepublic void init(ServletConfig servletConfig) throws ServletException {}@Overridepublic ServletConfig getServletConfig() {return null;}@Overridepublic void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {servletResponse.setContentType("text/html");PrintWriter out = servletResponse.getWriter();Connection conn = null;PreparedStatement ps = null;ResultSet rs = null;try {Class.forName("com.mysql.jdbc.Driver");String url = "jdbc:mysql://localhost:3306/java_web";String user = "root";String password = "XXXXXXX";conn = DriverManager.getConnection(url, user, password);String sql = "select no, name from t_student";ps = conn.prepareStatement(sql);rs = ps.executeQuery();while(rs.next()){String no = rs.getString("no");String name = rs.getString("name");out.print(no + "," + name + "</br>");}} catch (ClassNotFoundException | SQLException e){e.printStackTrace();} finally {if(rs != null){try{rs.close();} catch(SQLException e){e.printStackTrace();}}if(ps != null){try{ps.close();} catch(SQLException e){e.printStackTrace();}}if(conn != null){try{conn.close();} catch(SQLException e){e.printStackTrace();}}}}@Overridepublic String getServletInfo() {return null;}@Overridepublic void destroy() {}
}

需要导入如下两个JAR包

在这里插入图片描述

6.5 导入数据库驱动

在WEB-INF下新建一个名为lib的文件夹,将数据库对应的jar包放入。

6.6 在web.xm注册Servlet类

web.xml完成servlet类的注册。

<?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"><servlet><servlet-name>studentServlet</servlet-name><servlet-class>com.sdnu.javaweb.servlet.StudentServlet</servlet-class></servlet><servlet-mapping><servlet-name>studentServlet</servlet-name><url-pattern>/servlet/student</url-pattern></servlet-mapping>
</web-app>

6.7 前端页面

编写前端页面

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title>
</head>
<body><a href="/servlet/student">student list</a>
</body>
</html>

放到web目录下。

6.8项目部署

使得IDEA连接Tomcat,同时将webapp部署到Tomcat上。
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

6.9启动Tomcat服务器

debug启动
在这里插入图片描述

6.10浏览器访问

http://localhost:8080/xmm/servlet/student

展示数据库中的数据
在这里插入图片描述

在这里插入图片描述

作者:Beyong    
出处:Beyong博客
github地址 https://github.com/beyong2023

本博客中未标明转载的文章归作者Beyong有,欢迎转载,但未经作者同意必须保留此段声明,且在文章明显位置给出原文连接,否则保留追究法律责任的权利。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_75535.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MATLAB常用函数-gcf / gca / gco

MATLAB R2019a gcf: 返回当前图像对象的句柄值 语法&#xff1a; h gcf % 返回当前图像的句柄&#xff0c;如果没有图像&#xff0c;则会自动创建一个&#xff0c;然后返回其句柄 gca: 返回当前坐标轴对象的句柄值 语法&#xff1a; h gca % 返回当前图像中的当前坐标…

21_FreeRTOS内存管理

目录 FreeRTOS内存管理 FreeRTOS内存管理算法 内存管理相关API函数介绍 实验源码 FreeRTOS内存管理 在使用FreeRTOS创建任务、队列、信号量等对象的时,一般都提供了两种方法: 动态方法创建 自动地从 FreeRTOS 管理的内存堆中申请创建对象所需的内存&#xff0c;并且在对…

Git学习(1)pro git阅读

目录 目录&#xff1a; 1. 起步 2. Git 基础 3. Git 分支 4. 服务器上的 Git 5. 分布式 Git 第一章 1.3 Git是什么 1.6运行git前的配置 该开源图书网站 Git - Book (git-scm.com) 目录&#xff1a; 1. 起步 1.1 关于版本控制1.2 Git 简史1.3 Git 是什么&#xff1f;1…

卡方检验

一、卡方检验假设检验的一种&#xff0c;以实际观测值与期望值之间的偏离程度&#xff0c;解决是服从某个构成比率和是否具有相关性的问题。其偏离程度决定卡方值的大小&#xff0c;卡方值越小&#xff0c;偏差越小&#xff0c;实际值越趋于符合期望值。二、步骤在显著性为α0.…

Malware Dev 01 - 免杀之 PPID Spoofing 原理解析

写在最前 如果你是信息安全爱好者&#xff0c;如果你想考一些证书来提升自己的能力&#xff0c;那么欢迎大家来我的 Discord 频道 Northern Bay。邀请链接在这里&#xff1a; https://discord.gg/9XvvuFq9Wb我会提供备考过程中尽可能多的帮助&#xff0c;并分享学习和实践过程…

Active Directory管理帮助台

随着组织规模扩大&#xff0c;需要大幅增加Active Directory帮助台指派。随着组织开始在新地点开设办事处&#xff0c;管理员管理所有地点的用户变得极为繁琐。在这样的情况下&#xff0c;帮助台指派需要横跨不同的域以方便多域管理。尝试使用本机AD工具或PowerShell执行帮助台…

守护进程与TCP通讯

目录 一.守护进程 1.1进程组与会画 1.2守护进程 二.创建守护进程 setsid函数&#xff1a; 三. TCP通讯流程 3.1三次握手&#xff1a; 3.2 数据传输的过程 3.3四次挥手 一.守护进程 1.1进程组与会画 进程组&#xff1a;进程组由一个进程或者多个进程组成&#xff0c;每…

springcloud3 Nacos中namespace和group,dataId的联系

一 Namespance和group和dataId的联系 1.1 3者之间的联系 话不多说&#xff0c;上答案&#xff0c;如下图&#xff1a; namespance用于区分部署环境&#xff0c;group和dataId用于逻辑上区分两个目标对象。 二 案例&#xff1a;实现读取注册中心的不同环境下的配置文件 …

如何顺利渡过三月“大考”?ScanV为您献上“通关秘籍”

随着网络安全形势日益复杂、严峻&#xff0c;在重大安全保障事件期间&#xff0c;重要业务系统&#xff0c;尤其是党政机关、国企央企、能源、金融等重要的关基单位更应重视网站及业务系统安全。 临近三月重保季&#xff0c;知道创宇推出“御黑行动-典型案例篇”&#xff0c;以…

王道计算机网络课代表 - 考研计算机 第一章 计算机网络体系结构 究极精华总结笔记

本篇博客是考研期间学习王道课程 传送门 的笔记&#xff0c;以及一整年里对 计算机网络 知识点的理解的总结。希望对新一届的计算机考研人提供帮助&#xff01;&#xff01;&#xff01; 关于对 “计算机网络体系结构” 章节知识点总结的十分全面&#xff0c;涵括了《计算机网络…

【大话面试】- Redis 篇-第一篇

【大话面试】- Redis 篇-第一篇 认识 NoSQL SQL VS NoSQL 1️⃣ 结构化&#xff08;Structured&#xff09; SQL 的存储格式 NoSQL 从其存储的结构上来看&#xff0c;对于 SQL 数据库而言&#xff0c;我们可以给每一个表的属性添加不同的约束&#xff08;主键唯一&#xff…

分布式任务处理

分布式任务处理 1. 什么是分布式任务调度 视频上传成功需要对视频的格式进行处理&#xff0c;如何用Java程序对视频进行处理呢&#xff1f;这里有一个关键的需求就是当视频比较多的时候我们如何可以高效处理。 如何去高效处理一批任务呢&#xff1f; 1、多线程 多线程是充…

java易错题锦集系列五

接口中不能有构造方法&#xff0c;抽象类中可以有。抽象类中构造方法作用&#xff1a;初始化抽象类的成员&#xff1b;为继承它的子类使用 定义在同一个包&#xff08;package&#xff09;内的类是可以不经过import而直接相互使用 final修饰的方法可以被重载 但不能被重写 从…

线性插值基本原理推导

线性插值基本原理1. 为什么使用线性插值&#xff1f;2. 单线性插值2.1 单线性插值推导3.多线性插值3.1 多线性插值推导注意事项3.2 多线性插值推导3.3 插入坐标越远权重越大1. 为什么使用线性插值&#xff1f; 在深度学习对图片进行上采样和下采样的时候会应用到线性插值 对图…

TypeScript 使用 ES6 解构骚操作

TypeScript 使用 ES6 解构骚操作 文章目录TypeScript 使用 ES6 解构骚操作一、TypeScript 对象解构二、TypeScript 函数参数解构四、参考资料&#x1f498;五、推荐博文&#x1f357;一、TypeScript 对象解构 我们都知道 ES6 的数据解构功能很强大&#xff0c;一行命令就能够声…

TypeScript 常用知识

「 推荐一个学习 ts 基础的专栏&#xff0c;满满的干货&#xff1a;typeScript 」 1、为什么推荐使用 TypeScript 【】ts 是 js 的超集&#xff0c;包含 js 的所有元素 【】ts 通过对代码进行类型检查&#xff0c;可以帮助我们避免在编写 js 时经常遇到令人痛苦的错误 【】强…

云端IDE系列教程7:解决 WeTTY 在 Ubuntu 非 root 用户不能运行的问题

原文作者&#xff1a;行云创新技术总监 邓冰寒 概述 上一期在使用官方容器镜像快速成功地在 TitanIDE 运行起来了 WeTTY&#xff0c;但是不适合开发人员使用&#xff0c;而我自己编译构建出来的容器镜像无法直接运行指定的应用&#xff08;/bin/bash 或 /bin/zsh&#xff09;&…

GO中sync 包的 RWMutex 读写互斥锁

文章目录背景RWMutex 简介代码验证多个协程请求读锁 RLock() 和 RLock()读写交错 RLock() 和 Lock()写入的时候读取读取的时候写入请求多个写Lock() 和 Lock()背景 Mutex 互斥锁是严格锁定读和写&#xff0c;如果我们需要单独对读或者写添加锁需要使用 sync包的RWMutex 针对读…

PHP使用chilkat入门教程

前言&#xff1a; 我们需要先确认自己的版本&#xff0c;在PHP中&#xff0c;可以利用phpinfo()函数来查看php是ts版本还是nts版本&#xff0c;该方法可以展示出当前phpinfo信息&#xff0c;若“Thread Safety”项的信息是“enabled”&#xff0c;一般来说就表示ts版本&#xf…

备战英语6级——记录复习进度

开始记录—— 学习&#xff1a;如何记录笔记&#xff1f; 1&#xff1a;首先我认为&#xff1a;电脑打字比较适合我&#xff01; 2&#xff1a;先记笔记&#xff0c;再“填笔记”&#xff01; 记笔记就是一个框架&#xff0c;记录一个大概的东西。后面需要在笔记中&#xff0…