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"

今日总结

posted @ 2023-02-21 23:00  写的代码很烂  阅读(17)  评论(0编辑  收藏  举报