当前位置: 首页 > news >正文

构建Servlet项目流程

第一步:创建maven项目

部分基础

依赖的模板基础部分如下

maven-archetype-quickstart: 这是最基本的Archetype,它创建一个包含简单Java类和单元测试的项目。

maven-archetype-webapp: 这个Archetype创建一个简单的Java web应用,包括一个servlet和一个JSP,以及相关的Web配置。

maven-archetype-j2ee-simple: 这个Archetype创建一个简单的J2EE应用,包含一个EJB模块和一个Web模块。

maven-archetype-simple: 这个Archetype创建一个非常简单的Maven项目,不包含任何特定的代码或者目录结构。

maven-archetype-mojo: 这个Archetype创建一个Maven插件项目。

spring-boot-archetype: 这是Spring Boot项目的官方Archetype,创建一个Spring Boot应用。

jersey-quickstart-webapp: 这是Jersey框架的官方Archetype,创建一个RESTful Web服务。

appengine-standard-archetype: 这是Google App Engine的官方Archetype,创建一个可以部署到Google App Engine的应用。

初始化构建完成

第二部:导入依赖

maven项目完成后就需要导入servletAPI的依赖包

在servletAPI的依赖包要与tomcat适配,下面是相关的匹配表

我用的Tomcat8.5 所以使用Servlet 3.1.0的开发包

(原来的位置)

<dependency><groupId>javax.servlet</groupId> <artifactId>servlet-api</artifactId> <version>3.1.0</version> 
</dependency>

新的位置

<!-- https://mvnrepository.com/artifact/jakarta.servlet/jakarta.servlet-api --> <dependency> <groupId>jakarta.servlet</groupId> <artifactId>jakarta.servlet-api</artifactId> <version>4.0.4</version> <scope>provided</scope>
</dependency>

第三步创建webapp目录

maven框架就这些东西,如果需要网页的话,还要添加web(选择了webapp的模板跳过第三步)

如果不想放在这个位置就自己添加

手动按照这个层次添加

完成之后将内容加入web.xml中(web.xml的作用我在另一篇博客中有讲解)

<!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>

配置完成,就可以开始编写代码了

第四步:编写代码

编写代码是在java中创建类实现的。

①各方面注意事项:

在网络程序中,就涉及到一对相当重要的概念

请求:request

响应:response

这些参数都是会自动将http请求解析成对象HttpServletRequest等对象(不是我们传递的 )

doGet(doPost)方法要做的工作,就是根据请求,计算生成响应。

②一个服务器的工作流程,可以分为三个典型的步骤:

(1)接收请求并解析

(2)根据请求计算响应

(3)构造响应数据,并返回给客户端

getWriter()方法获取一个可以写入数据的对象

write()方法则是使用这个对象来实际写入数据。

这里面,(1)(3)这两步,Tomcat已经帮我们做好了。因此我们只需要实现(2),也就是doGet要实现的内容。

代码如下

@WebServlet("/load")
public class TestServlet extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {/*** req的方法不只有这些。只要http协议的东西都可以获取包括(session)*/String host= req.getRemoteHost();System.out.println("请求的主机地址:"+host);String method = req.getMethod();System.out.println("客户端请求方式:"+method);/*** resp 的方法也有很多,主要是返回给前端的响应*/PrintWriter pw= resp.getWriter();pw.write("我是响应蛋");}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//一般doGet和doPost的处理的事务逻辑是差不多的,就可以这样写doGet(req, resp);}
}

接受到了。页面这是乱码了,乱码问题可以去我的另一篇文章

到这,项目就算是跑通了。可以正常开发了

打包

改成war包 ,clear原来的项目,重新打包package

把打包文件放在tomcat的webapp目录下

打包文件上传到tomcat,如果tomcat正在运行,他会自动生成一个如下蓝色字体的文件,可能也不会,就自己重启一下。

检验: 可以访问到 乱码问题,在另一篇文章中,集中解决

相关文章:

  • IDEA中.java .class .jar的含义与联系
  • iptables(二)
  • Vue.delete
  • 面向对象中的单例模式
  • 智能优化算法应用:基于蚁狮算法3D无线传感器网络(WSN)覆盖优化 - 附代码
  • 一文说清google最新大模型Gemini
  • 常见位运算的公式大全(建议收藏,以防走丢)
  • 人工智能技能要求
  • 基于Java个人作品管理系统
  • Plantuml之类图语法介绍(十六)
  • 低多边形游戏风格3D模型纹理贴图
  • 爱智EdgerOS之深入解析如何应用爱智的视频流模块完成拉流
  • tf.debugging 模块介绍
  • 网络规划的组成
  • scikit-learn实现线性回归
  • Android 架构优化~MVP 架构改造
  • ES6 学习笔记(一)let,const和解构赋值
  • ES学习笔记(12)--Symbol
  • express + mock 让前后台并行开发
  • IOS评论框不贴底(ios12新bug)
  • java第三方包学习之lombok
  • sessionStorage和localStorage
  • session共享问题解决方案
  • 使用Tinker来调试Laravel应用程序的数据以及使用Tinker一些总结
  • 我感觉这是史上最牛的防sql注入方法类
  • 系统认识JavaScript正则表达式
  • 一文看透浏览器架构
  • 正则表达式小结
  • gunicorn工作原理
  • 摩拜创始人胡玮炜也彻底离开了,共享单车行业还有未来吗? ...
  • ​如何使用ArcGIS Pro制作渐变河流效果
  • # include “ “ 和 # include < >两者的区别
  • (1/2) 为了理解 UWP 的启动流程,我从零开始创建了一个 UWP 程序
  • (Ruby)Ubuntu12.04安装Rails环境
  • (阿里云万网)-域名注册购买实名流程
  • (八)Docker网络跨主机通讯vxlan和vlan
  • (十一)图像的罗伯特梯度锐化
  • (推荐)叮当——中文语音对话机器人
  • (转)PlayerPrefs在Windows下存到哪里去了?
  • (转)利用ant在Mac 下自动化打包签名Android程序
  • .Net Core 中间件验签
  • .net core控制台应用程序初识
  • .Net调用Java编写的WebServices返回值为Null的解决方法(SoapUI工具测试有返回值)
  • .Net转前端开发-启航篇,如何定制博客园主题
  • // an array of int
  • @test注解_Spring 自定义注解你了解过吗?
  • @transactional 方法执行完再commit_当@Transactional遇到@CacheEvict,你的代码是不是有bug!...
  • [Bzoj4722]由乃(线段树好题)(倍增处理模数小快速幂)
  • [C#]C# OpenVINO部署yolov8图像分类模型
  • [C/C++] C/C++中数字与字符串之间的转换
  • [C++]拼图游戏
  • [CSS]浮动
  • [HNOI2008]水平可见直线
  • [LWC] Components Communication
  • [nlp] grad norm先降后升再降