• servlet开发-通过Tomcat部署一个简单的webapp


            首先我们得下载安装Tomcat,推荐看Tomcat(HTTP服务器)下载以及认识

    我们将通过打印一个hello word的方式来熟悉servlet开发,通过Tomcat部署一个webapp的流程

    servlet的含义

            Tomcat提供了一系列的api接口,这些api背后已经把一些基础工作都做好了(比如像处理HTTP协议这样的重复性工作)

            Java程序员,只需要调用已经提供好的api,通过少量的代码,就可以完成基本http服务器的核心功能,Tomcat给这组 api 起了个名字,就是 servlet 

    一.创建项目

            1.我们要在idea中创建一个JAVA项目

            要注意Build system要选择Maven


            Maven

            Maven是Java中一个常用的构建工具,一个程序在运行的过程中,往往需要涉及到一些第三方库的依赖,另外还需要针对这个写好的程序进行打包部署

            Maven存在的意义,就是为了更好的进行依赖管理和打包


            2.创建好项目以后我们将看到项目的目录位置

            

            main目录下要写的就是业务代码,resources文件夹放置的是一些依赖资源,test目录下放的是测试代码,pom.xml 这个文件是maven项目最主要的配置文件(maven主要用来管理依赖和打包)

            此时我们看到main目录下的java目录中,编译器以及给我们写好了一些代码,我们是不需要的,直接将 org.example 这个文件删除掉,删除以后就是这样

            3.删除好以后,我们在java目录下创建一个HelloWord类

    二.引入依赖

            当前的代码要使用 servlet 开发,而 servlet 并不是Java标准库自带的,就需要让 maven 把servlet 的依赖给获取到

            要使用 servlet 中的 api 就需要引入依赖,我们要到中心仓库https://mvnrepository.com/中找到 servlet 的依赖

            进入中心仓库后,搜索 servlet 找到 java servlet api

            选择3.1.0版本,servlet 的版本和 tomcat 的版本是有对应关系的,tomcat 的版本使用8,servlet 就是3.1,如果不匹配就可能会出现问题

            复制Maven处的代码

            此时就需要引入依赖

            在pom.xml 文件(maven中最主要的配置文件)中创建一个dependencies标签(注意dependencies标签要创建在project标签内部),将复制的代码粘贴到标签中

    三.创建目录

            创建目录的操作是固定的,不能有区别的,我们要按照 servlet 项目的要求,创建出一些特定的目录和文件

            要在main目录下创建一个webapp包,在其内部创建一个WEB-INF包,在其内部创建一个web.xml文件。

            web.xml 就是告诉 tomcat,我现在这个目录里的东西就是一个 webapp,就需要 tomcat 加载

             web.xml 里还需要填写一些内容,不能是空着的,这些内容是固定的内容,只需要粘贴即可

    1. "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
    2. "http://java.sun.com/dtd/web-app_2_3.dtd" >
    3. Archetype Created Web Application

            将上述的代码粘贴到 web.xml 中,不要修改任何格式哦,要不然就会出现问题

    四.编写代码

             此时我们终于可以编写代码了,要想打印一个 hello word 实际上要编写的代码没有多少,但有很多细节,当前提供纯代码以及带注释的代码

    纯代码

    1. @WebServlet("/hello")
    2. public class HelloServlet extends HttpServlet {
    3. @Override
    4. protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    5. System.out.println("hello word");
    6. resp.getWriter().write("hello word");
    7. }
    8. }

    带注释的代码

    1. //要在Servlet类上加这个注解
    2. //这个注解,就把当前这个Servlet类,和一个请求的路径关联起来了(配置路由)
    3. //Tomcat会在合适的时机,自动调用doGet
    4. //合适的时机:
    5. //1.HTTP请求的方法,是否是GET
    6. //2.请求的路径(url后面带有层次结构的路径)是否符合参数的要求
    7. //一个Servlet程序里,可能有多个Servlet类,这些Servlet类就需要在不同的情况下被执行到
    8. //我们所加注解中的参数是"/hello",表示当前请求的路径中带有“hello”的时候,我们这个HelloServlet类的代码才会被执行
    9. @WebServlet("/hello")
    10. //在利用Servlet开发时通常都需要继承HttpServlet
    11. //HttpServlet来源于导入到pom.xml中Servlet的依赖,依赖导入成功就能成功继承HttpServlet
    12. //继承HttpServlet不是目的,目的是为了重写这个父类中的方法
    13. public class HelloServlet extends HttpServlet {
    14. /**
    15. * HttpServletRequest类型的req代表这次请求的HTTP内容
    16. * HttpServletResponse类型的resp代表这次请求要返回的HTTP响应
    17. * */
    18. //doGet方法本质上是一个回调函数,不需要我们手动调用
    19. //我们将这个方法定义好以后,就会交给Tomcat
    20. //Tomcat在收到一个合适的Get请求以后就会自动调用doGet
    21. //调用doGet时,Tomcat就会自动解析这次的HTTP请求,生成一个空的HttpServletResponse对象resp(这个对象的属性都是和HTTP协议格式匹配的)
    22. //把空的对象(没有初始化)resp传给doGet
    23. //doGet要做的事情,就是根据传入的HTTP请求,计算出响应
    24. //doGet里的代码,就是根据req里不同参数的细节,生成一个具体的resp对象(往空对象中设置属性)
    25. //Tomcat就会根据resp响应对象,转换成符合HTTP协议的响应报文
    26. @Override
    27. protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    28. //这段代码是编译器自动添加的,一定要删除掉,要不然会出现问题
    29. //super.doGet(req, resp);
    30. //此时打印的 hello word 是打印到服务器日志中的
    31. System.out.println("hello word");
    32. //要想把 hello word 返回给客户端,还需要进一步使用下列代码
    33. //resp是未初始化过的空的响应对象,doGet的目的就是为了把这个对象给设置好
    34. //通过getWriter可以获得resp内置的输出流对象
    35. //使用write方法,就可以把一个字符串写到resp对象中(把数据写入到了HTTP响应的body中)
    36. //浏览器拿到HTTP响应后body的内容就可以显示到页面上了
    37. resp.getWriter().write("hello word");
    38. }
    39. }
    40. //此时代码就写完了,或许会有人疑惑,难道不需要有一个main方法吗?没有main方法程序怎么运行呢?
    41. //Servlet程序是不需要main方法的,因为我们写的代码并不是独立的程序,而是放到Tomcat上执行的
    42. //main方法其实是在tomcat里的,我们写的doGet等方法就是给tomcat调用的

    五.对程序进行打包

            在maven中,默认打包生成的是 .jar 包(常用的 Java 打包方式,jar里面就是一些 .class文件)但是 tomcat 需要的并不是 jar 包而是 war 包(本质上和 jar 包差不多,这里会包含一些前端代码,以及一些tomcat的配置)

            我们就需要在 maven 主要的配置文件 pom.xml 中添加一些标签,要添加的标签如下:

    1. war
    2. org.apache.maven.plugins
    3. maven-war-plugin
    4. 3.2.0
    5. false
    6. hello_servlet

    packaging 标签代表要打包的类型,是 war 包

    在build标签中的finalName标签代表打包好以后的 war 包的名称

            加好代码以后我们就找到 idea 右边的 maven 中的 package 选项,双击即可打包

            打包好以后,我们能看到目录中多出来了几个文件

    六.部署,把打好的war包放到tomcat的webapps目录中

            对目录中打包好的 war 包,我们右键 选择Open in ,点击Explorer,找到 war 包所在的文件夹

            

            将 war 包复制到 tomcat 的webapps 目录下,然后运行 tomcat 

    运行 tomcat 

            在 Windows 上直接在 tomcat 的 bin 目录中找到 startup.bat 文件,点击即可运行

            在 Linux 上要先将 tomcat 的 bin 目录中所有 .sh 后缀的文件加上可执行权限才行,命令为:

    chmod +x *.sh

            此时我们就在 tomcat 上部署好了一个 webapp

    七.验证

             通过浏览器去发送一个 http 请求给我们在 tomcat 上部署好了的 webapp,我们访问的 url 是127.0.0.1:8080/hello_servlet/hello url 的结构和我们编写代码时的命名是对应的

            127.0.0.1是回显IP,代表我们本机的IP地址

            8080是 tomcat 默认的端口号

            hello_servlet 是我们部署的 webapp 的名称,tomcat 上可能会部署多个 webapp 通过hello_servlet 这个路径可以准确找到我们要访问的 webapp

            /hello 和我们在代码中写的注解的参数相对应,因为一个 webapp 中可能会有多个 servlet 的类,通过注解中的参数,我们可以准确的找到我们要访问的 servlet 的类

            我们重写的是doGet 方法,这样要是HTTP请求是 Get 类型,就会调用 doGet 方法来处理HTTP请求

            输入 api 访问,我们就能得到如下的页面

            这就大功告成了!

  • 相关阅读:
    回调函数的简单使用0717
    Win10中的核心隔离和内存完整性是什么?
    OpenWrt如何公网ssh远程连接【内网穿透】
    如何用MATLAB对CSI数据进行预处理(卡尔曼滤波篇)
    Flutter 教程之使用 Flutter 构建 Chrome 扩展(教程含源码)
    计算机毕业设计Java银行招聘系统设计(系统+程序+mysql数据库+Lw文档)
    Go坑:time.After可能导致的内存泄露问题分析
    课程的概述
    【FreeSwitch开发实践】UniMRCP编译与安装
    44.(前端)修改菜单路由地址
  • 原文地址:https://blog.csdn.net/q322359/article/details/133077998