前提条件是已经安装好maven,并且配置了java和maven环境变量
我使用的环境是jdk1.8、maven3.6、struts2.5、eclipse4.9、tomcat8.5
创建maven项目
file->new->other->Maven project出现如下界面
这里把第一个勾搭上是跳过骨架,选上的话最后创建的目录不全,需要自己补上。然后点击next
这里的group Id,artifact Id自己填写,artifact Id就是项目名,我的是mavenstruts,因为之前已经创建过所以不能再用这个artifact Id,所以后面加上了一个1。需要注意的是packing需要选择war。
- jar表示导出方式是一个jar包,其实就是一个普通的java项目
- war表示导出的包是一个war包,也就是一个web项目
然后点击finish即可创建完成。
创建完成后目录结构如下:
补全目录
上面红色标记的webapp就是平时使用eclipse创建web项目时的WebContent目录,在maven项目中不是叫WebContent而是叫做webapp,在该webapp目录下应该有WEB-INF目录以及WEB-INF目录下有web.xml文件,但是刚创建出来的maven的web项目不包含这个目录以及web.mxl文件,此时可以手动补齐也可以。还有种方式是通过eclipse自带的功能实现。具体方法是选中maven项目,然后右键。
最后点击一个generate Deployment Descriptor Stub(我已操作过所以变灰了)。
操作完成后右键项目->Maven->Update project即可。
更改默认jdk
我们使用eclipse创建maven项目时使用的会是自带的jdk(1.5版本),此时需要换回我们自己的版本,可以使用两种方式。
修改范围是本项目
使用这种方式修改的只是本项目的jdk,修改可以直接拷贝代码,代码如下:
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.7.0</version>
<configuration>
<!--源码的版本-->
<source>1.8</source>
<!--编译的版本-->
<target>1.8</target>
<!--指定的编码,避免乱码-->
<encoding>utf-8</encoding>
</configuration>
</plugin>
</plugins>
</build>
这是通过拷贝代码的方式,另外一种是在选中项目,右键->maven->add plugin在enter groupid….那里输入compile,然后点击下方出现的包边上的三角(也就是展开的意思),然后再选择其中版本最高的一个。此时在pom.xml中就会出现以下代码。
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.1</version>
</plugin>
</plugins>
</build>
可以看到,这里与上面拷贝的代码相比缺少了configuration以及里面的元素,所以这部分自己补齐即可。也就是自己添加上下面的代码:
<configuration>
<!--源码的版本-->
<source>1.8</source>
<!--编译的版本-->
<target>1.8</target>
<!--指定的编码,避免乱码-->
<encoding>utf-8</encoding>
</configuration>
修改范围是所有项目
上面已经说过通过修改pom.xml里面的配置只是对当前项目起作用,当我们下一次创建maven项目时依然是使用默认的jdk版本,如果想要一次性修改那么可以修改maven的配置文件,就是maven安装目录(下载后解压的目录)里面的conf目录下的settings.xml是全局配置文件,不过一般是不建议直接修改maven的全局配置文件的,我们可以将该配置文件复制一份到.m2目录(安装maven后悔默认创建这样的一个目录)下,以后如果需要修改maven的配置文件可以修改这里面的配置文件即可。这两个的区别是,.m2里面的配置文件作用域只是当前用户。要知道一个计算机是可以有多个用户的,修改.m2文件夹里面的配置文件只会对当前用户有效,不仅仅是修改jdk默认版本时如此,其实只要涉及到修改maven的配置文件都是建议修改.m2里面的配置文件。
具体的修改方式是将下面的代码拷贝到settings.xml文件里面的profiles标签下面。
<profiles>
<!--上面的profiles标签是已经处在的,我们需要添加是profile标签的内容-->
<profile>
<id>jdk-1.8</id>
<activation>
<activeByDefault>true</activeByDefault>
<jdk>1.8</jdk>
</activation>
<properties>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
<maven.compiler.compilerVersion>1.8</maven.compiler.compilerVersion>
</properties>
</profile>
<!--添加内容结束-->
</profiles>
通过这种方式修改后,以后创建的所有的maven项目都不会使用默认的jdk版本,而是使用jdk1.8(前提是我们电脑上配置的jdk版本需要是jdk1.8才可以)。
添加struts2包依赖
我们创建一个struts2项目是需要很多的jar包,maven中添加依赖的方式是在pom.xml中的dependency标签里面根据坐标来进行配置。但是也可以通过eclipse来实现。具体步骤如下:
我们先打开pom.xml,在下面可以选择Dependencies,然后点击右侧的Add会出现 Select Dependency页面,我们在第四步那里输入struts2-core会出现一些结果,选择第五步的那个选择finish即可(第六步是我们添加的jar包的使用范围)。此时在我们的pom.xml中会出现红色框线那部分代码
如果不是通过上面那种方式实现也可以在浏览器搜索struts2-core maven,在maven库中找到坐标
将第四步哪里的代码拷贝过来放在dependencys标签内部也是一样的。
需要注意的是对于struts2项目必须的包也不是只有一个struts2-core包,但是这里的诀窍是只要我们导入struts2-core包,其余必须的包就会被自动导入。
在上面提那家jar依赖的那张图中除了struts2-core包依赖外还有两个jar包:
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.5</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jsp-api</artifactId>
<version>2.0</version>
<scope>provided</scope>
</dependency>
因为建立的是web项目所以需要添加对servlet以及jsp的支持,所以需要添加上面两个jar,需要注意的是这两个jar后面还有一句provided,这里的scope里面的有provided、compile、test等,这里选择provided表明这两个jar只是在编译的时候需要,在运行的时候不需要,这是因为我们的项目是放入在tomcat中运行的,在tomcat中已经有了这两个jar包。如果没有标签那么久默认是compile范围的。
配置文件的编写
此时的目录结构是:(注意aciton以及配置文件的位置)
- struts.xml是在资源文件resources下面
- web.xml是在webapp/WEB-INF下面
- jsp可以直接放在webapp下面,我是在webapp下面建立了一个jsp文件后再放的
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_3_0.xsd" version="3.0">
<display-name>mavenstruts</display-name>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<!-- 使用struts项目时需要配置过滤器 -->
<filter>
<filter-name>mavenstruts</filter-name>
<filter-class>org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>mavenstruts</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>
对于filter-class标签需要注意的一点是2.5版本之前的写法与2.5版本及以后有点不一样。不过可以记住大概的类名在eclipse中通过快捷家ctrl+shift+T去搜索,还有一种方式是知道该类是在包 org.apache.struts2.dispatcher.filter
下面,可以直接到包里面去找。然后copy全路径过来。
struts.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.5//EN"
"http://struts.apache.org/dtds/struts-2.5.dtd">
<struts>
<!-- 这里是我们访问路径的后缀 ,如果没有后缀默认是.action-->
<constant name="struts.action.extension" value="do" />
<package name="hello" extends="struts-default">
<action name="helloWorld" class="top.twolovelypig.action.MavenStruts">
<result name="success">/jsp/index.jsp</result>
</action>
</package>
</struts>
action编写
action是放入在src/main/java里面的,创建该类时自己建立的包是top.twolovelypig.action
package top.twolovelypig.action;
import com.opensymphony.xwork2.ActionSupport;
public class MavenStruts extends ActionSupport{
private static final long serialVersionUID = 1L;
public String execute() throws Exception {
System.out.println("已经执行了");
return SUCCESS;
}
}
部署运行
最后配置tomcat已经将该项目放入到tomcat中运行。启动项目后最后访问如下路径即可:
http://localhost:8080/mavenstruts/helloWorld.do