首页 > 其他分享 >Servlet一笔记

Servlet一笔记

时间:2023-02-21 23:12:38浏览次数:45  
标签:web Java Tomcat 笔记 访问 Servlet 客户端

Servlet一笔记

一、web相关概念

1. 软件架构

目标

  • 理解B/S 和 C/S的优缺点

讲解

C/S架构
  • C:Client,客户端;S:Server,服务器
  • 比如:QQ,微信,网游
  • 优点:
    • 显示效果好
    • 安全性高
    • 服务器压力小
  • 缺点:
    • 安装客户端软件
    • 更新维护不方便
    • 开发成本高
B/S架构
  • B:Broswer,浏览器;S:Server,服务器
  • 比如:网页版微信,12306,微博,京东,淘宝,网银,页游
  • 优点:
    • 不需要再额外安装软件
    • 更新维护方便
    • 开发成本低
  • 缺点:
    • 显示效果略差-HTML5和CSS3
    • 服务器压力大-集群
    • 安全性低-U盾、安全插件

小结

  • C/S架构:客户端/服务器架构
    • 好处:安全性高,显示效果好,服务器压力小
    • 缺点:需要安装软件,更新维护不方便
  • B/S架构:浏览器/服务器架构
    • 好处:不需要安装软件,更新维护方便
    • 缺点:安全性低,显示效果差,服务器压力大

2. web资源

目标

  • 理解web资源的概念
  • 能区分静态资源和动态资源

讲解

web资源
  • 通过web网络能够访问的资源,是web资源
web资源分类
  • 静态资源:资源/数据是不变的。比如:HTML、CSS、JS、图片、音频、视频等等
  • 动态资源:资源/数据是不同的。比如:Servlet、JSP、PHP、ASP

小结

  • 静态资源:不同人、不同时间、不同地方访问一个资源,效果是相同的
  • 动态资源:不同人、不同时间、不同地方访问同一资源,效果可能是不同的

3. 服务器软件

目标

  • 了解服务器软件的作用
  • 了解常见的服务器软件

讲解

服务器软件

把资源部署在服务器软件上,就可以让其它人通过网络访问到,从而成为web资源

常见的服务器软件
  • Tomcat:Apache提供的,免费开源的小型服务器软件。支持JSP和Servlet规范。
  • WebLogic:Oracle提供的,收费大型服务器软件。支持JavaEE所有规范。功能更强
  • WebSphere:IBM提供的,收费的大型服务器软件。支持JavaEE所有规范。功能强,稳定,贵 DB2

小结

  • 服务器软件:把资源部署到服务器软件里,这些资源就成为了web资源
  • 掌握一个:Tomcat

二、Tomcat

1. 下载与安装

目标

  • 下载Tomcat
  • 了解Tomcat的目录结构

讲解

1) 下载与安装
2) 目录结构
tomcat
	|- bin:可执行命令的文件夹。比如:启动和关闭
	|- conf:配置文件夹
	|	|- server.xml:是Tomcat本身的配置,比如端口号
	|	|- web.xml:主要是部署的web项目的默认配置
	|- lib:Tomcat的核心程序jar包
	|- logs:日志文件夹
	|- temp:临时文件夹
	|- webapps:用于部署web项目的文件夹
	|- work:工作目录,主要给JSP使用的

小结

  • 启动和关闭:找bin文件夹
  • 修改Tomcat配置:找conf文件夹
  • 要部署web应用:找webapps文件夹

2. 启动和关闭

目标

  • 能够启动和关闭Tomcat
  • 能够解决启动时常见的问题

讲解

1) 启动和关闭Tomcat
  • 启动:双击tomcat/bin/startup.bat
  • 关闭:
    • 双击tomcat/bin/shutdown.bat
    • 直接关闭Tomcat的黑窗口
2) 启动时常见的问题
1. Java环境变量没有正确配置,导致Tomcat无法启动
  • 现象:启动Tomcat时,黑窗口一闪而过
  • 验证:打开cmd,执行java的命令:
    • java命令,输出的有提示信息,说明是正确的
    • javac命令,输出的有提示信息,说明是正确的
  • 正确配置JDK环境变量
2. 端口冲突导致Tomcat无法启动
  • Tomcat默认要占用3个端口:8005(关闭命令使用的),8080(HTTP协议使用的),8009(AJP协议使用的)
  • 现象:通过查看日志,确定是否是端口冲突。日志文件:tomcat/logs/catalina*

    Caused by: java.net.BindException: Address already in use: bind
    
  • 解决方案:

    • 方案一:杀掉占用端口的进程,然后再启动Tomcat

      • 找到占用端口的进程:在cmd里执行命令netstat -ano | findstr ":8080",找最后一列值,是进程的pid

- 杀掉进程:在任务管理器里找到pid对应的进程,结束进程
  • 方案二:更改Tomcat配置文件,使用其它端口

    • 找到tomcat/conf/server.xml搜索port=,修改值
    • 把端口修改成其它值:建议是1024~65535之间,或者是:80

小结

  • 启动Tomcat:双击startup.bat
  • 关闭Tomcat:双击shutdown.bat或者直接关闭Tomcat的黑窗口
  • 启动时可能遇到的问题:
    • Java环境变量配置不正确:重新配置环境变量
    • 端口冲突问题:
      • 验证:看logs文件夹里catalina开头的文件,如果其中出现了Address already in use,是端口冲突
      • 解决方案一:杀掉占用端口的进程,再启动Tomcat
        • 查询占用端口的进程:netstat -ano | findstr ":端口号",最后一列的值就是进程的pid
        • 打开任务管理器,找到pid对应的进程,结束掉
        • 再启动Tomcat
      • 解决方案二:修改Tomcat的配置文件,使用其它端口启动
        • 打开conf\server.xml,修改其中port=的值
        • 端口的值:1024~65535,或者使用80

3. 部署web项目

目标

  • 能够使用Tomcat部署web项目
  • 能够使用浏览器访问部署好的web项目★

讲解

1) Tomcat部署项目
  • 方案一:把web项目文件夹直接放到tomcat\webapps

    • 注意:仅限于静态web项目(Static web),可以直接拷贝放到webapps文件夹里
    • 如果:是动态web项目,即项目里有页面、Java程序,不能直接拷贝放到webapps里。
      • 需要使用idea编译web项目,把编译好的结果,拷贝放到webapps里
  • 方案二:修改server.xml(不建议)

    • server.xmlHost标签中增加:
    <Context docBase="项目文件所在位置" path="项目访问路径"></Context>
    
    <Context docBase="E:\heima\travel" path="travel"></Context>
    
    • 访问时 http://ip:port/项目访问路径/资源路径
  • 方案三:虚拟路径方式(idea使用的,了解)

    • 在Tomcat的conf\Catalina\localhost中创建xml文件项目访问路径.xml(如果文件夹不存在,就创建)

    • 例如:travel.xml,内容如下

    <Context docBase="E:\heima\travel"></Context>
    
    • http://ip:port/xml文件名称/资源路径
2) 部署后,访问web项目:
  • 在浏览器里输入地址:http://ip:port/项目访问路径/资源路径
    • ip:tomcat所在的电脑的ip
    • port:Tomcat的http协议的端口。80是默认端口,如果地址里不写端口,默认就找80端口
    • 项目访问路径:默认是webspps里的文件夹名称(每个文件夹就是一个web项目)

小结

  • 把静态web项目部署到Tomcat里:

    • 把静态web项目文件夹,直接拷贝放到Tomcat的webapps
    • 启动Tomcat,浏览器就可以访问了
  • 浏览器访问web资源,地址:http://服务端的ip:服务器软件的端口/项目路径/资源路径

    http://192.168.20.73/docs/api/index.html

4. 集成到idea里-实操

目标

  • 把tomcat配置到idea里
  • 在idea里创建web项目
  • 在idea里把web项目部署到tomcat中,并启动访问

讲解

把tomcat配置到idea里
  1. File-->Settings-->打开设置窗口

  2. 在设置窗口里找到Application Servers

在idea里创建web项目(动态web项目)

idea里,创建的web项目的目录结构

  • 注意:
    • web项目里,只有src和web是有效目录。其它内容是无效的,idea会忽略
    • WEB-INF文件夹,是受保护的,浏览器访问不到。比如:下载的资源文件,可以放在WEB-INF里
在idea里把web项目部署到tomcat中,并启动访问
  1. 打开服务器配置窗口

  1. 部署web项目,并设置项目路径

  1. 启动Tomcat

  1. 使用浏览器访问:http://192.168.20.73/day08/index.html

小结

三、Servlet

1. Servlet简介

目标

  • 了解什么是Servlet
  • 理解Servlet的作用

讲解

1) 什么是Servlet
  • Servlet:Server Applet,是服务端运行Java程序。是Sun公司提供的一套规范(接口),可以让客户端以url的形式远程调用服务器的Servlet(Java程序)。
  • 如果一个Java程序,想让客户端通过网络访问到,Java程序必须满足以下两个条件:
    • Java程序必须实现Servlet接口
    • 必须把Servlet部署到Tomcat上才能运行
2) Servlet的作用

和客户端交互的:

  • 接收客户端提交的参数
  • 完成客户端要求的功能
  • 给客户端返回处理的结果

小结

  • Servlet:是Sun公司提供的一套规范(接口)。Java类实现这个接口,就可以让客户端通过url网址的形式,远程调用服务端的Java代码。
  • Servlet和普通Java程序的区别:
    • Servlet类,必须要实现Servlet接口
    • Servlet类,必须要部署到服务器软件(Tomcat)里,才可以让客户端访问到
  • Servlet的作用:和客户端交互的
    • 接收客户端提交的参数
    • 完成客户端要求的功能
    • 给客户端返回结果

2. Servlet快速入门

目标

  • 编写一个Servlet,部署到Tomcat中;使用浏览器访问Servlet

分析

实现的步骤:

  1. 创建一个Java类,实现javax.servlet.Servlet接口
  2. 重写接口里的方法(共有5个,了解3个,重点关注1个:service
  3. 使用@WebServlet注解配置Servlet类(配置Servlet的虚拟访问路径)

实现

@WebServlet(urlPatterns = "/demo01")
public class Demo01Servlet implements Servlet {

    @Override
    public void init(ServletConfig config) throws ServletException {
    }

    @Override
    public void service(ServletRequest request, ServletResponse response) throws ServletException, IOException {
        System.out.println("Demo01Servlet.service 运行了");
    }

    @Override
    public void destroy() {
    }

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

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

小结

  1. 创建Java类,实现Servlet接口

  2. 重写接口的方法(重点关注service方法)

  3. 使用@WebServlet配置虚拟访问路径。比如:@WebServlet("/demo01")

  4. 部署项目,启动/重启/重新部署Tomcat,之后使用浏览器访问

    http://192.168.20.73:80/day08/demo01

3. Servlet的生命周期和API

目标

  • 能说出Servlet的生命周期过程
  • 了解Servlet生命周期相关的API

讲解

1) 生命周期(面试题)
  • 何时创建:
    • 默认第一次访问时,Tomcat创建Servlet对象
    • 创建Servlet对象时,会执行init方法
    • init方法只执行一次,一个Servlet类只有一个对象
  • 何时销毁:
    • 当服务器关闭时,Servlet对象会被销毁
    • Servlet对象销毁时,会执行destroy方法
    • destroy方法只执行一次
  • 每次访问Servlet时,必定执行的方法:service方法
2) API介绍【了解】
方法 参数 说明
init(ServletConfig) Servlet配置信息对象 初始化方法
service(ServletRequest, ServletResponse) 请求对象,响应对象 业务方法
destroy() 销毁方法
  • ServletConfig:是Servlet的配置信息对象。作用是了解的:

    • config.getServletName(): 获取Servlet的名称
    • config.getInitParameter("参数名称"):获取初始化参数值
    • config.getServletContext():获取ServletContext对象
  • ServletRequest:用于接收客户端提交的数据

    • request.getParameter("表单项的name"):接收客户端提交的表单数据
  • ServletResponse:用于给客户端返回数据的

    • response.getWriter().print("会显示到浏览器页面上的内容")

小结

  • 生命周期【面试题】:
    • 何时创建:默认是第一次访问时,Tomcat创建的,会执行一次init方法
    • 何时销毁:服务器关闭时,Servlet对象会销毁,会执行一次destroy方法
    • 每次访问Servlet,必定会执行的方法是:service方法

4. 配置的了解

  • 在web3.0以前,用web.xml配置

  • 在web3.0以后,用注解配置 或者 用web.xml配置

  • 如果一个Servlet要想被客户端访问,就必须使用注解@WebServlet,提供一个虚拟访问路径

    @WebServlet(
    	urlPatterns/value=虚拟路径,
        name="Servlet名称",
        loadOnStartup=整数,表示Servlet创建的时机
    )
    
    • urlPatterns或者value:配置Servlet的虚拟访问路径,必须的。
      • 值:以/开头的路径,比如:/demo01, /login, /admin/manager
      • 注意:不同Servlet的虚拟访问路径不能相同
    • loadOnStartup:Servlet对象的创建时机
      • Servlet默认是第一次访问时创建的
      • 如果设置值为正整数,就表示服务器一启动,Tomcat就会创建Servlet对象
        • 数值越小,创建的越早
    • name:非必须

5. Servlet的简化开发方式

目标

  • 了解Servlet的多种开发方式
  • 掌握继承HttpServlet的开发方式

讲解

1) 创建Java类,实现Servlet接口
  • 多个Servlet中,有大量的冗余代码
  • 只用到Servlet的service方法,其它方法基本用不上,但是又必须写
2) 创建Java类,继承GenericServlet父类
  • GenericServlet实现Servlet接口,实现接口的方法
  • 我们再创建类,继承GenericServlet,重写业务方法service
@WebServlet(urlPatterns = "/demo02")
public class Demo02GenericServlet extends GenericServlet {
    @Override
    public void service(ServletRequest request, ServletResponse response) throws ServletException, IOException {
        System.out.println("Demo02GenericServlet.service 运行了");
    }
}
3) 创建Java类,继承HttpServlet父类
  • HttpServlet继承GenericServlet父类,重写service方法:
    • 如果是get方式的请求,就调用doGet
    • 如果是post方式的请求,就调用doPost
  • 我们再创建类,继承HttpServlet,重写doGetdoPost方法
@WebServlet(urlPatterns = "/demo03")
public class Demo03HttpServlet extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("get和post请求,共同的功能代码");
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        this.doGet(req, resp);
    }
}
配置servlet的模板

小结

四、练习:登录功能的简单实现

  • 登录功能的简单实现:

    • 页面有一个登录表单,表单里有用户名和密码、提交按钮
    • 如果登录成功:页面上要显示“login successed”
    • 如果登录失败:页面上要显示“login failed"
  • 需要做的事情:

    1. 创建一张用户表,表里有username和password。插入一条用户数据

    2. 编写页面,表单

    3. 编写Servlet代码,完成登录校验的功能

      • 如果登录成功:“login successed”
      • 如果登录失败:“login failed"

标签:web,Java,Tomcat,笔记,访问,Servlet,客户端
From: https://www.cnblogs.com/likeguang/p/17142866.html

相关文章

  • TypeScript学习笔记
    TypeScript是什么可以编译成JavaScript。添加了类型系统的JavaScript;「类型」是其最核心的特性JavaScript的灵活使得它的代码质量参差不齐,维护成本高,运行时错误多。T......
  • 韦东山2440-学习笔记-字符设备驱动
    1.button阻塞输入#include<linux/module.h>#include<linux/interrupt.h>#include<linux/device.h>#include<linux/cdev.h>#include<linux/kernel.h>#include......
  • 学习笔记283—CT、MRI、PET三种检查的临床比较
    CT(X线电子计算机断层扫描)主要是利用X线断层扫描,电光子探测器接收,并把信号转化为数字输入电子计算机,再由计算机转化为图像,是一种无痛苦、无损伤的辅助检查工具。 MR......
  • Django学习笔记记录(整理了B站武老师的讲课课件,供大家学习)
    day1、初识DjangoPython知识点:函数、面向对象。前端开发:HTML、CSS、JavaScript、jQuery、BootStrap。MySQL数据库。Python的Web框架:Flask,自身短小精悍+第三方组......
  • Johnson 全源最短路 学习笔记
    我居然不会这玩意,过来学一下。算法简介Johnson全源最短路用于求一个带负权的图的任意两点之间的最短路,时间复杂度为\(\Theta(nm\logm)\)。算法流程考虑到\(n\)次......
  • day11 事件相关笔记
    day11事件上事件的概述事件是指代一个东西的操作被另外一个东西监听以后的一个过程(事件),这个过程可以完成对应的操作(处理函数)事件监听器是一个标准的观察者模式(observer)......
  • 第十二天笔记 事件相关
    第十二天笔记 事件流的传播流程事件流的传播有三个阶段捕获阶段从最外层找到对应的事件执行的元素目标阶段找到这个元素执行对应的事件冒泡阶段逐层向上......
  • 【线性代数复习笔记】矩阵特征值,特征向量,相似对角化与实对称矩阵
    【线性代数复习笔记】矩阵特征值,特征向量,相似对角化与实对称矩阵线代好难-_-特征值与特征向量:1.求解特征值与特征向量:​ 先计算特征多项式f(ʎ)=|ʎI-A|,求出根,再根据......
  • 阿里云-云原生技术公开课的笔记之二 Job & CronJobs、DaemonSet
      第一个是restartPolicy,在Job里面我们可以设置Never、OnFailure、Always这三种重试策略。在希望Job需要重新运行的时候,我们可以用Never;希望在失败的时候再......
  • BaseServlet抽取以及UserServlet&页面路径改写
    BaseServlet抽取减少Servlet的数量,现在是一个功能一个Servlet,将其优化为一个模块一个Servlet,相当于在数据库中一张表对应一个Servlet,在Servlet中提供不同的方法来完成用户......