Java Web编程 + Tomcat + Servlet - 超快速入门


前言

  了解B/S模式 能更好的理解Web应用程序流程。
  PC端💻 浏览器 ,移动端📱 平板 浏览更为合适~

🚲单机时代-桌面应用

  • ➧软件所有数据都保存在电脑本地硬盘中
  • 优点:易于使用,结构简单
  • 缺点:数据难以共享、安全性差、更新不及时
  • 例:office、idea开发工具、等等

🚗联机时代(Client - Server模式)

  • ➧客户端和服务器结构
  • 优点:数据方便共享,安全性高
  • 缺点:必须安装客户端,升级与维护不便
  • 例:聊天软件、LOL、等等

✈️互联网时代(Browser - Server模式)

  • ➧浏览器和服务器模式(web应用程序),对开发模式进行了标准化,基于HTML跨平台
  • 优点:开发简单,无需安装客户端,数据易于共享
  • 缺点:相较C/S模式,浏览器是否拉跨?
  • 例:使用CSND、7K7K、等等

第一部分:Web 与 Servlet基础


一、B/S 模式执行流程

例:

  1. 用户 在 浏览器输入 百度 的 网址
  2. 网址 被DNS服务解析成对应的IP地址
  3. 由浏览器 向IP地址发起一个HTTP的 数据包
  4. 服务器主机 里的 Web服务器程序 接收 浏览器发来的数据
  5. 服务器主机 里的 Web服务器程序 执行相关代码 生成HTML代码
  6. Web服务器程序 反回HTML代码
  7. 浏览器 解析 送回的数据 并显示 给用户

请求与响应:
 ◆从浏览器 发送 给服务器的 数据包 称为:请求(Request)
 ◆从服务器 返回 给浏览器的 结果称为:响应(Response)


二、认识工具

 1、Servlet 简介

   Servlet 是 J2EE- java 2企业版 里 其中的一个模块。
   Servlet 称为 小服务程序服务连接器 ,主要用于生成动态Web内容。
   Servlet是在服务器端运行 以 处理客户端请求而做出响应的程序。
   使用 Servlet 需用到 => Tomcat。

 2、Apache Tomact 简介

   一款免费开放源代码的 Web应用服务器程序。
   Tomcat 是运行 Servlet 的容器,是servlet运行时的载体。
浅析:Tomact 就是 上面B/S模式里的 Web服务器程序。
  在 Tomcat 里面由 Servlet 生成HTML 响应内容。


三、使用Tomcat 、Servlet

 1、安装运行Tomcat

①如何下载?
      Tomcat官网,下载并解压文件
在这里插入图片描述

目录内部结构:
在这里插入图片描述

②如何运行?
 ◆需要配置环境:配置好 适应的JDK
 ◆运行检查:1、打开bin目录下的 startup.bat 命令   2、浏览器输入本地ip地址+Tomcat端口号
 注:要微调Tomcat 可以在conf目录下server.xml配置文件中更改

 2、创建Java Web工程 并运行 Tomcat

  2.1 第一步 - 构建 Web工程

    ①创建 Maven 工程
    ②在main目录下创建 webapp目录 用于保存web应用 的 相关资源
    ③设置 webapp
      在模块中添加 Web模块
      设置Web模块 里的 web配置文件 把配置文件路径 定位 到创建的webapp目录
      设置 与 Web应用相关的资源 放在 路径为 webapp目录下
      设置最终运行的 Web应用目录 一般进入之后 直接点OK
    注:可以在webapp目录下创建html文件,等待后面的运行测试

  2.2 第二步 - 绑定Tomcat

    ①先配置好Tomcat 模板
      在这里插入图片描述

      在这里插入图片描述
      在这里插入图片描述
         此处留 / 比较好(默认忽略)
      应用程序上下文:为了区分在同一个Tomcat下,通过上下文 区分不同的工程 。
    ②再添加Tomcat
       ······
    ③检测Tomcat
      控制台 选中Tomcat Debug模式。浏览器:本地ip地址+/+上面所创建的THML文件

四、Servlet 嵌入Tomcat

 1、添加Severlet 的依赖

<dependencies>
	<dependency>
		<groupId>javax.servlet</groupId>
		<artifactId>javax.servlet-api</artifactId>
		<version>3.1.0</version>
	</dependency>
</dependencies>

 2、创建Servlet 类

    注:类名一般设置为 前半部分用意 | 后半部分Servlet结尾
    ◆ 一 、使该Servlet类 继承HttpServlet(该类来自上面的依赖里)
    ◆ 二 、重写父类HttpServlet里面的 方法
在这里插入图片描述
       第一个参数:浏览器发来的请求
       第二个参数:向浏览返回的响应
    ◆ 三 、配置web.xml , 绑定访问地址

  2.1 Servlet类 使用案例

    ①创建Servlet类、继承、并重写父类 方法

public class sampleServlet extends HttpServlet {
	@Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ... {
        String name = req.getParameter("name");	//请求对象.getParameter(); 获取(用户)指定的参数
        String html = "<h1 style='color:red'>hi," + name + "!</h1><hr/>";
        PrintWriter out = resp.getWriter();//响应对象.getWriter(); 获取返回的 响应流。  返回类型  PintWriter
        out.println(html); //PintWriter对象.println()  向客户端返回响应
    }
}

    注:Tomcat 是不知道 当前的Servlet类是否存在的。需要在 web.xml 文件中对 该Servlet类 配置

    ②在web.xml中 对上面 Servlet类 添加配置

<servlet>
<servlet-name>nn</servlet-name>//配置的 servlet类 的别名 或者是 小名
<servlet-class>...</servlet-class>//书写要配置的 Servlet类 的完整路径
</servlet>
上面的Servlet 要怎么对外暴露出来呢?需要下面的代码 就是Servlet映射
<servlet-mapping>
        <servlet-name>nn</servlet-name>//绑定哪个Servlet
        <url-pattern>/...</url-pattern> //绑定某个网址
</servlet-mapping>

    ③运行程序

    注:Tomcat 加载运行 下面的目录(测内容涉及java Web的标准结构)
在这里插入图片描述
    ④ 检测程序
      浏览器输入 本地ip:端口/上面设置的 绑定某个网址?name=a(设置上面name的值)

五、Java Web标准结构

在这里插入图片描述

组织结构描述
/java Web应用根目录
/index.html默认首页
/WEB-INFWEB应用的安全目录,用于存放配置文件 、编译后的字节码、以及底层的依赖
/WEB-INF/web.xmlweb.xml 是"部署描述符文件" ,是该Web 项目核心配置文件
/WEB-INF/classes存放编译后的classes文件
/WEB-INF/lib用于存放web应用依赖的jar文件
META -INF/MANIFEST.MF包含Web应用的版本信息 等

注: /WEB-INF、META -INF这是两个特殊的目录,其下面的文件或者其他资源是无法从外侧(客户端) 直接访问的。
  只有在根路径下或者自定义的子目录中的 文件或者其他资源 才可以被访问。

在这里插入图片描述

六、Servlet复习、细节专题

 1、Servlet开发步骤

     前提:是加入Severlet的 依赖
    ◆ 一 、创建Java类,继承HttpServlet  =>  也就是创建 Servlet类
    ◆ 二 、重写父类HttpServlet 里面的 servlet方法,处理请求、生成响应

       ①处理请求中的(用户)数居
         所有 与请求对应 的操作都可以用: 请求对象.什么什么方法(); 来进行操作
         其中 请求对象.getParameter(); 就是用于获取指定什么参数的
       ②通过响应返回结果
         响应对象.getWriter(); 获取返回的 字符输出流。 返回类型 PintWriter(字符输出流)
         Tomcat 向 浏览器 返回具体的 响应文本 => 字符输出流对象.println("组织好的HTML");

    ◆ 三 、配置web.xml , 为Servlet类 绑定访问地址

 2、请求参数的 发送 与 接收

    ◆ 一 、请求参数
     浏览器 通过请求 向Tomcat 提交的数据
     请求参数 => 通常指 用户输入的数据, 待Servlet进行处理

     格式固定: 参数名1 = 值1&参数名2 = 值2&参数名n=…

    ◆ 二 、Servlet接收 请求参数
       ①请求对象.getParameter(); -接收单个参数
       ②请求对象.getParameterValues(); -接收多个同名参数

    ◆ 二 、Get方式的请求 与 Post方式的请求
        Get方式:请求参数 附加在 访问地址 ?(分隔符)的后面 并显性向服务器发送
        Post方式:将数据存放在请求体中 并隐性向服务器发送
     注:作为请求参数,无论是Get方式还是Post方式 发送请求。发送的数据格式是完全相同的。
       当然,要使用 Post方式 需要在相关HTML文件中 设置method="post"模式。get是默认模式

        🔧 应用场景:Get => 传播性好。 例:百度搜索好的结果 发送给别人
               Post => 用于安全性较高的功能,或者服务器的“写”操作。例:用户登录、更新公司账目
    ◆ 三 、Servlet类 处理 Get方式的请求 或 Post方式的请求
       ① 所有请求 - 重写 service()方法

       如果Servlet 区分get方式的请求 或 post方式的请求 进行处理 则需要下面的一些方法:
       ②Get请求 - 重写 doGet()方法
       ③Post请求 - 重写 doPost()方法

 3、Servlet 生命周期

    ◆ 一 、装载 - web.xml
    ◆ 二 、创建 - 构造方法
        注:单例多线程
    ◆ 三 、初始化 - init()
        如果需要在 提供服务之前 初始化什么 可以重写此方法 在方法内构建代码
    ◆ 四 、提供服务 - 执行service()、doGet/Post()
    ◆ 五 、销毁 - destory()

 4、使用注解 配置Servlet

     Servlet 3.x 以后版本 引入了 注解 特性
     注解 简化了 Web应用程序的 配置 过程(😾经典白学)
     Servlet核心注解:@WebServlet("映射的地址")


第二部分:Servlet进阶


一、请求和响应的结构

URL:表示Web应用 对外暴露的 访问地址。是完整的访问路径,也就是完整的网站地址。=> 给最终用户使用
URI:表示Web应用资源访问路径。是给 应用程序 使用的。

请求:浏览器 发向 => 服务器 的数据包

 1、HTTP请求的结构

    ◆ 一 、请求行
       ① 请求方法
         通过Get方式的请求 或者 Post方式的请求 发送数据
       ② 请求URI
       ③ HTTP协议和版本
       在这里插入图片描述
    ◆ 二 、请求头
         发送请求过程中 附加的信息。也是通过键值对的形式来表达
       在这里插入图片描述
    ◆ 三 、请求体
         用于承载请求参数
       在这里插入图片描述

  1.1 请求头 使用案例

    例:PC浏览器端和手机端 访问同一页面 显示效果是不同的 => 利用了 请求头的判断
      判断请求头里的:User-Agent:…
    ① 请求对象.getHeader(); 用于获取指定请求头的数据,返回字符串

@WebServlet("/Test")
public class Test extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws...{
    	String oo = "";
        String o = 请求对象.getHeader();
         先字符串转换(例如大小写)、判断获取的字符串中的信息
         if(o.toLowerCase().indexOF("windows nt") != -1){
         	oo = "PC端";
         }else if(o.toLowerCase().indexOF("iphone") != -1){
			oo = "移动端";
		 }
		 响应对象.getWritrt().println(oo);
    }
}

    ② 响应出现 乱码问题
      响应 对外输出时,需指定字符集
      响应对象.setContenType(); 代表 内容类型 的意思

响应对象.setContenType("text/html;charset=utf-8");
响应对象.getWritrt().println(oo);

 2、ContentType 详讲

    ContentType 决定浏览器采用 何种方式 对 响应体 进行处理

ContentType类型描述
text/plain纯文本
text/htmlHTML文档
text/xmlXML文档
application/x-msdownload需要下载的资源
imag/jpeg图片资源
imag/gif图片资源

 3、HTTP响应的结构

    ◆ 一 、响应行
       ① HTTP协议版本
       ② 响应状态码

状态码错误描述例:
✅  200服务器处理成功✌️
❌  404无法找到资源URI输入错误、没有对应资源
❌  500内部服务器错误Tomcat内部执行产生的问题、出现了没有捕捉到的异常
❌  403服务器拒绝访问/
❌  400无效的请求/
❌  401未经过授权/
❌  503服务器超负载或停机维护,无法处理请求/

    ◆ 二 、响应头
         作为本次响应中 产生的 额外的信息 和请求头相似 都是些辅助性信息
       在这里插入图片描述
    ◆ 三 、响应体
         真正的数据部分,生成的THML片段 都是放在其中 持续发送给浏览器

 4、请求转发 与 响应重定向

    ◆ 一 、多个Servlet 之间跳转 两种方式
       ① 请求对象.getRequestDispatcher("要跳转的Servlet地址") - 请求转发
         getRequestDispatcher() 转发器
         forward(请求对象,响应对象) - 完成转发的动作
      ➡️   请求对象.getRequestDispatcher("要跳转的Servlet地址").forward(请求对象,响应对象) ;

       ② 响应对象.sendRedirect("要跳转的Servlet地址") - 响应重定向

    ◆ 二 、Servlet之间跳转 的 原理
       ①请求转发
         是服务器跳转,只会产生一次请求
          一个Tomcat里面 两个Servlet交互
         访问地址 不会 发生变化
          处理的方式也要保持相同
在这里插入图片描述
       ②响应重定向
         浏览器端跳转,会产生两次请求
          处理的方式也要保持相同
         访问地址 会 发生变化
         产生的新请求 默认 是 get请求方式
          处理的方式也要保持相同
在这里插入图片描述
    注:两者的应用场景不同。
      请求转发  例:两个业务关系紧密
      相应重定向  例:两个业务关系 不是很 紧密

    ◆ 三 、设置请求自定义属性
        请求 允许创建自定义属性。不适用 响应重定向。 因为产生新请求 就会失效
       设置请求属性:请求对象.setAttribute("String 属性名",Object 属性值)
       获取请求属性:Object a = 请求对象.getAAttribute("属性名")


二、Session 与 ServletContext

 1、Cookie

    Cookie 🍪:是 将程序中的 一些数据 保存在浏览器的 一些文本内容中
          有效期内 不会丢失数据 。伴随请求头发送给浏览器
          默认域名绑定,只有相对应的域名程序 才能读取数据

       样子 =>   在这里插入图片描述

    ◆ 一 、Cookie 的两种 时效性
       ①默认有效期
         与当前浏览器进程绑定

       ②设置有效期
          Cookie对象.setMaxAge(单位是秒);过期后才会失效

    ◆二 、Cookie 的 使用
        ①在Servlet类 中 创建 Cookie对象
         Cookie cookie = new Cookie("cookie的名字","cookie的值");
        ② 把 Cookie对象 放入 响应 中
         响应对象.addCookie(Cookie对象);

    ◆三 、Cookie 的 获取
        ① 请求对象.getCookies(); 用于获取请求头中的Cookie ,返回值是一个Cookie 数组

 2、Session - 用户会话

    用于保存 “浏览器窗口” 对应的数据。将用户的关键数据,存储在服务器的内存中,具有时效性(默认30min)。
    Tomcat 会为需要Session的 浏览器窗口 服务器的内存中(这里用的服务器是Tomcat) 开辟一条内存空间
    Session 通过 浏览器Cookie的Seesionld 值提取用户数据(Tomcat中的内存空间 对应窗口需要此项来确认)
    ◆ 一 、Session 常用方法
        ①请求对象.getSession() - 获取Session对象
         利用 Session对象 get|set|removeAttribute(“属性名”,“属性值”) - 获取|设置|删除Session属性
         setMaxlnactiveinterval() - 设置Session 超时 时间
    ◆二 、Session 的 使用
        ①HttpSession session = 请求对象.getSession()
    ◆三 、Session 的 原理
在这里插入图片描述
       浅析:可以完成跨请求的数据交换
         例:登入SCN 以后 站内无论点击哪个新的页面,网页上都会有已经登录的账号信息。

 3、ServletContext

    ServletContext(Servlet上下文对象),是web应用全局对象。只要服务器不管,都存在。
    一个Web应用 只会创建一个ServletContext对象
    例:网站底部 的 备案信息
    ◆ 用法
        ServletContext SC= 请求对象.ServletContext();
       利用 ServletContext对象 get|set|removeAttribute(“属性名”,“属性值”) - 获取|设置|删除Session属性

 4、作用域对象比较

        ①HttpServletRequest - 请求对象 | 请求进来 响应返回以后被销毁了
        ②HttpSession - 用户会话对象 | 通常与浏览器窗口绑定
        ③SrvletContext - Web 应用全局对象 | 只要Web应用程序(这里用的Tomcat)启动后 , ServletContext对象就存在


第三部分、Servlet 开发 - 常见问题

 1、Web应用中文乱码

        产生原因:数据的 发送方 与接收方 对数据使用了不同的字符集解析
        解决办法:保证浏览器与服务器 使用 统一的编码 例如:UTF-8
      注:doGet请求   Tomcat 8 以后默认 用 UTF-8 。8之前的版本需要在Servlrt.xml配置文件中 设置。
        doPost请求   手动配置:请求对象.setCharacterEncoding("UTF-8")
        关于 响应 之前写过了。 响应对象.setContenType("text/类型;charset=utf-8");

 2、web.xml常用配置

    ◆ 一 、设置Web应用的 默认首页
        ①在直接存储Web应用资源的根目录下 创建 相应资源
        ②配置web.xml 文件

	默认首页名称
<welcom-file>资源名.后缀</welcom-file>
可以加载多个、 按顺序判断的
<welcom-file>资源名2.后缀2</welcom-file>

    ◆ 二 、Servlet 通配符映射和初始化参数
       常见URL
        ◆ http://www.CSND.com/md?cid=888
        ◆ http://www.CSND.com/nav/789
        ◆ http://www.CSND.com/789.nav
       解决 动态URI 绑定的情况 例:

<servlet>
<servlet-name>nn</servlet-name>
<servlet-class>...</servlet-class>
</servlet>
常用方式
<servlet-mapping>
        <servlet-name>nn</servlet-name>
        <url-pattern>/nn/*</url-pattern> * 就是不限长度 不限内容
</servlet-mapping>
//另一种:
<servlet-mapping>
        <servlet-name>nn</servlet-name>
        <url-pattern>*.nn</url-pattern> * 就是不限长度 不限内容
</servlet-mapping>
//还有另一种:
<servlet-mapping>
        <servlet-name>nn</servlet-name>
        只有一个斜杠。    对所有请求进行映射,Spring MVC 框架中会使用到这个
        <url-pattern>/</url-pattern> 
</servlet-mapping>

    ◆ 三 、Web应用程序的 启动时处理
       也就是启动时加载Servlet,常用于系统的预处理。用到Servlet生命周期中的init()方法
        ◆ web.xml中 使用 < load-on-startup > 标签设置好后,启动会自行加载
        ◆ < load-on-startup >0~9999< /load-on-startup > 数字越小执行优先级越高
    ◆ 四 、对出现404、500等状态码 -设置默认页面

错误页
<errot-page>
<error-code>错误状态码(例:404)</error-code>
<location>书写准备好发生404错误的页面 的 路径</location>
</errot-page>

 3、Java Web应用 - 打包发布

       java Web应用采用war包进行发布
       利用Maven实现war包导出
    ◆ 包的导出顺序:
       1、找到pom.xml 文件 添加 < packaging >war< packaging > 如果不使用 Meven 导出的是jar包
       2、使用Meven 命令 打包 会输出到 => target 目录下
         注:可以在pom.xml 文件中 相关依赖可以去重 < scope >依赖组件的作用范围 < /scope >
          最终产出物的名字更改 用标签:< build >< finalName >更改的名字< /finalName >< /build >

依赖组件的作用范围说明
compile默认值,依赖组件作用于所有阶段
provided依赖组件仅作用在编译与测试阶段
runtime依赖组件仅作用在测试与运行阶段
test依赖组件仅作用在测试阶段
system本地jar文件仅作用在编译与测试阶段

    ◆ 导出的项目 如何运行?:
       1、找到Tomcat下的 webapp目录 然后放入 打包好的 项目工程
       2、找到Tomcat的启动命令,启动Tomcat 。放入的项目工程会自动生效
        注:启动后 在webapp目录下会自动解压缩 项目工程 会产生一个项目工程的目录 该目录名就是 应用上下文❗️
         因为开发中取消了 应用上下文 所以项目正常运行会出错

       3、取消应用上下文
         找到conf目录下的server.xml配置文件 。打开找到最下方的 host 标签
        在里面添加 < Context docBase=“该目录名” path=“/” > 标签


总结

  由于篇幅有些长。一些按部就班的环境搭建细节并 没 配有图片,只是罗列出来了抽象的大概步骤,详情站内应有相关教程。侧重点在于Tomcat、Servlet、以及Web 应用程序的开发流程。陆陆续续写了四天,初衷是自我学习和站内的朋友学习交流。码字不易🐌,如果对您有所帮助不妨点个赞赞吧💖💖💖~

       我爱你 ~  遇见你的那天,下了一场代码雨。放佛要把整个夏天的暴雨都下完。从此以后,和你在一起的每一天就都是晴天了。☀️☀️☀️


                     🙏愿: 宇宙的尽头没有 应用程序服务器。

  • 3
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值