前置条件,安装JDK,VScode(其中依赖插件:Extension Pack for Java,Language Support for Java™ by Red Hat,Maven for Java
,Tomcat for Java
),Maven,
1.1在vscode上配置Tomcat
1)先安装:官方网站(最好使用9.0的版本,因为10.0的版本中的一些名字会发生改变)
2)安装Tomcat for Java
插件:然后点击插件中右上角的 + 号
然后选择你本地安装Tomcat的目录:
完成之后:
2创建java_web项目:
2.1 在vscode中按快捷键:ctrl + shift + p 然后输入 maven,之后在选择如下图中所示:
2.2 选择webapp:
2.3 版本可以随便选,这里以1.4为例
2.4 输入项目路径及名称,这里可以随意
2.5选择文件夹存放项目
2.6 maven 开始部署相关配置
2.6.1 当询问你选择version时,直接回车即可
2.6.2 当询问你选择package时,直接回车即可
2.6.3 当出现 如下提示就表明项目建立好了:
2.7 然后建立所需要的目录:java,test,resources,其文件结构图如下所示:
其中java文件夹用来存放java文件, resources用来存放资源文件(maven编译时会识别文件夹名所以必须要叫resources, 不然就要在pom.xml中手动配置资源文件夹)到此一个web项目的框架已经建好了, 使用maven创建web项目的话导包都是在pom.xml中进行
3 运行java_web程序
3.1 按下ctrl+shift+p, 输入maven,选择执行命令
3.2 然后选择你刚刚创建的项目,我这边是mercurows
3.3 然后选择package
maven对项目编译完成之后终端显示如下:
其中还会生产target目录
3.4 在Tomcat上运行项目
项目左边文件导航中:项目文件->target->项目名称.war
右键选择用tomcat运行:
3.5 如果终端没有报错的话,就可以展开TOMCAT SERVERS插件 使用浏览器打开项目
**其打开的是 webapp中的index.jsp中的文件 ****
4.1 maven 的一些功能
4.1.1 可使用项目其中的clean功能,清理target目录
然后项目中的target目录就会消失。
附加:导入jar包方法:(这里以 servlet.jar包 为样例说明)
0.1 先来看看如果没有导入JDK1.7没有自带的servlet
包会出现什么情况:
法一:不依赖于maven包管理的手动配置包(最下文有更新方法~)
1.1 在项目目录文件下建立lib
文件夹 然后在其中放入需要导入的包(servlet-api)
*注:担心兼容问题,这里用的servlet
包是Tomcat lib
中的 servlet-api
包
1.2在资源管理中找到项目根目录下的.classpath
文件,然后用vscode打开
目的:只需将 jar 的路径填入到 path 中即可,源码路径填入到 sourcepath 中即可(暂时不清楚源码哪里看= =、、)
然后, 增加一行 classpathentry,并填入正确的路径,可以填相对路径,也可以填绝对路径
<!--多出的一行-->
<classpathentry kind="lib" path="lib/servlet-api.jar" sourcepath="lib/sources/文件名"/>
由于我不清楚源码哪里看,所以上面代码可以将``sourcepath`给删除了,变成以下代码:
<!--多出的一行-->
<classpathentry kind="lib" path="lib/servlet-api.jar"/>
注:如果需要填写sourcepath
的话,需要在lib下建立一个sourcepath
文件夹用来存放源码:
注:如果看到文件变红(在文件自身没有语法错误的情况下),可以:右键项目根目录下的pom.xml
文件->更新项目,即可消除红色。这里也推荐在更改了项目中java等文件之后手动点一下~
综上,我的。classpath
文件配置为:
<?xml version="1.0" encoding="UTF-8"?>
<classpath>
<classpathentry kind="src" output="target/classes" path="src/main/java">
<attributes>
<attribute name="optional" value="true"/>
<attribute name="maven.pomderived" value="true"/>
</attributes>
</classpathentry>
<classpathentry excluding="**" kind="src" output="target/classes" path="src/main/resources">
<attributes>
<attribute name="maven.pomderived" value="true"/>
</attributes>
</classpathentry>
<classpathentry kind="src" output="target/test-classes" path="src/test/java">
<attributes>
<attribute name="optional" value="true"/>
<attribute name="maven.pomderived" value="true"/>
<attribute name="test" value="true"/>
</attributes>
</classpathentry>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.7">
<attributes>
<attribute name="maven.pomderived" value="true"/>
</attributes>
</classpathentry>
<classpathentry kind="con" path="org.eclipse.m2e.MAVEN2_CLASSPATH_CONTAINER">
<attributes>
<attribute name="maven.pomderived" value="true"/>
</attributes>
</classpathentry>
<classpathentry kind="src" path="target/generated-sources/annotations">
<attributes>
<attribute name="optional" value="true"/>
<attribute name="maven.pomderived" value="true"/>
<attribute name="ignore_optional_problems" value="true"/>
<attribute name="m2e-apt" value="true"/>
</attributes>
</classpathentry>
<classpathentry kind="src" output="target/test-classes" path="target/generated-test-sources/test-annotations">
<attributes>
<attribute name="optional" value="true"/>
<attribute name="maven.pomderived" value="true"/>
<attribute name="ignore_optional_problems" value="true"/>
<attribute name="m2e-apt" value="true"/>
<attribute name="test" value="true"/>
</attributes>
</classpathentry>
<classpathentry kind="output" path="target/classes"/>
<!--多出的一行-->
<classpathentry kind="lib" path="lib/servlet-api.jar"/>
</classpath>
1.3 重启vscode
- 导入成功:
- 但是实际上我这虽然识别出了包,但是打包项目时失败了,目前还在研究中
法二:借助maven的包管理
1.1 打开项目中的pom.xml
配置文件,然后在<dependencies>
与</dependencies>
代码中添加以下代码:
<!-- 程序包javax.servlet.http -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.5</version>
<scope>provided</scope>
</dependency>
综上,我的pom.xml
配置文件为:
<?xml version="1.0" encoding="UTF-8"?>
<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.test</groupId>
<artifactId>mercurows</artifactId>
<version>1</version>
<packaging>war</packaging>
<name>mercurows Maven Webapp</name>
<!-- FIXME change it to the project's website -->
<url>http://www.example.com</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>1.7</maven.compiler.source>
<maven.compiler.target>1.7</maven.compiler.target>
</properties>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
<!-- 程序包javax.servlet.http -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.5</version>
<scope>provided</scope>
</dependency>
</dependencies>
<build>
<finalName>mercurows</finalName>
<pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) -->
<plugins>
<plugin>
<artifactId>maven-clean-plugin</artifactId>
<version>3.1.0</version>
</plugin>
<!-- see http://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_war_packaging -->
<plugin>
<artifactId>maven-resources-plugin</artifactId>
<version>3.0.2</version>
</plugin>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.0</version>
</plugin>
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.22.1</version>
</plugin>
<plugin>
<artifactId>maven-war-plugin</artifactId>
<version>3.2.2</version>
</plugin>
<plugin>
<artifactId>maven-install-plugin</artifactId>
<version>2.5.2</version>
</plugin>
<plugin>
<artifactId>maven-deploy-plugin</artifactId>
<version>2.8.2</version>
</plugin>
</plugins>
</pluginManagement>
</build>
</project>
- 法二可以正常的打包运行项目,初始化Servlet类:
附件:
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>
<!-- 第一个 !-->
<servlet>
<servlet-name>demo</servlet-name>
<servlet-class>servlet.demo</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>demo</servlet-name>
<url-pattern>/demo</url-pattern>
</servlet-mapping>
</web-app>
- 项目文件结构:
2021-11-3 更新 法一:不依赖于maven包管理的手动配置包
在上文提到了,用.classpath文件手动导入包之后可以在本地运行,但是打包到tomcat后就无法政策运行,
现在给出解决方法,这里以数据库连接为例子(即手动导入
mysql-connector-java
版本为8.0.27)。(同理这里也就只需要将mysql连接jar包放入lib目录中,以及在.classpath
文件中新添一条命令(在下图))
1.1)先不使用maven包管理,直接使用 (法一) 的方法,进行测试(本地连接):
其中pom.xml中没有依赖mysql-connector-java 包
本地构建项目完后本仓库也没有下载 mysql-connector-java 因此,这里依靠的只有lib里面的
文件框架:
在.classpath
中新增的指令:
<classpathentry kind="lib" path="lib/mysql-connector-java-8.0.27.jar" sourcepath="lib/sources/mysql-connector-java-8.0.27.7z"/>
1.2)执行相关的访问数据库指令,其执行结果如下,可以看出可以正常访问远程数据库:
1.3)打包项目,放到tomcat中运行:
然后提示这个错误:
再看看tomcat里面是作怎么说的:
很明显说明这数据库连接包没有正常导入。
2.1)寻找问题:
在打算将打包的放在tomcat服务器上运行的 *.war
打开来看看之前,先来了解一下里面的相关的文件及其作用
- WEB-INF简介
WEB-INF是Java的WEB应用的安全目录。所谓安全就是客户端无法访问,只有服务端可以访问的目录。
如果想在页面中直接访问其中的文件,必须通过 web.xml 文件对要访问的文件进行相应映射才能访问。
- WEB-INF目录的作用
/WEB-INF/web.xml
Web应用程序配置文件,描述了 servlet 和其他的应用组件配置及命名规则。
/WEB-INF/classes/
包含了站点所有用的 class 文件,包括 servlet class 和非servlet class,他们不能包含在 .jar文件中。
/WEB-INF/lib/
存放web应用需要的各种JAR文件,放置仅在这个应用中要求使用的jar文件,如数据库驱动jar文件。
/WEB-INF/src/
源码目录,按照包名结构放置各个Java文件。
/WEB-INF/database.properties
数据库配置文件
/WEB-INF/tags/
存放了自定义标签文件,该目录并不一定为 tags,可以根据自己的喜好和习惯为自己的标签文件库命名,当使用自定义的标签文件库名称时,在使用标签文件时就必须声明正确的标签文件库路径。例如:当自定义标签文件库名称为 simpleTags 时,在使用 simpleTags 目录下的标签文件时,就必须在 jsp 文件头声明为:<%@ taglibprefix=“tags” tagdir="/WEB-INF /simpleTags" % >。
/WEB-INF/jsp/
jsp 1.2 以下版本的文件存放位置。改目录没有特定的声明,同样,可以根据自己的喜好与习惯来命名。
WEB-INF/jsp2/
与 jsp 文件目录相比,该目录下主要存放 Jsp 2.0 以下版本的文件,当然,它也是可以任意命名的,同样为区别 Jsp 1.2以下版本的文件目录,通常才命名为 jsp2。
META-INF
相当于一个信息包,目录中的文件和目录获得Java 2平台的认可与解释,用来配置应用程序、扩展程序、类加载器和服务manifest.mf文件,在用jar打包时自动生成。
对照与上面的所介绍的,我们应去找*.war目录下的/WEB-INF/lib/
文件夹。然后我发现里面并没有 mysql-connector-java jar包,也就是说上传至服务端时完全没用到。
2.2)尝试解决问题:
在上面我们还发现一个问题,就是对照与上面附录中的项目结构,发现还少了一个.classpath
文件。
因此,我们就顺手将项目中的.classpath
文件也丢一份进,再然后为了能顺利的将我们需要的数据库连接jar包打包到tomcat服务器中,这里需要我们手动的复制一份lib(里面包含所需的*.jar
文件)。如下图:
再次打包项目,之后就会发现对应的lib文件里面有我们想要的数据库连接jar了:
然后就可以正常访问到服务器了: