【JavaWeb】Servlet基础

news2024/11/24 14:25:14

文章目录

  • 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获取value
        String 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/jakartaee
                      https://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{

    @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 {
        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();
                }
            }
        }
    }

    @Override
    public String getServletInfo() {
        return null;
    }

    @Override
    public 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.coloradmin.cn/o/377972.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

JAVA开发(java类加载过程)

1、java语言的平台无关性。 因为java语言可以跑在java虚拟机上&#xff0c;所以只要能装java虚拟机的地方就能跑java程序。java语言以后缀名 .java为文件扩展名。通过java编译器javac编译成字节码文件.class 。java字节码文件通过java虚拟机解析运行。所以java语言可以说是编译…

解决windows安装wxPython安装失败、速度过慢及PyCharm上wx包爆红问题

网上关于wxPython安装失败&#xff0c;安装速度过慢&#xff0c;以及安装成功后PyCharm中import wx仍然爆红的文章有很多&#xff0c;也特别杂&#xff0c;解决起来特别困难&#xff0c;今天在这里对问题的处理进行一个整合&#xff0c;希望能帮助到大家。 安装wxPython这里运用…

模拟微信聊天-课后程序(JAVA基础案例教程-黑马程序员编著-第八章-课后作业)

【案例9-1】 模拟微信聊天 【案例介绍】 1.案例描述 在如今&#xff0c;微信聊天已经人们生活中必不可少的重要组成部分&#xff0c;人们的交流很多都是通过微信来进行的。本案例要求&#xff1a;将多线程与UDP通信相关知识结合&#xff0c;模拟实现微信聊天小程序。通过监…

华为OD机试题【翻转单词顺序】用 C++ 进行编码 (2023.Q1)

最近更新的博客 华为od 2023 | 什么是华为od,od 薪资待遇,od机试题清单) 文章目录 最近更新的博客使用说明翻转单词顺序题目输入输出示例一输入输出示例二输入输出说明示例三输入输出说明示例四

解决跑pytorch代码报错AttributeError: module ‘distutils‘ has no attribute ‘version‘

跑pytorch代码报错AttributeError: module ‘distutils’ has no attribute ‘version’ Traceback (most recent call last): File “D:/pycharm_envir/gaozhiyuan/Segmentation/pytorch_segmentation/deeplabv3-plus-pytorch-main/train.py”, line 16, in from utils.callb…

【C++修炼之路】22.哈希

每一个不曾起舞的日子都是对生命的辜负 哈希一.哈希概念及性质1.1 哈希概念1.2 哈希冲突1.3 哈希函数二.哈希冲突解决2.1 闭散列/开放定址法2.2 开散列/哈希桶三.开放定址法代码3.1 插入Insert3.2 查找Find3.3 删除Erase3.4 映射的改良&完整代码四.开散列代码4.1 插入Inser…

Linux之init.d、rc.d文件夹说明

备注&#xff1a;Ubuntu没有rc.d文件夹&#xff0c;原因看问题四 Linux的几个重要文件 rc.d&#xff0c;init.d文件夹的说明 今天在研究mysql的安装的时候&#xff0c;最后一步要创建一个软连接&#xff0c;使得mysql服务可以自启动&#xff0c;代码如下&#xff1a; ln -s…

扒系统CR8记录

目录 终极改造目标 过程记录 参考 为了将一套在线安装的系统&#xff0c;在不了解其架构、各模块细节的基础上&#xff0c;进行扒弄清楚&#xff0c;作以下记录。 终极改造目标 最终的目标&#xff0c;就是只通过CreMedia8_20230207.tar.gz解压 install 就把业务包安装了&…

CorelDRAW2023新功能有哪些?最新版cdr下载安装教程

使用 CorelDRAW2023&#xff0c;随时随都能进行设计创作。在 Windows或Mac上使用专为此平台设计的直观界面&#xff0c;以自己的风格尽情自由创作。同全球数百万信赖CorelDRAW Graphics Suite 的艺术家、设计者及小型企业主一样&#xff0c;大胆展现真我&#xff0c;创作出众的…

IAP初探

IAP(In-Application Programming)在应用编程&#xff0c;浅显易懂&#xff0c;按照字面意思即是在程序不关闭情况下&#xff0c;对应用进行再次写入程序&#xff0c;对程序的写入需要传输数据&#xff0c;而传输数据的前提是通信&#xff0c; IAP对代码进行更新可以简要分为以…

【ElasticSearch系列-01】初识以及安装elasticSearch

elasticSearch入门和安装一&#xff0c;elasticSearch入门1&#xff0c;什么是elasticSearch2&#xff0c;elasticSearch的底层优点2.1&#xff0c;全文检索2.2&#xff0c;倒排索引2.2.1&#xff0c;正排索引2.2.2&#xff0c;倒排索引2.2.3&#xff0c;倒排索引解决的问题2.2…

Linux | 2. 用户管理

如有错误&#xff0c;恳请指出。 1. 设置文件权限 权限设置如下&#xff1a; root表示文件所有者&#xff0c;stud1表示文件所属组。其他用户无法访问。更改指令是chown。 更改目录文件所属组&#xff1a;chown .lab lossfound/更改目录文件所有者&#xff1a;chown lab loss…

mac安装 Termius

1.下载安装包 链接: https://pan.baidu.com/s/1f5xmvYnVehCkMUD291SbsA?pwdy43k 提取码: y43k 2.打开系统偏好设置 -> 安全性与隐私 -> 通用&#xff0c;勾选“任何来源” 显示文件损坏的情况下执行下面操作 3.打开terminal终端 3.1 输入&#xff1a;sudo spctl --m…

windows10使用wsl2安装docker

配环境很麻烦&#xff0c;想利用docker的镜像环境跑一下代码整个安装过程的原理是&#xff1a;windows使用docker&#xff0c;必须先安装一个linux虚拟机&#xff0c;才可运行docker&#xff0c;而采用wsl2安装虚拟机是目前最好的方法第一步 windows安装wsl2控制面板->程序-…

数据结构-考研难点代码突破(C++实现树型查找 - B树插入与遍历,B+树基本概念)

数据结构&#xff08;C&#xff09;[B树&#xff08;B-树&#xff09;插入与中序遍历&#xff0c;效率分析]、B树、B*树、B树系列应用 文章目录1. B树B树的插入与删除流程2. B树&#xff08;MySQL&#xff09;3. B树与B树对比4. C实现B树插入&#xff0c;中序遍历1. B树 B树类…

面试题(基础篇)

1、你是怎样理解OOP面向对象的面向对象是利于语言对现实事物进行抽象。面向对象具有以下特征&#xff1a;&#xff08;1&#xff09;继承&#xff1a;继承是从已有类得到继承信息创建新类的过程&#xff08;2&#xff09;封装&#xff1a;通常认为封装是把数据和操作数据的方法…

vue中的$forceUpdate()、$set()

$forceUpdate() 迫使vue实例重新&#xff08;rander&#xff09;渲染虚拟dom&#xff0c;注意并不是重新加载组件。 结合vue的生命周期&#xff0c;调用 $forceupdate 后只会触发beforeupdate和updated这两个钩子函数&#xff0c;不会触发其他的钩子函数。它仅仅影响实例本身和…

作为一名Android车载工程师,需要具备哪些能力?

安卓开发在近几年的就业环境大家肯定都听说过&#xff0c;许多Android开发程序员都找不到自己满意的工作&#xff0c;于是纷纷另谋出路… 如今&#xff0c;随着Android汽车开发的兴起&#xff0c;很多Android开发者想转行做Android车载开发。然而&#xff0c;Android车载开发不…

深入理解border以及应用

深入border属性以及应用&#x1f44f;&#x1f44f; border这个属性在开发过程中很常用&#xff0c;常常用它来作为边界的。但是大家真的了解border吗&#xff1f;以及它的形状是什么样子的。 我们先来看这样一段代码&#xff1a;&#x1f44f; <!--* Author: syk 185901…

如何为三星active2手表安装自己DIY的表盘

一、步骤介绍 Step 1. 下载Galaxy watch studio&#xff1b; Step 2. 按照up主“隔壁张师傅2022”的文章进行安装。 二、安装流程简单说明&#xff1a; ① 电脑端官网下载并安装Galaxy Watch Designer或者Galaxy Watch Studio程序。 ② 关闭手表蓝牙连接&#xff0c;并打开调…