✨哈喽,大家好,我是辰柒!✨
🛰️🛰️系列专栏:【JavaEE】
✈️✈️本篇内容:如何写出第一个servlet程序!
🚀🚀代码存放仓库github:JavaEE代码!
⛵⛵作者简介:一名双非本科大三在读的Java编程小白,道阻且长,星夜启程!
前面已经学习了如何创建一个maven项目,以及如何引入依赖;那么本篇博客就来介绍如何完成一个hello world的servlet的程序;这里需要七个步骤完成一个servlet程序!
目录
一、创建一个maven项目;
我们上篇博客已经创建了一个项目demo_maven,就使用这个项目来完成我们的hello world的编写;
二、引入依赖;
同样上篇博客也介绍了如何引入依赖;需要再代码中引入servlet api;这个api不是jdk内置的,而是第三方提供的(tomcat);借助maven即可引入;
maven中央仓库:下载地址!
1、打开后在搜索栏里面输入servlet;选择第一个;
2、点击进去之后,找到servlet 3.1.0版本;(注意这里的版本要匹配jdk8;tomcat8.5;servlet3.1)
3、复制这里的代码到idea;
4、配置在pom.xml中;
三、创建目录结构;
我们可以看到maven帮助我们创建了一些目录,但是远远不够,不足以支撑咱们写一个servlet项目;所以需要咱们手动创建一些目录和文件;
1、选中main右键创建一个目录,目录名叫做webapp;因为tomcat可以同时加载多个webapp,所以tomcat的目录是带s的,咱们写的就是一个webapp,就没有s;
2、右键webapp,新建一个目录叫做WEB-INF;
3、右键WEB-INF创建一个文件web.xml;
当然,这种命名的约定是人家规定的,也可以不这么写,但是需要改更多的配置文件,非常麻烦;
然后,我们可以给web.xml中写一点东西进去;这些常用的代码我们可以放在github上面,方便写代码的时候直接粘贴过来;博主的github在这里;需要自取哈;(可以点个star防止迷路!)
<!DOCTYPE web-app PUBLIC
"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd" >
<web-app>
<display-name>Archetype Created Web Application</display-name>
</web-app>
四、编写servlet代码;
1、首先在java这个目录下创建一个java类,HelloServlet;继承自HttpServlet;如果代码爆红,说明httpServlet没有被正确引入,只需要点击maven中的刷新即可!
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;
public class HelloServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
}
解析:HttpServletRequest req代表一个http请求,HttpServletResponse resp代表http响应;当前方法中并没有代码,这里的resp是一个空的响应对象,需要给这个方法中设置一些属性;doGet方法需要做的事情就是根据请求,计算响应;
注意:一个服务器的工作流程分为三个典型步骤:
1、接收请求并解析;
2、根据请求计算响应;
3、构造响应数据,并返回给客户端;
那么tomcat已经帮我们把1、3两步给完成好了,咱们程序员需要做的事情就是第二步;也就是doGet需要做的事情;
public class HelloServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
resp.getWriter().write("hello servlet"+System.currentTimeMillis());
}
}
解释:getWriter其实返回了一个Writer对象,此处的Writer对象不是往文件里面写;而是往http响应的body中写入数据;write()是真正用来干活的,写数据的方法;
还差一步:在整个类的上一行写入这行代码,作用就是把当前的这个 HelloServlet 这个类,和 HTTP 请求中 URL 里面路径带有 /hello 这样的请求,给关联起来;
@WebServlet("/hello")
因为tomcat可能会收到很多请求,这么多请求,咋们需要的是路径里带/hello的这种情况,才会让tomcat来调用HellloServlet 这个类;同时需要保证方法也是doGet方法;
五、打包;
刚才写的代码,我们发现是没有main方法的,那么就不能运行;如何运行?
需要把刚才的代码打包,部署到tomcat上,由tomcat来进行调用;
打包之前,需要一些准备工作;在pom.xml文件中配置以下代码;注意是和<dependencies>在同一级目录;war包算是给tomcat专门用的,这里不光包含一些.class文件,还可以包括一些配置文件,以及一些依赖的第三方jar包,html,css,js……;
<packaging>war</packaging>
<build>
<finalName>hello</finalName>
</build>
step1、点击idea右上角的maven,找到package双击;
step2、当控制台出现build success的时候,说明打包成功;
这里的目录栏会出现一个hello.war文件;
六、部署;
即把刚才的war包拷贝到tomcat的webapps目录下;
step1、找到当前项目的目录中的hello.war文件;
step2、复制该文件到tomcat的webapps目录下;
step3、启动tomcat;
找到bin目录下的startup.bat,双击;
七、验证程序;
在浏览器输入对应的地址;http://127.0.0.1:8080/hello/hello
这里的第一个hello叫做content path;第二个hello是servlet path;(注意和自己创建的目录一致)
运行结果;
二级路径和自己写的代码里的注解是相匹配的;
可以这样理解:一个 Tomcat 上可以同时部署多个网站;一个网站上又有多个页面;一个请求中的第一级路径,就告诉 Tomcat, 要访问的网站是哪个;第二级路径就告诉 Tomcat 要问的页面是这个网站中的哪个页面;
那么当前页面是通过Java代码生成的,和直接创建一个html文件;里面写个hello world有什么区别呢?
注意:前者的内容是可变的,根据用户不同的输入,可以得到不同的结果;后者页面的内容是固定的,是静态的,不变的;
上述七个步骤是针对一个新的项目来设计的;当当项目创建好了之后,后续只需要修改代码,前三个步骤就可以省略了;从4-7即可;重新部署的时候,不一定需要重启tomcat;
当看到tomcat中有这样的提示,表示已经重新部署了;
OK,有的小伙伴就会说每次都需要打包重新部署,感觉还是很麻烦,有没有什么自动打包部署的方法呢?
答案:还真有!我们可以通过一些第三方的工具来简化打包和部署这两步的操作;IDEA上有一个插件叫做smart tomcat就可以自动完成打包部署的操作;
下载步骤;
step1、打开idea,file->settings->plugin;在搜索栏搜索smart tomcat;
step2、第一次使用需要配置一下;首先点击右上角红色箭头指向的地方;
step3、点击+号,找到smart tomcat;name可以随便取;选择一下对应的版本、目录;注意这个content path路径要和URL的第一级路径保持一致;
step4、点击右上角的这个绿色的三角,便可自动的进行打包部署;
step5、点击三角箭头,打包部署;
!这怎么一堆红色的代码,报错了?并不是。这里的内容本身就是红色的,异常调用栈才是错误;
注意,打包部署的时候记得先把tomcat命令行给关了,然后再去点击绿色三角按钮,不然会占用端口号;导致错误;
OK,关于如何创建servlet程序以及如何使用smart tomcat插件相信大家已经很清楚了,我们下期来讲讲这里的一些报错信息,感谢您的三连支持!!!