10.pom文件
新版的idea 2020.X,不能设置自动导入,我们修改pom文件后在后上方有个小图案是m右下角有个刷新的,点击即可。
pom.xml是Maven的核心配置文件
<?xml version="1.0" encoding="UTF-8"?> <!--Maven版本和头文件--> <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> <!--之前配置的GAV--> <groupId>com.hxl</groupId> <artifactId>javaweb-01-maven</artifactId> <version>1.0-SNAPSHOT</version> <!--Package:项目的打包方式 jar:java应用 war:javaWeb应用--> <packaging>war</packaging> <name>javaweb-01-maven 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> <!-- 编码版本,可以修改为1.8--> <maven.compiler.source>1.8</maven.compiler.source> <maven.compiler.target>1.8</maven.compiler.target> </properties> <!-- 项目依赖--> <dependencies> <!-- 具体依赖的jar包配置文件--> <!-- Maven的高级之处在于他会帮你导入这个jar包所依赖的其他jar包--> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.11</version> <scope>test</scope> </dependency> </dependencies> <!-- 项目构建用的东西--> <build> <finalName>javaweb-01-maven</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>
- Maven由于它的约定大于配置,我们之后可能会遇到我们写的配置文件无法被导出或者生效的问题,解决方案:
<!-- 在build中配置resources,来防止我们资源导出失败的问题--> <build> <resources> <resource> <directory>src/main/resources</directory> <includes> <include>**/*.properties</include> <include>**/*.xml</include> </includes> <filtering>true</filtering> </resource> <resource> <directory>src/main/java</directory> <includes> <include>**/*.properties</include> <include>**/*.xml</include> </includes> <filtering>true</filtering> </resource> </resources> </build>
11.IDEA中的操作
12.解决遇到的问题
- Maven3.8.2爆红
- 我们发现在setting.xml文件中我们配置了本地仓库和阿里云镜像。看到没问题之后我们直接修改环境变量
- 将版本降一下。需要改的位置是M2_HOME和MAVEN_HOME
- Tomcat闪退
- 点击start.bat,点进去我们往下看会看到java环境的一些配置,由于环境不对会导致错误
- 可以在最后:end前加一个pause
- IDEA中每次都要重复配置MAVEN
在IDEA中的全局默认配置中去配置。
在这个地方配置后,以后每次都是这样了。
- Maven项目中Tomcat无法配置
- Maven默认web项目中的web.xml版本太老了
我们可以查看下面的路径
- 看一下里面的版本,将webapp里面的和tomcat的一致
- Maven仓库的使用
- Maven仓库地址:https://mvnrepository.com/
- 在搜索栏进行搜索;如果搜不到就查看一些其他的,还搜不到这时候就想一下,这是用Tomcat启动的,那是不是就去Tomcat中找一下相关的,然后大概的锁定,再去Maven中去搜,一般搜出来用的最多的就是正确的。点进去可以下载jar包也可以看到maven的依赖
- 以HttpServlet为例,发现爆红我们在Tomcat中找到关于servlet的,再去Maven仓库中查找
<!-- https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api --> <dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <version>4.0.1</version> <!-- 这个是个范围,要把他删掉--> <scope>provided</scope> </dependency>
再进去的时候缺少点东西。我们再下载一个jsp-api。我们进去的时候看一下下载哪一个,会看到有一个是2011年更新的,我们选择2018年更新的那个。
<dependency> <groupId>javax.servlet.jsp</groupId> <artifactId>javax.servlet.jsp-api</artifactId> <version>2.3.3</version> </dependency>
再次进去的时候就可以了。
- 我们接下来创建一个页面
package com.hxl; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.io.PrintWriter; public class HelloServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { //响应的类型html resp.setContentType("text/html"); //这个地方是设置编码,因为有可能进入浏览器后成乱码 resp.setCharacterEncoding("utf-8"); //获取响应的输出流 PrintWriter out = resp.getWriter(); out.println("<html>"); out.println("<head>"); out.println("<title>Hello World!</title>"); out.println("</head>"); out.println("<body>"); out.println("<h1>你好呀</h1>"); out.println("</body>"); out.println("</html>"); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { doGet(req, resp); } }
<!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.xml中是配置我们web的核心应用--> <!-- 注册Servet--> <servlet> <servlet-name>HelloServlet</servlet-name> <servlet-class>com.hxl.HelloServlet</servlet-class> </servlet> <!-- 一个Servlet对应一个Mapping:映射--> <servlet-mapping> <servlet-name>HelloServlet</servlet-name> <!-- 请求路径--> <url-pattern>/hxl</url-pattern> </servlet-mapping> </web-app>
header.html中是一个测试,可以随便写点内容。
- 这样启动柜tomcat后,进入localhost:8080,会进入到index.jsp中。进入到localhost:8080/header.html是进入到了header.html中的内容;然后再进入到localhost:8080/hxl中是进入到我们HelloServlet中的内容。






