目录

servlet

1 关于后期的项目

2 servlet

1 概述

Servlet是SUN公司提供的一套规范,名称就叫Servlet规范,它也是JavaEE规范之一。我们可以像学习Java基础一样,通过API来学习Servlet。这里需要注意的是,在我们之前JDK的API中是没有Servlet规范的相关内容,需要使用JavaEE的API。目前在Oracle官网中的最新版本是JavaEE8,该网址中介绍了JavaEE8的一些新特性。当然,我们可以通过访问官方API,学习和查阅里面的内容。

打开官方API网址,在左上部分找到javax.servlet包,在左下部分找到Servlet,如下图显示:

翻译如下

通过阅读API,我们得到如下信息:

第一:Servlet是一个运行在web服务端的java小程序

第二:它可以用于接收和响应客户端的请求

第三:要想实现Servlet功能,可以实现Servlet接口,继承GenericServlet或者HttpServlet

第四:每次请求都会执行service方法

第五:Servlet还支持配置

2 servlet编写步骤,继承GenericServlet方式

1)编码步骤

第一步:前期准备-创建JavaWeb工程

第二步:编写一个普通类继承GenericServlet并重写service方法

第三步:在web.xml配置Servlet

md-end-block 复制代码
<span style="background-color:#f8f8f8"><span style="color:#333333"><span style="color:#770088">public</span> <span style="color:#770088">class</span> <span style="color:#0000ff">FirstServlet</span> <span style="color:#770088">extends</span> <span style="color:#000000">GenericServlet</span> {
    <span style="color:#555555">@Override</span>
    <span style="color:#770088">public</span> <span style="color:#008855">void</span> <span style="color:#000000">service</span>(<span style="color:#000000">ServletRequest</span> <span style="color:#000000">servletRequest</span>, <span style="color:#000000">ServletResponse</span> <span style="color:#000000">servletResponse</span>) <span style="color:#770088">throws</span> <span style="color:#000000">ServletException</span>, <span style="color:#000000">IOException</span> {
        <span style="color:#000000">System</span>.<span style="color:#000000">out</span>.<span style="color:#000000">println</span>(<span style="color:#aa1111">"servlet的方法执行了"</span>);
    }
}</span></span>
md-end-block 复制代码
<span style="background-color:#f8f8f8"><span style="color:#333333">   <span style="color:#117700"><</span><span style="color:#117700">servlet</span><span style="color:#117700">></span>
        <span style="color:#117700"><</span><span style="color:#117700">servlet-name</span><span style="color:#117700">></span>firstServlet<span style="color:#117700"></</span><span style="color:#117700">servlet-name</span><span style="color:#117700">></span>
        <span style="color:#117700"><</span><span style="color:#117700">servlet-class</span><span style="color:#117700">></span>cn.xinzhi.servlet.FirstServlet<span style="color:#117700"></</span><span style="color:#117700">servlet-class</span><span style="color:#117700">></span>
    <span style="color:#117700"></</span><span style="color:#117700">servlet</span><span style="color:#117700">></span>
​
    <span style="color:#117700"><</span><span style="color:#117700">servlet-mapping</span><span style="color:#117700">></span>
        <span style="color:#117700"><</span><span style="color:#117700">servlet-name</span><span style="color:#117700">></span>firstServlet<span style="color:#117700"></</span><span style="color:#117700">servlet-name</span><span style="color:#117700">></span>
        <span style="color:#117700"><</span><span style="color:#117700">url-pattern</span><span style="color:#117700">></span>/first<span style="color:#117700"></</span><span style="color:#117700">url-pattern</span><span style="color:#117700">></span>
    <span style="color:#117700"></</span><span style="color:#117700">servlet-mapping</span><span style="color:#117700">></span></span></span>

启动程序:访问 localhost:8080/虚拟路径/first,最终执行了UserServlet的service方法

3 Servlet执行过程分析

我们通过浏览器发送请求,请求首先到达Tomcat服务器,由服务器解析请求URL,然后在部署的应用列表中找到我们的应用。接下来,在我们的应用中找应用里的web.xml配置文件,在web.xml中找到FirstServlet的配置,找到后执行service方法,最后由FirstServlet响应客户浏览器。整个过程如下图所示:

一句话总结执行过程:

浏览器------>Tomcat服务器------>我们的应用------>应用中的web.xml------>FirstServlet------>响应浏览器

4 Servlet类视图

在Servlet的API介绍中,它提出了我们除了继承GenericServlet外还可以继承HttpServlet,通过查阅servlet的类视图,我们看到GenericServlet还有一个子类HttpServlet。同时,在service方法中还有参数ServletRequest和ServletResponse

5 Servlet的编写方式

第一种:实现Servlet接口,接口中的方法必须全部实现。 使用此种方式,表示接口中的所有方法在需求方面都有重写的必要。此种方式支持最大程度的自定义。

第二种:继承GenericServlet,service方法必须重写,其他方可根据需求,选择性重写。 使用此种方式,表示只在接收和响应客户端请求这方面有重写的需求,而其他方法可根据实际需求选择性重写,使我们的开发Servlet变得简单。但是,此种方式是和HTTP协议无关的。

第三种:继承HttpServlet,它是javax.servlet.http包下的一个抽象类,是GenericServlet的子类。**如果我们选择继承HttpServlet时,只需要重写doGet和doPost方法,不要覆盖service方法。**使用此种方式,表示我们的请求和响应需要和HTTP协议相关。也就是说,我们是通过HTTP协议来访问的。那么每次请求和响应都符合HTTP协议的规范。请求的方式就是HTTP协议所支持的方式(目前我们只知道GET和POST,而实际HTTP协议支持7种请求方式,GET POST PUT DELETE TRACE OPTIONS HEAD )。

6 HttpServlet的使用

第一步:在工程中创建一个Servlet继承HttpServlet

第二步: 配置web.xml文件

第三步: 访问localhost:8080/虚拟路径/second

解决办法:在servlet中添加doGet() 或者doPost()方法

7 servlet的方法和生命周期

  • 方法

  • 生命周期
md-end-block 复制代码
<span style="background-color:#f8f8f8"><span style="color:#333333"><strong><span style="color:#0000ff"># 被创建:执行init方法,只执行一次</span></strong>
    <span style="color:#aa5500">-- 在标签下配置</span>
    <span style="color:#aa5500">1. 第一次被访问时,创建</span>
        <span style="color:#aa5500"><load-on-startup>的值为负数,默认的是第一次访问的时候创建</span>
    <span style="color:#aa5500">2. 在服务器启动时,创建</span>
        <span style="color:#aa5500"><load-on-startup>的值为0或正整数,随着tomcat的启动创建</span>
<strong><span style="color:#0000ff"># 提供服务:执行service方法,执行多次</span></strong>
  
<strong><span style="color:#0000ff"># 被销毁:执行destroy方法,只执行一次</span></strong>
    <span style="color:#aa5500">-- Servlet被销毁时执行。服务器关闭时,Servlet被销毁</span>
    <span style="color:#aa5500">-- 只有服务器正常关闭时,才会执行destroy方法。</span>
    <span style="color:#aa5500">-- destroy方法在Servlet被销毁之前执行,一般用于释放资源</span>
<strong><span style="color:#0000ff"># 注意事项:</span></strong>
    <span style="color:#aa5500">Servlet的init方法,只执行一次,说明一个Servlet在内存中只存在一个对象,Servlet是单例的</span>
    <span style="color:#aa5500">多个用户同时访问时,可能存在线程安全问题。</span>
    <span style="color:#aa5500">解决:尽量不要在Servlet中定义成员变量。即使定义了成员变量,也不要对修改值</span></span></span>

8 分层开发

  • JSP Model1开发

  • JSP Model2

  • MVC设计模式

视图(View)- JSP、HTML等:负责与用户交互

控制器(Controller)- Servlet:负责流程控制

模型(Model)- JavaBean:负责业务逻辑处理、数据库访问

  • 分层开发

三层架构(3-tier architecture) 通常意义上的三层架构就是将整个业务应用划分为:界面层、业务逻辑层、数据访问层。区分层次的目的即为了"高内聚低耦合"的思想。在软件体系架构设计中,分层式结构是最常见,也是最重要的一种结构。微软推荐的分层式结构一般分为三层,从下至上分别为:数据访问层、业务逻辑层(又或称为领域层)、表示层。

分层开发优缺点

优点:

1、开发人员可以只关注整个结构中的其中某一层;

2、可以很容易的用新的实现来替换原有层次的实现;

3、可以降低层与层之间的依赖;

4、利于各层逻辑的复用。

缺点:

1、降低了系统的性能

2、增加了程序的复杂度

3、有时会导致级联的修改。

9 服务器向浏览器写数据的步骤

  1. 服务器获取字符/字节输出流

  2. 输出数据

md-end-block 复制代码
<span style="background-color:#f8f8f8"><span style="color:#333333">        <span style="color:#000000">response</span>.<span style="color:#000000">setContentType</span>(<span style="color:#aa1111">"text/html;charset=utf-8"</span>);
        <span style="color:#000000">request</span>.<span style="color:#000000">setCharacterEncoding</span>(<span style="color:#aa1111">"utf-8"</span>);
        <span style="color:#000000">PrintWriter</span> <span style="color:#000000">out</span> <span style="color:#981a1a">=</span> <span style="color:#000000">response</span>.<span style="color:#000000">getWriter</span>();
        <span style="color:#000000">out</span>.<span style="color:#000000">println</span>(<span style="color:#aa1111">"<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">"</span>);
        <span style="color:#000000">out</span>.<span style="color:#000000">println</span>(<span style="color:#aa1111">"<HTML>"</span>);
        <span style="color:#000000">out</span>.<span style="color:#000000">println</span>(<span style="color:#aa1111">"  <HEAD><TITLE>首页</TITLE>"</span>);
        <span style="color:#000000">out</span>.<span style="color:#000000">println</span>(<span style="color:#aa1111">"</HEAD>"</span>);
        <span style="color:#000000">out</span>.<span style="color:#000000">println</span>(<span style="color:#aa1111">"  <BODY>"</span>);
        <span style="color:#000000">out</span>.<span style="color:#000000">print</span>(<span style="color:#aa1111">"<p style='color: red'>"</span>);
        <span style="color:#000000">out</span>.<span style="color:#000000">print</span>(<span style="color:#aa1111">"这是个段落"</span>);
        <span style="color:#000000">out</span>.<span style="color:#000000">print</span>(<span style="color:#aa1111">"</p>"</span>);
        <span style="color:#000000">out</span>.<span style="color:#000000">println</span>(<span style="color:#aa1111">"  </BODY>"</span>);
        <span style="color:#000000">out</span>.<span style="color:#000000">println</span>(<span style="color:#aa1111">"</HTML>"</span>);
        <span style="color:#aa5500">// flush()表示强制将缓冲区中的数据发送出去,不必等到缓冲区满</span>
        <span style="color:#000000">out</span>.<span style="color:#000000">flush</span>();
        <span style="color:#000000">out</span>.<span style="color:#000000">close</span>();</span></span>

10 servlet改写jsp

  • 改写注册逻辑

  • 改写登录逻辑

  • 改写展示逻辑

本文是转载文章,点击查看原文
如有侵权,请联系 xyy@jishuzhan.net 删除
相关推荐
程序员老周66614 小时前
从MySQL快速上手大数据Hive
大数据·数据库·hive·hadoop·mysql·mapreduce·数据工程师
lqlj223317 小时前
Hadoop案例——流量统计
大数据·hadoop·分布式
IT成长日记18 小时前
【Hadoop入门】Hadoop生态之Hive简介
大数据·hive·hadoop
刘翔在线犯法19 小时前
Hadoop的序列化和反序列化
大数据·hadoop·分布式
麻芝汤圆19 小时前
利用Hadoop MapReduce实现流量统计分析
大数据·开发语言·hadoop·分布式·servlet·mapreduce
睎zyl1 天前
Hadoop的序列化
大数据·hadoop·分布式
IT成长日记1 天前
【Hadoop入门】Hadoop生态之ZooKeeper简介
大数据·hadoop·zookeeper
lqlj22331 天前
Hadoop序列化与反序列化
大数据·hadoop·分布式
lqlj22331 天前
Hadoop序列化与反序列化具体实践
大数据·hadoop·分布式
背着黄油面包的猫2 天前
搭建hadoop集群模式并运行
大数据·hadoop·分布式