【一步一个脚印】Tomcat+MySQL为自己的APP打造服务器(2-1)Servlet的使用

最近工作上效率比较低,各种需求更改耗费了大量的时间成本(不吐槽,你懂的,已无力),高的身心俱疲。... ... 每次废话都比较多,我也是服了自己了,就当我是来凑字数的吧!不废话了,开始正题:

翻了一下上一篇文章,发现没有装开发环境,这里补上——在【一步一个脚印】Tomcat+MySQL为自己的APP打造服务器(1)服务器环境搭建中已经配好了JDK,这次直接找一个JavaEE版本的Eclipse解压到我们想安装的目录下即可,用过
Eclipse+ADT 开发 Android 的同学都知道 Eclipse 是免安装的,在 /eclipse 下直接打开 eclipse.exe 即可。

到此我们只是简单安装了一个服务器的运行环境,现在我们开始写自己的服务器程序。 不管你是学Java的,还是 Android 的,肯定都学过 Core-Java 课程,那么你肯定学过 Servlet ,或许你忘了,但这无所谓,我们重新开始。

一、Servlet简介

摘自书上的一小段解释——“Java Servlet 是运行在 Web 服务器或应用服务器上的程序,它是作为来自 Web 浏览器或其他 HTTP 客户端的请求和 HTTP 服务器上的数据库或应用程序之间的中间层。使用 Servlet,您可以收集来自网页表单的用户输入,呈现来自数据库或者其他源的记录,还可以动态创建网页”。Servlet 是 sun 公司提供的一门用于开发动态
web 资源的技术。其实,"Servlet"本来是指 Java语言实现的一个接口(狭义的Servlet),但更多的也更普遍的情况是:我们把任何实现了 Servlet 接口的类都叫作 "Servlet"。Servlet 的作用主要是对 Request 的请求数据进行解析、按照业务逻辑处理并将结果封装成 Response 返回我的理解就是“读-计算-写”,像数学计算器一样,输入操作数、操作符按"等于"就显示出结果;也像人的脑神经元一样“接受刺激-信号处理-作出响应”。为了便于理解,我们来慢慢拆解:

二、Servlet在服务器中的位置

在普通用户看来,我们平时使用互联网就像下图这样:

普通用户只关心自己作为一个客户端,是和一个叫服务器的东西在进行数据交互,具体服务器在哪里、做什么、怎么实现、数据库用哪种... ...这些都不重要。

而作为开发者的我们,用户不关心的问题我们却理当视如家珍(这是我们吃饭的家伙啊)——我们将服务器部分放大,从一个入门级的服务器开发者的角度来看看服务器的构造(这里仅以 Servlet 为例):

服务器接收来自不同用户的不同的请求(当然是以该服务器作为请求目标的那些请求),分析不同的请求,控制模块将各自的请求分送至对应的 Servlet (如登陆请求,则将登陆数据送至LoginServlet),然后 Servlet 根据请求内容处理业务逻辑(如登陆请求则解析用户名密码,并和数据库中保存的用户名密码进行对比,得出是否是合法用户的结论),完成响应数据的封装返回给控制模块,控制模块再将该响应返回给对应的请求用户,这样即完成一次网络交互。

三、从小白开始使用Servlet

下面,我们来一步一步开始使用 Servlet 创建一个应用服务器:

在 JavaEE 版的 Eclipse 中创建 Dynamic Web Project (我们这里以一个全新的 workspace 为例,为什么用一个新的workspace?后边会涉及到):

接下来的步骤都默认,Next 直到下图:

到此,工程创建成功,我们来简单了解一下目录结构:

这里需要说明一下:在创建工程时我们的 Dynamic web module version 选项默认选择的3.0,就会出现后面要勾选 Generate web.xml deployment descriptor 才能创建 web.xml 文件的情况,若是3.0之前的版本是没有这个勾选选项的,而web.xml文件是默认创建的。这是因为Servlet3.0
的新注解机制
的结果。

新建 Servlet 类:

   

不知道是什么就先Add一下,待会看看是什么。

URL mappings,我更改成 /Home/FirstServlet:

NEXT:

看一看都重写了哪些方法,最后 finish,我们第一个Servlet就创建好了。

打开刚创建的 FirstServlet.java 看看——Oh!Shit!你会惊讶的发现“祖国江山一片红”,各种类未定义、各种包找不见!不要惊讶,这就是刚开始我们以一个全新的 WorkSpace 为例的原因。

发现问题解决问题,我们是天不怕地不怕的程序猿

还记得我在创建 Servlet 时指定名字的下一个选项吗?就是这个:

,可以看到Servlet的父类是 java.servlet.http.HttpServlet,而在这里找不到,说明还缺东西,不是
.jar 就是环境。——这就是问题所在。

问题根源找到就容易解决了——还记得我们一开始创建 Dynamic Web Project 的时候并没有指定 Target runtime 吗?这就是指定运行时环境,就是我们比较外行的说法-环境问题。没关系,现在我们再来做这件事:

在 Project Explorer 空白区域 > 右键 > New > Other > 选择Server:

NEXT > 选择Tomcat Server(由于我的 Tomcat 装的是8.0.32,我在【一步一个脚印】Tomcat+MySQL为自己的APP打造服务器(1)服务器环境搭建中给的也是这个版本,所以这里选
v8.0,各位要根据自己的 Tomcat 选择相应的版本):

NEXT > 设置 Tomcat 安装路径(JRE可以workspace默认的JRE,也可以选择一个特定的JRE,如JRE1.7),之后 finish完成:

(也可以Next > 将之前创建的 工程Add到服务器中,再finish,这一步是可选的):

发现之前各种错误一片红还是没有解决?不要着急,再一步就搞定了——

刚刚创建的工程"右键" > properties > Targeted Runtimes,勾选刚创建好的Server,OK,看看工程,正常了吧?当然,这些创建或选择 Target Runtime 也可以在创建工程的时候就做,只是我这里单独拿出来走一遍而已,让我们都印象深刻一点。好了,这个问题解决了。继续回到我们的主线。

我们再来看之前留下的那个问题——Initialization parameters、URL mappings 是什么,字面意思就是初始化参数、URL 映射。结合上下文,我们是在创建 Servlet 的时候编辑的这些内容,所以初始化参数肯定是这个 Servlet 的参数,URL 映射也肯定是这个 Servlet 的路径映射。

为了比较,我们再创建一个 PreferenceServlet ,在创建过程中可以不填的选项都不填,对比一下代码,会发现不同的地只有有如下:

FirstServlet中有:

@WebServlet(description = "学习Servlet创建的", urlPatterns = { "/Home/FirstServlet" }, initParams = {
		@WebInitParam(name = "userName", value = "abc", description = "用户姓名") })

PreferenceServlet中为:

@WebServlet("/Home/PreferenceServlet")

可以发现,之前添加的这些选项都是以注解的方式出现的一些说明、初始化参数。为了理解这一点,我找出了Servlet3.0之前版本的 web.xml文件中对Servlet的配置文件内容进行说明:

	<servlet>
		<servlet-name>FirstServlet</servlet-name>
		<servlet-class>servlet.FirstServlet</servlet-class>
		<init-param>
			<param-name>userName</param-name>
			<param-value>abc</param-value>
		</init-param>
	</servlet>
	<servlet-mapping>
		<servlet-name>FirstServlet</servlet-name>
		<url-pattern>/Home/FirstServlet</url-pattern>
	</servlet-mapping>

这两种写法的功能是一样的,只是Servlet3.0之后支持注解的方式进行配置更方便、更高效而已。<servlet>标签和<servlet-mapping>标签相互对应,servlet-name
必须一致(可以有多个mapping对应一个Servlet,即多个地址对应一个目标),当一个请求到达后,服务器先在<servlet-mapping>中寻找匹配的地址,然后用对应的 servlet-name 在<servlet>标签中匹配该请求 Servlet 对应的Java类,然后将请求发送至该类;初始化参数可用 getInitParameter("parameterName") 来获取。

用事实说话,在上边我们创建的 FirstServlet中的 doget 方法中如下:

	protected void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		response.getWriter().append("\n初始化参数userName = " + getInitParameter("userName"));
	}

然后工程上右键>Run As:

Server选择之前创建的,Add该工程到服务器配置,finish。出现

即说明运行成功了!

在浏览器地址栏输入http://localhost:8080/ServletTest/Home/FirstServlet
回车,会看到:

好了,初步成功了。如果你是个新手,肯定还有很多地方不知道为什么,比如请求地址为什么这样写?Servlet 的响应怎么返回的?为什么显示的中文成了乱码?没关系,万事都不是一蹴而就的,我们就像标题一样,一步一个脚印,仔仔细细来。限于篇幅,本以为一篇就能说完,没想到还是留下了不少的内容,我们下篇继续。

由于本人水平有限,如有问题请不吝赐教。若对我的文章比较满意,请静待下一篇的到来,_程序猿大人_在此谢过。

时间: 2024-07-29 02:01:28

【一步一个脚印】Tomcat+MySQL为自己的APP打造服务器(2-1)Servlet的使用的相关文章

【一步一个脚印】Tomcat+MySQL为自己的APP打造服务器(3-1)Android 和 Service 的交互之GET方式

好久没更新了,罪过罪过.最对不起的人莫过于那些支持和等待在下拙文的诸位,在此道一声抱歉.管窥之见,侥幸博得各位认同,给了我莫大的鼓励. 话休絮烦,文接前章. 到[一步一个脚印]Tomcat+MySQL为自己的APP打造服务器(2-3)Servlet连接MySQL数据库为止,我们已经将服务端的部分走通了:通过 Servlet 连接 MySQL ,分析业务需求进行响应的增删改查操作返回对应的处理结果.(上一篇结尾是说接下来该说POST请求了,但是在准备这篇文章时发现POST再推后一篇,等我们把 An

【一步一个脚印】Tomcat+MySQL为自己的APP打造服务器(2-2)Servlet的使用

在上一篇 [一步一个脚印]Tomcat+MySQL为自己的APP打造服务器(2-1)Servlet 的使用 中我们只是简单的对 Servlet 要做的任务.在服务器中的地位有了一个大概的了解,完成了在一个全新的 WorkSpace 中创建第一个 Dynamic Web Project ,并创建第一个 Servlet ,解决期间可能遇到的常见问题,还留了不少的内容重要内容没有完成,今天我们来继续解决这几个问题: 一.怎么能访问到一个Servlet & URL中各部分的含义 我们来回顾上一篇篇末时在

web项目打包成exe在windows下一键安装 jdk+Tomcat+mysql

最近因为公司销售人员不懂软件,所以每次部署项目都需要技术人员到客户现场进行部署,很不方便.所以公司就让把我们的项目做成傻瓜式安装,这样就可以让销售人员去安装,也给技术省了很多事.我在网上找了很多教程但是有些地方还是不全,而且每个人写的也都不一样,所以在制作过程中遇到很多问题,经过几天研究终于实现了,现在就把我整理.研究的写下来,希望可以帮到更多人. 一:打包工具 在网上下载一个 Inno steup的制作exe文件工具 下面是我整理好的compile.iss文件(以下这个可以直接复制过去把要改的

Java ee struts2+tomcat+mysql编程 :1.开发环境配置

在Eclipse中配置Tomcat 首先新建Dynamic Web project 点击New Runtime... 选择apache tomcat v7.0,next 在Tomcat installation directory中选择tomcat的安装路径,finish,回到原来的向导,点击next 继续next,然后选中Generate web.xml deployment descriptor 然后finish,然后在eclipse界面下面选中server选项卡,点击给出的link 选择我

linux 下 jdk+tomcat+mysql 的 jsp 环境搭建

JDK 在 linux 下安装 1.          把安装文件放在 /opt 下,并执行 [[email protected] opt]# ./jdk-1_5_0_06-linux-i586.bin 并输入 yes 确认安装 2.         创建 /etc/profile.d/java.sh 编辑环境变量 export JAVA_HOME=/opt/jdk export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH export CLASSP

LInux环境下Eclipse + Tomcat + MySQL 配置J2EE开发环境的方法

上一篇博文里总结了面向对象三大特性在Java中的体现,现在谈一谈Java中的抽象类,接口,内部类等特性. 一. 抽象类 public abstract class Shape { public int shapeID = 0; public abstract double getArea(); } Java中允许类.接口或成员方法具有抽象属性,而不允许成员域或构造方法具有抽象属性. 类修饰词中含有abstract的类具有抽象属性,称为抽象类:接口总是具有抽象属性. 如果成员方法的修饰词中含有ab

如何玩转最新的项目的搭配springmvc+mybatis+Redis+Nginx+tomcat+mysql

上一次完成nginx+tomcat组合搭配,今天我们就说说,这几个软件在项目中充当的角色: 要想完成这几个软件的组合,我们必须知道和熟悉应用这个框架, 一: Nginx:在项目中大多数作为反向代理服务器.其目的处理http静态页面.和分发请求给tomcat.是目前处理大量请求的解决方案. tomcat:作为处理动态页面的服务器.由Ngxin 均衡分给的请求来处理. redis:在这个里redis 处理两个重要的功能:第一,nginx分发请求给tomcat.如何保持session的同步.就是利用r

Linux(ubuntu/centos) 部署Java项目 外加安装jdk+tomcat+Mysql

这是我第一次写博文,我希望我写的文本能够帮助到大家,这能让我感到很满足! 本次分享的文章 主要解决 Linux下(ubuntu+centos) 部署Java项目 当然也包括安装jdk+tomcat+mysql 准备环境: 系统环境:

Cent OS服务器配置(JDK+Tomcat+MySQL)

本文摘自:Cent OS服务器配置(JDK+Tomcat+MySQL) 学习tar解压 解压 tar 文件 tar -zxvf apache-tomcat-6.0.35.tar.gz tomcat   [mysql] 3 检查目前的数据库编码情况 show variables like "%char%";  4 将数据库的编码修改为utf8 mysql>set names utf8; 6 编辑MySQL的配置文件 vim /etc/my.cnf  加一句 default-char