前言:

有段时间没更新博客了,这段时间因为要准备考试,考完试后又忙了一阵别的事,一直没能静下心来写博客。大学考试真是越来越恶心了,各种心酸,那酸爽,够味。不过还好,马上就要大三了,听大三学长学姐说大三好多都是考查课,考试的科目少了,心中还是挺期待的,给学弟学妹们祈福吧,要好好学习,大学不再是之前的大学了,大学的考试也不再是之前的考试了。大一欠下的知识终究是要还的,所以奉劝学弟学妹们别想着欠债了,把大学该学的尽力学好,为自己负责。

之前在公司做项目接触的太多太杂了,等做完项目后发现有个弊端,好多知识只能说出个大概,不像之前写博客研究某一个知识点能知其然并知其所以然,比如说Servlet,虽说之前大概学过,用的时候也会用,但是让我给别人讲,还达不到精简的境界,今天翻了翻之前写过的笔记,好像理解比以前深了一层,作此篇,分享给大家。

如何理解Servlet?

学前提要:

我在这主要强调理解学习Servlet的思维,要是想细品Servlet,请看之前写过的博客《Java匹马行天下之JavaWeb核心技术——Servlet》https://www.cnblogs.com/zyx110/p/10771172.html,更多精彩邀您观看。学过Servlet的都知道,Servlet3.0之前的版本要使用Servlet,需要在web.xml中进行配置,在web.xml中配置Servlet时可以配置一些初始化参数,在servlet中可以通过ServletConfig接口提供的方法来获取这些参数。这种方法我在之前的博客中写的很详细,就不多说,我主要说在Servlet3.0及3.0之后的版本,该版本新增了若干注解,用于简化Servlet、Filter(过滤器)和监听器(Listener)的声明,这使得web.xml部署描述文件不再是必选的了。

要理解Servlet首先要知道Servlet是JavaWeb的三大组件之一(Servlet、Filter、Listener),还要知道ServletContext是JavaWeb四大域对象之一(PageContext、ServletContext、ServletRequest、HttpSession)。(在这提一下,具体的看前面链接中的博客或者百度)

初步了解:

我们之前学的JavaSE中的一些基础知识只是在控制台输出,现在学习Servlet后不仅能在控制台上输出,还能跟浏览器进行交互,例如客户端发出登录请求,或者发出注册请求都由Servlet来完成处理,在Servlet中通常需要接收请求数据、处理请求、完成响应。

好,知道Servlet是用来干什么的,接下来再说Servlet是如何实现的。

具体实现:

在《Java匹马行天下之JavaWeb核心技术——Servlet》 “https://www.cnblogs.com/zyx110/p/10771172.html”中有写到Servlet有三种实现方式,在这我只演示实现Http协议的Servlet,别的实现方式自己看上面的博客,里面也很全面。

我用的工具是IDEA,下载和安装见《IDEA永久使用https://www.cnblogs.com/zyx110/p/10801680.html,新建的是Maven项目,对maven不熟的朋友可以先看《我们一起走进Maven——知己知彼https://www.cnblogs.com/zyx110/p/10619148.html,需要在你的电脑上安装并配置Maven环境,具体安装配置过程见《Maven的安装与配置》https://www.cnblogs.com/zyx110/p/10801666.html,完成以上这些,我们开始Servlet学习之旅。

新建Maven项目

如何新建一个Maven项目见《IDEA为新手专业打造https://www.cnblogs.com/zyx110/p/10802098.html

实现Servlet

创建一个Servlet类

继承HttpServlet实现Servlet

为什么会出现报红?

没有导入Servlet模块,相当于Myeclipse里的jar包。

导入Servlet模块

如何在maven项目中导入Servlet模块?

先从Maven存储库(https://mvnrepository.com/)中搜索需要导入的模块,现在我们需要导入Servlet模块,操作过程如下图所示:

这时重点来了,如果是用Servlet3.0之前的版本,需要在web.xml中配置响应的参数

现在我用的是Servlet3.0之后的版本,只需加一个@WebServlet(“/login”)的注解,通过解析注解实现Servlet,可以不用在web.xml中配置了。

package servlet;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException; @WebServlet("/login")
public class ServletDemo extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doPost(req, resp);
} @Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("Hello Servlet!!!");
}
}

  

设置Tomcat

Tomcat配置成功,代码如下:

package servlet;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException; @WebServlet("/login")
public class ServletDemo extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doPost(req, resp);
} @Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("Hello Servlet!!!");//向控制台输出
//设置编码
req.setCharacterEncoding("utf-8");
resp.setCharacterEncoding("utf-8");
//设置服务器响应的格式
resp.setContentType("text/html"); //从浏览器接收参数
String name = req.getParameter("name");
//在控制台输出从浏览器接收的参数
System.out.println(name);
//向浏览器页面输出
resp.getWriter().println("<font color='red'>我要通过Servlet在浏览器页面输出</font>"); }
}

  

运行项目

整个完整的Servlet模块完成,Servlet的接收请求和完成响应都有展示,对于初学者,能看到这些效果我想或许能有些许兴奋吧。。。。。。至少小有收获了,恭喜你入门。

Servlet理解的要点

入门后要继续深究,我在这引一下Servlet中需要学习的要点,具体学习看文章开头分享的博客,里面很详细。

  • ServletContext域对象
  • Servlet生命周期
  • 请求和响应机制
  • JSP

此篇名为站在巨人的肩膀上看Servlet,实际上是让初学者在宏观的思维先了解Servlet,然后进行系统的学习,我觉得这样比直接看Servlet官方语言知识点好理解。Servlet学习还是很重要的,毕竟它是前后端沟通的桥梁,我只是在学习的时候感觉顿悟了一点,要是分享的过程中有不对的地方,还望大家海涵并指正,谢谢!

*****************************************************************************************************

我的博客园地址:https://www.cnblogs.com/zyx110/

本文已独家授权给脚本之家(jb51net)公众号独家发布

站在巨人的肩膀上看Servlet——原来如此(更适合初学者认识Servlet)的更多相关文章

  1. react-native之站在巨人的肩膀上

    react-native之站在巨人的肩膀上 前方高能,大量图片,不过你一定会很爽.如果爽到了,请告诉我

  2. 站在巨人的肩膀上,C++开源库大全

    程序员要站在巨人的肩膀上,C++拥有丰富的开源库,这里包括:标准库.Web应用框架.人工智能.数据库.图片处理.机器学习.日志.代码分析等. 标准库 C++ Standard Library:是一系列 ...

  3. 站在巨人的肩膀上才能看得更加远[Amo]

    本来只是路过,写详细一点. 我看楼主浮躁得不得了.现在什么都不要做了,先去看几遍<不要做浮躁的嵌入式工程师>这篇文章,想清楚了,再动手吧. 我做了个实例,不用ST的库来点LED,解答你的问 ...

  4. java的设计模式的一些链接,站在巨人的肩膀上,才能看的更远。(均来源与网上的各个大牛的博客中)

    创建型抽象工厂模式 http://www.cnblogs.com/java-my-life/archive/2012/03/28/2418836.html工厂方法 http://www.cnblogs ...

  5. 站在巨人的肩膀上学习Android开发

    我们知道,一開始最好的学习方法是模仿,尤其是模仿巨人. 那说到Android开发的模仿自然就是分析并研究主流程序的布局.实现方法.进而提升自己的技术. 第一招----逆向project 要分析&quo ...

  6. 站在巨人的肩膀上---重新自定义 android- ExpandableListView 收缩类,实现列表的可收缩扩展

    距离上次更新博客,时隔略长,诸事繁琐,赶在去广州答辩之前,分享下安卓 android 中的一个 列表收缩 类---ExpandableListView 先上效果图: 如果想直接看实现此页面的代码请下滑 ...

  7. pdf.js的使用(1) 站在巨人的肩膀上纯干货分享,没有华丽的词藻

    以下是我在实际项目开发中的过程分享   前端是:vue+jsp 1.首先下载pdf.js(怎么下可以去百度),实在不会就私我,我发给你 1.1展示一哈我下载下来的pdf.js的目录结构 1.2接下来可 ...

  8. 对EasyDarwin开源项目后续发展的思考:站在巨人的肩膀上再跳上另一个更高的肩膀

    2017 EasyDarwin现状 自从2012年EasyDarwin项目创立开始,经过了快5年了,时光飞逝,如今EasyDarwin已经发展成为了不仅仅是一个单纯的开源流媒体服务器项目了,已经是各种 ...

  9. 对EasyDarwin开源项目2018的思考与2019发展的规划:继续站在巨人的肩膀引入更多巨人

    EasyDarwin@2018思考 从2012年开始接触Darwin Streaming Server,到2018年从底层开始完全重新架构.研发.完成,EasyDarwin这个项目已经发展了6年了,时 ...

随机推荐

  1. WPF查找父元素子元素

    原文:WPF查找父元素子元素 /// <summary>        /// WPF中查找元素的父元素        /// </summary>        /// &l ...

  2. 读BeautifulSoup官方文档之html树的搜索(2)

    除了find()和find_all(), 这里还提供了许多类似的方法我就细讲了, 参数和用法都差不多, 最后四个是next, previous是以.next/previous_element()来说的 ...

  3. TestDisk 数据恢复 重建分区表恢复文件-恢复diskpart clean

    source:http://www.cgsecurity.org/wiki/TestDisk_CN TestDisk 是一款开源软件,受GNU General Public License (GPL ...

  4. ELINK编程器典型场景之多APP文件下载

    有些应用场合中,单MCU内会采用BootLoader+APP1+APP2的加载模式,程序启动时先进入BootLoader程序,依据设定条件跳转至APPx应用运行:为满足此类需求,设计多达5个程序文件( ...

  5. 不能继承于QObject的类就一定不能使用信号槽?(用一个代理类进行发射就行了)

    首先不能继承QObject的情况在开发中遇到得并不多,笔者在一年多的Qt项目开发中只遇到两三次.而且都是因为引进了第三方库导致编译过程中报错. 要想解决这个问题其实不难,因为笔者遇到的问题都是想定义一 ...

  6. 给Delphi程序添加版本信息(EXE和Dll)

    我们在用Delphi编译完程序,准备发布产品时,总希望随产品发布个性信息以标示产品的来源以及开发者等信息,就像windows的程序一样,使我们一看属性就知道他是微软的产品,这些在Delphi中是如何实 ...

  7. WCF nginx反向代理遇到的问题

    正常配置了nginx反向代理,其他java站点什么的都正常,就wcf总是失败.始终会跑如下异常: 由于 AddressFilter 在 EndpointDispatcher 不匹配,To 为“http ...

  8. Twitter的分布式自增ID算法snowflake(雪花算法) - C#版

    概述 分布式系统中,有一些需要使用全局唯一ID的场景,这种时候为了防止ID冲突可以使用36位的UUID,但是UUID有一些缺点,首先他相对比较长,另外UUID一般是无序的.有些时候我们希望能使用一种简 ...

  9. python中的基本数据类型之 int bool str

    一.基本数据类型 1. int  ==>  整数.主要用来进行数学运算. 2.str  ==>  字符串.可以保存少量的数据,并进行相应的操作. 3.bool  =>  布尔值.判断 ...

  10. SYN5605型 多通道时间间隔测量仪

      SYN5605型 多通道时间间隔测量仪 时间间隔测量设备多通道时间间隔测量32路时间间隔测量仪使用说明视频链接; http://www.syn029.com/h-pd-80-0_310_6_-1. ...