为了账号安全,请及时绑定邮箱和手机立即绑定

毛哥的快乐生活 十九章 那就搞一个servlet

标签:
职场生活

接上文,分析的都透透的了,毛哥开干。本章代码:Github

在eclipse中配置Tomcat

首先web项目是需要部署到服务器上运行的,eclipse只是开发环境,而不是运行环境,Java Web项目最常用的当然是之前提到过的Tomcat啦。下面就把Tomcat配置到eclipse中,这样eclipse就知道把开发的代码交给谁来测试及运行了。

依次点击Window-Preferences-Server-Runtime Environments,在窗口右侧点击Add。
图片描述
在打开的界面中选择Apache Tomcat v8.5,注意此处选择其他版本也行,毛哥电脑上就找到了一个8.5。
图片描述
然后选择Tomcat8.5文件夹路径就OK了:
图片描述

添加类库

Servlet所属的类库并不是JDK自带的类库,而是服务器带的类库,所以此处还得手工添加下,没事,这个习惯就好了。就像汽车下雪天要安装防滑链而越野轮胎最好耐磨一样,Java程序在不同的时候也得安装各种配件啊,JDK只是最基本的配置。

OK,右击项目-Build Path-Configure Build Path,如下面几张图新增Server Runtime(服务器运行时,也就是服务器带的类库)。

图片描述
图片描述
图片描述

继承HttpServlet

此时我们就可以开始通过继承HttpServlet,来让我们的HelloServelt类具备响应Http请求并回应的能力,将代码修改为:

package com.maoge.firstwebproject;
import javax.servlet.http.HttpServlet;
public class HelloServlet extends HttpServlet{
}

此处毛哥就得好好研究下每句代码的含义了。

  1. package com.maoge.firstwebproject; 表示HelloServlet这个类属于com.maoge.firstwebproject这个包。
  2. import javax.servlet.http.HttpServlet;表示当前的代码需要使用HttpServlet这个类,但是HttpServlet这个类可能有重名,比如张三、李四、公司A、公司B都可以定义这个一个名为HttpServlet的类,此处精准指定就是包javax.servlet.http下面的这个HttpServelt类。
  3. public class HelloServlet定义了一个类,名字叫做HelloServlet,然后是public公开的,至于公开是干嘛的,不是很清楚,根据毛哥之前的经验,应该是表示这个类比较容易被调用。
  4. extends HttpServlet,HelloServlet类继承了HttpServlet类,所以就具备了HttpServlet类的能力。就好比鱼继承鱼类的天赋能游泳、人继承了人类的天赋能说话一样,HttpServlet类的天赋就是接受浏览器Http请求并给出回应。

点亮响应请求的技能

继承了HttpServlet类之后,就可以重写其doGet方法,doGet方法就是用来处理浏览器http请求的。如下,我们再次修改HttpServlet类。

public class HelloServlet extends HttpServlet{
	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
	
	}
}

当然啦,以当时毛哥的水平,这几句代码是真心看不懂啊,只是从网上抄过来的,而且知道这玩意能响应浏览器请求。稍微的能看懂的就是有个HttpServletRequest req, HttpServletResponse resp,一个Request表示请求,一个Response表示响应。百度一番发现,req变量里保存着浏览器请求的信息,而resp变量可以用来向浏览器输出返回信息。

输出一段经典的话

毛哥最喜欢的一段话:未来的你,一定会感谢现在,拼命努力的自己。哎呀,毛哥想到这句话,突然有点想哭,谁的人生能是容易的呢。优秀的人只不过把别人休息娱乐的时间哪来努力而已。

好了,再次修改代码如下:

public class HelloServlet extends HttpServlet{
	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		PrintWriter out = resp.getWriter();//从响应对象里面获取一个PrintWriter,有点像打字机
	    out.println("<div>未来的你,一定会感谢现在,拼命努力的自己</div>");//每次打字,实际上就是将内容输出给浏览器
	}
}

OK ,这个还比较好理解了,就像System.out.println是输出到屏幕,HttpServletResponse的PrintWriter的println是输出给浏览器差不多道理,封装好了直接用就行。

让子弹飞

子弹要飞得用枪发射啊,动态网站要运行得用服务器启动啊,之前已经在eclipse里配置了Tomcat了,此处直接用就行。

右击项目-Run As-Run on server,如下图,因为已经配好了Tomat 8.5,直接点Finish就行了。
图片描述

考验英语水平的时候到了

此处要声明一点,虽然英语水平实际上制约不了真正想学编程的人的心,因为实际上就那些常见的单词。但是懂英语毫无疑问会有利于学习,更加毫无疑问的是:毛哥,英语还不错,再次强调,通过英语四级,嗯,没毛病。

启动Tomcat之后,发现两个现象,现象1如下图,在Console控制台显示Server startup in 290ms,说明服务器已经在290毫秒启动了,成功了一半啊。
图片描述

现象2如下图,访问一个网站:http://localhost:8080/FistWebProject/,结果报了Not Found错误。
图片描述

Not Found啥意思,找不到啊。localhost表示本机,没毛病,服务器就是在本机。

8080是Tomcat默认端口号,也没毛病。

FistWebProject,哎呀First拼错了,不过也没毛病,就是本项目啊。为啥访问不到。

百思不得其解,最后折腾了半天,才搞明白。不用问,肯定又是一番折腾查资料去了。

配置访问路径

就像一个网站一般不止一个静态的html网页,一个动态网站也往往不止有一个Servlet用来生成动态网页,比如有负责生成购物车页面的Servlet,有负责生成登录页面的Servlet。每个Servlet请求地址也得不通,才能区分开。

所以得给Servlet配置一个访问路径,很简单如下再改代码。此时/HelloServlet就是HelloServlet的访问路径。

@WebServlet("/HelloServlet ")
public class HelloServlet extends HttpServlet{
	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		PrintWriter out = resp.getWriter();//从响应对象里面获取一个PrintWriter,有点像打字机
	    out.println("<div>未来的你,一定会感谢现在,拼命努力的自己</div>");//每次打字,实际上就是将内容输出给浏览器
	}
}

此时再次请求http://localhost:8080/FistWebProject/HelloServlet还是不行,原来得重启下服务器。

大功告成

重启服务器,右击下图Tomcat,选择Restart即可。
图片描述

然后再次请求发现输出这个:
图片描述

凭借多年经验,毛哥敏锐的直觉告诉自己,很可能是中文乱码。

于是把代码又改为:

out.println("<div>In the futurem, you will thank youself for the fighting today</div>");//英语不错

再次重启服务器运行:
图片描述

哇塞,厉害炸了。毛哥还不放心,用浏览器又试了下。这下妥妥的可以睡觉了。

图片描述

点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
软件工程师
手记
粉丝
1.5万
获赞与收藏
1523

关注作者,订阅最新文章

阅读免费教程

  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消