前置条件,安装JDK,VScode(其中依赖插件:Extension Pack for Java,Language Support for Java™ by Red Hat,Maven for JavaTomcat for Java),Maven,


1.1在vscode上配置Tomcat

1)先安装:官方网站(最好使用9.0的版本,因为10.0的版本中的一些名字会发生改变)

2)安装Tomcat for Java插件:然后点击插件中右上角的 + 号

vs code开发java微服务 vscode开发javaweb体验_maven

然后选择你本地安装Tomcat的目录:

vs code开发java微服务 vscode开发javaweb体验_vscode_02


完成之后:

vs code开发java微服务 vscode开发javaweb体验_vscode_03


2创建java_web项目:

2.1 在vscode中按快捷键:ctrl + shift + p 然后输入 maven,之后在选择如下图中所示:

vs code开发java微服务 vscode开发javaweb体验_javaweb_04

2.2 选择webapp:

vs code开发java微服务 vscode开发javaweb体验_vscode_05

2.3 版本可以随便选,这里以1.4为例

vs code开发java微服务 vscode开发javaweb体验_vscode_06

2.4 输入项目路径及名称,这里可以随意

vs code开发java微服务 vscode开发javaweb体验_maven_07

vs code开发java微服务 vscode开发javaweb体验_maven_08

2.5选择文件夹存放项目

vs code开发java微服务 vscode开发javaweb体验_javaweb_09

2.6 maven 开始部署相关配置

2.6.1 当询问你选择version时,直接回车即可

vs code开发java微服务 vscode开发javaweb体验_vs code开发java微服务_10

2.6.2 当询问你选择package时,直接回车即可

vs code开发java微服务 vscode开发javaweb体验_vs code开发java微服务_11

2.6.3 当出现 如下提示就表明项目建立好了:

vs code开发java微服务 vscode开发javaweb体验_javaweb_12

2.7 然后建立所需要的目录:java,test,resources,其文件结构图如下所示:

vs code开发java微服务 vscode开发javaweb体验_vs code开发java微服务_13

其中java文件夹用来存放java文件, resources用来存放资源文件(maven编译时会识别文件夹名所以必须要叫resources, 不然就要在pom.xml中手动配置资源文件夹)到此一个web项目的框架已经建好了, 使用maven创建web项目的话导包都是在pom.xml中进行


3 运行java_web程序

3.1 按下ctrl+shift+p, 输入maven,选择执行命令

vs code开发java微服务 vscode开发javaweb体验_vscode_14

3.2 然后选择你刚刚创建的项目,我这边是mercurows

vs code开发java微服务 vscode开发javaweb体验_vs code开发java微服务_15

3.3 然后选择package

vs code开发java微服务 vscode开发javaweb体验_maven_16

maven对项目编译完成之后终端显示如下:

vs code开发java微服务 vscode开发javaweb体验_编辑器_17

其中还会生产target目录

3.4 在Tomcat上运行项目

项目左边文件导航中:项目文件->target->项目名称.war

右键选择用tomcat运行:


vs code开发java微服务 vscode开发javaweb体验_vscode_18

3.5 如果终端没有报错的话,就可以展开TOMCAT SERVERS插件 使用浏览器打开项目

vs code开发java微服务 vscode开发javaweb体验_javaweb_19

**其打开的是 webapp中的index.jsp中的文件 ****

vs code开发java微服务 vscode开发javaweb体验_javaweb_20

4.1 maven 的一些功能

4.1.1 可使用项目其中的clean功能,清理target目录

vs code开发java微服务 vscode开发javaweb体验_vscode_21

然后项目中的target目录就会消失。

附加:导入jar包方法:(这里以 servlet.jar包 为样例说明)

0.1 先来看看如果没有导入JDK1.7没有自带的servlet包会出现什么情况:

vs code开发java微服务 vscode开发javaweb体验_vs code开发java微服务_22

法一:不依赖于maven包管理的手动配置包(最下文有更新方法~)

1.1 在项目目录文件下建立lib文件夹 然后在其中放入需要导入的包(servlet-api)

vs code开发java微服务 vscode开发javaweb体验_maven_23

*注:担心兼容问题,这里用的servlet包是Tomcat lib中的 servlet-api

vs code开发java微服务 vscode开发javaweb体验_javaweb_24

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文件夹用来存放源码

vs code开发java微服务 vscode开发javaweb体验_编辑器_25


注:如果看到文件变红(在文件自身没有语法错误的情况下),可以:右键项目根目录下的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

  • 导入成功:

vs code开发java微服务 vscode开发javaweb体验_vscode_26

  • 但是实际上我这虽然识别出了包,但是打包项目时失败了,目前还在研究中
法二:借助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类:

vs code开发java微服务 vscode开发javaweb体验_javaweb_27

vs code开发java微服务 vscode开发javaweb体验_javaweb_28


附件:

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

vs code开发java微服务 vscode开发javaweb体验_vscode_29

本地构建项目完后本仓库也没有下载 mysql-connector-java 因此,这里依靠的只有lib里面的

vs code开发java微服务 vscode开发javaweb体验_javaweb_30

文件框架:

vs code开发java微服务 vscode开发javaweb体验_vscode_31

.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)执行相关的访问数据库指令,其执行结果如下,可以看出可以正常访问远程数据库:

vs code开发java微服务 vscode开发javaweb体验_vscode_32

1.3)打包项目,放到tomcat中运行:

然后提示这个错误:

vs code开发java微服务 vscode开发javaweb体验_编辑器_33

再看看tomcat里面是作怎么说的:

vs code开发java微服务 vscode开发javaweb体验_vs code开发java微服务_34

很明显说明这数据库连接包没有正常导入。

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包,也就是说上传至服务端时完全没用到。

vs code开发java微服务 vscode开发javaweb体验_编辑器_35

2.2)尝试解决问题:

在上面我们还发现一个问题,就是对照与上面附录中的项目结构,发现还少了一个.classpath 文件。

vs code开发java微服务 vscode开发javaweb体验_编辑器_36

因此,我们就顺手将项目中的.classpath文件也丢一份进,再然后为了能顺利的将我们需要的数据库连接jar包打包到tomcat服务器中,这里需要我们手动的复制一份lib(里面包含所需的*.jar文件)。如下图:

vs code开发java微服务 vscode开发javaweb体验_javaweb_37

再次打包项目,之后就会发现对应的lib文件里面有我们想要的数据库连接jar了:

vs code开发java微服务 vscode开发javaweb体验_javaweb_38

然后就可以正常访问到服务器了:

vs code开发java微服务 vscode开发javaweb体验_vscode_39