Maven创建一个Servlet项目(五)

古语有云: 万恶淫为首,百善孝为先。 我们后辈当自勉。

上一章简单介绍了Maven的生命周期和依赖传递(四),如果没有看过,请观看上一章

一. Maven 两个项目的引用依赖

先来稍微用实例讲解一下,两个Maven jar类型的项目是如何进行依赖的, 感受一下,Maven的强大之处。

项目B 依赖于项目A 的某些类。

一.一 创建 项目A

(只是简单创建,不会创建的可以看第二章内容)

打开 eclipse, 文件—>新建—>其他–>找到Maven—>选择 Maven-Project

在这里插入图片描述

有图片

有图片

pom.xml 下的信息为:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.yjl</groupId>
  <artifactId>MavenA</artifactId>
  <version>0.0.1-SNAPSHOT</version>
</project>

在 MavenA 项目下,在 src/main/java 创建一个类 Hello, 里面返回一下老蝴蝶的名字。

package com.yjl;
/**
 * @author 岳泽霖
 */
public class Hello {
	
	public String getName(){
		return "岳泽霖,花名 两个蝴蝶飞";
	}
}

一.二 创建项目B

与上面是同样的操作步骤。
在这里插入图片描述

在 src/main/java 中创建一个 MyHello 类。

package com.yjl;
/**

@author 岳泽霖
*/

public class MyHello {
	
	public static void main(String []args){
		Hello hello=new Hello();
		System.out.println(hello.getName());
	}
}

会报 Hello 类没有找到的错误。

要想 MyHello 类可以调用 项目A里面的 Hello 类, 按照以前的做法,是将 项目A导出成 一个jar包,放置在 B 下面,添加到路径下,这样B 就可以引用了。 这一点也是与 Maven 一样的,但Maven 并不需要这么处理。

直接点击 MavenB 里面的 pom.xml ,选择第二个 Dependencies 选项卡,点击添加 依赖,搜索 MavenA, 发现可以搜索到,直接添加 Maven A依赖

有图片

就可以发现 在 pom.xml 中添加了依赖

 <dependencies>
  	<dependency>
  		<groupId>com.yjl</groupId>
  		<artifactId>MavenA</artifactId>
  		<version>0.0.1-SNAPSHOT</version>
  	</dependency>
  </dependencies>

与创建 MavenA时的 pom.xml 里面的内容是一致的。

不需要 再将 MavenA 打包后放置在 MavenB里面。

一.三 更新项目,解决出错的常用方法

发现,这个时候,虽然添加了依赖,但还是显示报错。
在这里插入图片描述
不应该啊,已经添加 Hello.java 的依赖了啊 。 切记,一定要记住 Maven 工程中这种情况, 要更新一下 Maven项目。

选中项目B, 右键选中Maven, 选中 Update Project, 选中 MavenB, 进行确定即可。

有图片

有图片。

这样,就发现项目A 已经导入进来了。

运行 MyHello.java , 以Application 的方式运行即可。控制台打印输出。

有图片。

一.四 直接修改项目,直接更新Jar 包。

上面的,普通的项目也可以做到了,没有什么骄傲的啊。 如果这个时候再修改 项目A 里面的内容,即 项目A的 Hello.java 里面的getName() 方法, 项目B要引用该怎么办呢? 先将修改好的项目A重新导出 Jar包,然后再放置到 MavenB 里面,重新运行B.

而 Maven 完全不需要这样。

如果你修改 Hello.java 中getName() 的方法返回值,如:

public String getName(){
		return "岳泽霖,原名岳建立";
	}

这个时候,不需要任何操作,只需要直接去项目B 下运行 MyHello.java 即可,控制台会自动打印新的输出语句。

有图片。

为什么可以直接运行呢,这就是 jar版本中 SNAPSHOT 快照的作用了。 关于快照的作用,可以看老蝴蝶第三章写的内容。

这只是Maven 强大的作用之一而已,而且是小小的之一。

Maven 的Jar项目,没有什么好讲的,主要的还是Web 项目。

二. Maven 创建一个简单 WEB 项目 如Servlet项目

二.一 创建一个war 类型的项目

打开eclipse, 文件–>新建—>其他–>Maven 选择 Maven Project,跳过原型,进入到下一步:

有图片

注意,这个时候 packaging 选择的是 war 类型。

二.二 添加web.xml 文件

新创建好 ServletMaven 的 Web 项目之后,发现项目 pom.xml 文件报错了。

有图片

显示错误文字是: web.xml is missing and <failOnMissingWebXml> is set to true

我们就需要添加一个 web.xml 文件了。

点击src/main/ 目录下,发现相比较 Jar项目,多了一个 webapp 文件夹。 其实这个 webapp 文件夹就相当于以前的 WebContent 文件夹。

构建标准的 web 目录结构。

在webapp 目录下,创建 一个 META-INF 文件夹 和 WEB-INF 文件夹。在 WEB-INF 文件夹,需要再添加一个web.xml 文件

web.xml 内容为:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns="http://java.sun.com/xml/ns/javaee"
	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
	version="2.5">
	<welcome-file-list>
		<welcome-file>index.html</welcome-file>
		<welcome-file>index.htm</welcome-file>
		<welcome-file>index.jsp</welcome-file>
		<welcome-file>default.html</welcome-file>
		<welcome-file>default.htm</welcome-file>
		<welcome-file>default.jsp</welcome-file>
	</welcome-file-list>
</web-app>

有图片

然后,再更新 Maven 项目, Alt+F5, 点击确定即可。

有图片在这里插入图片描述

也可以利用工具完成 ,不需要手动添加。

选中 ServletMaven 项目, 右键 Java EE Tools——>Generate Deployment Descriptor Stub, 系统便会自动创建 web.xml 文件了。

在这里插入图片描述

推荐使用工具完成。

二.三 添加 servlet-api 和jsp-api 的依赖

 <dependencies>
  	<dependency>
  		<groupId>javax.servlet</groupId>
  		<artifactId>jsp-api</artifactId>
  		<version>2.0</version>
  	</dependency>
  	<dependency>
  		<groupId>javax.servlet</groupId>
  		<artifactId>servlet-api</artifactId>
  		<version>2.5</version>
  	</dependency>
  </dependencies>

二.四 创建 Servlet 类

在 src/main/java 下,创建一个 HelloServlet 类

package com.yjl;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * @author 岳泽霖
 */
public class HelloServlet extends HttpServlet{
	private static final long serialVersionUID = 1L;

	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		String message="你好啊,岳泽霖";
		req.setAttribute("message",message);
		req.getRequestDispatcher("/index.jsp").forward(req,resp);
	}

	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		// TODO 自动生成的方法存根
		doGet(req, resp);
	}
	
}

二.五 在web.xml 下,添加 servlet的映射

<servlet>
		<servlet-name>hello</servlet-name>
		<servlet-class>com.yjl.HelloServlet</servlet-class>
	</servlet>
	<servlet-mapping>
		<servlet-name>hello</servlet-name>
		<url-pattern>/hello</url-pattern>
	</servlet-mapping>

二.六 在webapp 文件夹下 添加 index.jsp 文件

前台展示 message的值

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>第一个Web类型的Maven 项目</title>
</head>
<body>
	${message}
</body>
</html>

二.七 在pom.xml 文件里面配置 tomcat 插件

Maven 项目,可以启动 Tomcat, 然后运行项目,不需要再单独将项目部署到 Tomcat上,进行运行了。 也就是说, Maven 内置了Tomcat 。

既然内置了 Tomcat,那么就可以设置在 Maven 内置的Tomcat上的端口号,项目名等信息了,非常方便。

<build>
  	<plugins>
  		<plugin>
				<groupId>org.apache.tomcat.maven</groupId>
				<!--tomcat的插件名, tomcat7-maven-plugin, 用的是tomcat7版本-->
				<artifactId>tomcat7-maven-plugin</artifactId>
				<version>2.2</version>
				<configuration>
					<port>8026</port>  <!--tomcat的端口号-->
					<path>/maven</path> <!--tomcat的项目名-->
				</configuration>
			</plugin>
  	</plugins>
  </build>

老蝴蝶的 JDK版本是 JDK1.8, 注意版本号, tomcat7 用的是2.2, 不是2.0. 2.0版本的话,可以会版本不匹配。

如果Tomcat启动时报错,注意看一下,是否是版本不匹配导致 的。

二.八 Maven 启动Tomcat

Maven 项目,右键选择运行方式—> Maven build…

有图片

输入命令: tomcat7:run

有图片

tomcat7 指的是版本是 7 , 也见过 tomcat:run ,表示运行版本是6 ,现在不用6了,配置的是7.

二.九 观察控制台

有图片

说明 Maven 启动 tomcat成功了。

按照它给的网址,进行输入:

http://localhost:8026/maven/hello , 报错了

在这里插入图片描述

报的是 : Class com.yjl.HelloServlet is not a Servlet

这就是第四章说得 依赖范围的问题。
需要指定一下 servlet-api 和 jsp-api 的依赖范围为 provided

二.十 在 servlet-api 和jsp-api 中添加依赖范围

<dependencies>
  	<dependency>
  		<groupId>javax.servlet</groupId>
  		<artifactId>jsp-api</artifactId>
  		<version>2.0</version>
  		<scope>provided</scope>
  	</dependency>
  	<dependency>
  		<groupId>javax.servlet</groupId>
  		<artifactId>servlet-api</artifactId>
  		<version>2.5</version>
  		<scope>provided</scope>
  	</dependency>
  </dependencies>

二.十一 关闭控制台,重新按照 二.八进行启动 tomcat7:run

控制台运行 正确, 重新访问 http://localhost:8026/maven/hello ,显示正确。

有图片

注意,一定要设置其依赖范围 为provided

二.十二 将其打包,放置在本地服务器上

在 pom.xml 中,将 tomcat插件的设置去除掉, 二.七 的部分去除掉。

项目,右键选择运行方式 —> Maven build …

输入命令 package

有图片

观察 target 目录:

有图片

将 war 包放置在 本地 Tomcat 的 webapp 目录下, 启动本地的Tomcat

有图片
启用本地的 tomcat之后:
在这里插入图片描述

输入网址 : http://localhost:8027/ServletMaven-0.0.1-SNAPSHOT/hello

有图片。

成功。

谢谢!!!

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
您好!对于 Maven 项目创建 Servlet 的问题,可以按照以下步骤进行操作: 1. 首先,在 Maven 项目的 `src/main/webapp/WEB-INF` 目录下创建 `web.xml` 文件,用于配置 Servlet。 2. 在 `web.xml` 文件中添加 Servlet配置信息。例如,可以添加以下代码: ```xml <web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0"> <display-name>YourWebAppName</display-name> <servlet> <servlet-name>HelloServlet</servlet-name> <servlet-class>com.example.HelloServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>HelloServlet</servlet-name> <url-pattern>/hello</url-pattern> </servlet-mapping> </web-app> ``` 在上述代码中,`com.example.HelloServlet` 是您自己编写的 Servlet 类的完整路径。 3. 接下来,在 Maven 项目的 `src/main/java` 目录下创建 `com/example` 目录结构,并在 `com/example` 目录下创建 `HelloServlet.java` 文件。 4. 在 `HelloServlet.java` 文件中编写您的 Servlet 逻辑。例如,可以添加以下代码: ```java package com.example; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; public class HelloServlet extends HttpServlet { protected void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException { response.getWriter().println("Hello, Servlet!"); } } ``` 在上述代码中,`doGet` 方法是处理 GET 请求的逻辑,您可以根据实际需求编写自己的 Servlet 逻辑。 5. 最后,使用 Maven 构建项目并运行。可以使用 `mvn clean package` 命令进行构建,并将生成的 WAR 文件部署到 Servlet 容器中(如 Tomcat)。 希望这些步骤对您有所帮助!如果还有其他问题,请随时提问。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

两个蝴蝶飞

你的鼓励,是老蝴蝶更努力写作的

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值