vscode配置javaweb

转至我的博客园
(好累,为什么一推在博客园可以正常显示的GitHub图片在CSDN就不行了= =。。)

前置条件,安装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插件:然后点击插件中右上角的 + 号

image-20210908145342241

然后选择你本地安装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时,直接回车即可

image-20210908151202515

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,选择执行命令

image-20210908151954062

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

image-20210908152054422

3.3 然后选择package

image-20210908152129024

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

在这里插入图片描述

其中还会生产target目录

3.4 在Tomcat上运行项目

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

​ 右键选择用tomcat运行:

image-20210908152647487

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

在这里插入图片描述

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

image-20210908153030487

4.1 maven 的一些功能

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

image-20210908153426918

然后项目中的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

  • 导入成功:

在这里插入图片描述

  • 但是实际上我这虽然识别出了包,但是打包项目时失败了,目前还在研究中

    image-20210908161819295

法二:借助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>

  • 项目文件结构:

    image-20210908163553496

    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中运行:

然后提示这个错误:

image-20211103123402165

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

在这里插入图片描述

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

2.1)寻找问题:

在打算将打包的放在tomcat服务器上运行的 *.war打开来看看之前,先来了解一下里面的相关的文件及其作用


引用于:WEB-INF目录与META-INF目录详解

  • 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 文件。

image-20211103170517482

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

在这里插入图片描述

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

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

在这里插入图片描述

  • 16
    点赞
  • 137
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值