二、Maven工程开发
2.1 Idea配置Maven插件
对新项目也使用同样的配置,如下:
再配置一次即可。
2.2 构建Maven工程
创建好的maven项目的项目结构是这样的:
在main目录下创建Java目录和resources目录:
如果想要文件更完整的话可以在src下创建test目录,并在该文件下创建用于测试的Java和resources文件。
至此,基本的maven工程就搭建好了。
2.3 pom文件配置
pom文件最上方是项目基本信息:
- groupId
groupId一般定义项目组名,命名规则使用反向域名。例如com.baidu- artifactId
artifactId一般定义项目名,命名使用小写字母。项目发布后,它的坐标是groupId+artifactId。- version
version定义版本号。版本号一般有三段,第一段:革命性的产品升级。第二段:新功能版本。第三段:修正一些bug。- packaging
packaging定义打包方式。
中定义一些配置信息:
中定义依赖的jar包坐标:
由于项目是web项目,需要写Servlet和JSP,所以需要引入Servlet和JSP的依赖。查找依赖坐标的网站:https://mvnrepository.com/
<dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.11</version> <scope>test</scope> </dependency> <!-- jsp --> <dependency> <groupId>javax.servlet.jsp</groupId> <artifactId>jsp-api</artifactId> <version>2.2</version> </dependency> <!-- servlet --> <dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <version>3.0.1</version> </dependency> </dependencies>
为什么之前的web项目中没有引入jsp和servlet的jar包?
因为之前项目中使用的是tomcat中的jsp和servlet中的jar包,在项目中没有引入。
中定义第三方插件:
web项目依赖tomcat运行,所以添加tomcat插件
2.4 编写代码
代码是在Java文件下编写:
package com.zj.servlet; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; @WebServlet("/demo1") public class MyServlet extends HttpServlet { @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { req.getRequestDispatcher("hello.jsp").forward(req, resp); } @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { doPost(req, resp); } }
jsp是在webapp文件下编写
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>Title</title> </head> <body> hello maven project </body> </html>
运行项目,配置maven运行项目:
2.5 依赖范围
访问servlet后,发现报500异常,这是为什么呢?
这是由于项目中引入了Servlet和Jsp的jar包,而在项目运行时,Tomcat要使用它自带的Servlet和Jsp的jar包,这样就造成了jar包冲突。但如果项目不引入Servlet和Jsp的jar包,则根本无法通过编译。
此时可以设置依赖的作用范围解决该问题,设置Servlet和Jsp的jar包只在编译期起作用,运行时不起作用,这样不仅可以通过编译,还能在运行时避免jar包冲突。
通过在中添加
,可以设置依赖的作用范围,有以下取值:
- compile
默认范围。表示该依赖在编译和运行时生效,项目打包时也会将该依赖打包进去。- provided
使用此依赖范围的Maven依赖,编译和测试时有效,但在运行时无效。典型的例子是servlet-api,在运行时Web容器已经提供依赖,就不需要Maven重复地引入一遍。- runtime
runtime范围表明编译时不需要生效,而只在运行时生效。典型的例子是JDBC驱动包,编译时只需要JDK的JDBC接口即可,只有运行项目时才需要具体的JDBC驱动。- test
test范围表明使用此依赖范围的依赖,只在编译和运行测试代码的时生效,程序的正常运行不需要此类依赖。典型的例子就是JUnit,它只有在编译测试代码及运行测试的时候才需要。- system
如果有些你依赖的jar包没有Maven坐标的,它完全不在Maven体系中,这时候你可以把它下载到本地硬盘,然后通过system来引用。(不推荐使用)
所以对于Servlet和Jsp依赖,我们添加依赖范围为provided即可。
<dependency> <groupId>javax.servlet.jsp</groupId> <artifactId>jsp-api</artifactId> <version>2.2</version> <scope>provided</scope> </dependency> <dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <version>3.0.1</version> <scope>provided</scope> </dependency>
重启项目,即可正常访问Servlet和Jsp
三、Maven工程测试
3.1 测试概述
测试即在交付前对写好的代码进行评测,分为黑盒测试和白盒测试:
- 黑盒测试:不需要写代码,给输入值,看程序是否能够输出期望的值。
- 白盒测试:需要写代码的。关注程序具体的执行流程。
单元测试是指对软件中的最小可测试单元进行检查和验证,Java里单元测试指一个类的功能。单元测试是在软件开发过程中要进行的最低级别的测试活动,软件的独立单元将在与程序的其他部分相隔离的情况下进行测试。
Junit是Java编程语言的单元测试框架,用于编写和运行可重复的自动化测试。从分类中属于白盒测试。
3.2 Junit使用步骤
在Maven项目中引入依赖
<dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> <scope>test</scope> </dependency>
定义被测试的类
定义一个计算器工具类。
public class Calculator { // 加法 public int add(int a,int b){ return a+b; } // 除法 public int div(int a,int b){ return a/b; } }
对定义的类进行测试
- 创建src/test/java包,并将改包设置为测试包。
- 在src/test/java中创建测试类的包,包名一般与被测试包名一致。
- 定义测试类,类名一般为被测试类+Test
4.测试类中编写测试方法。
package com.zj.junit; import org.junit.Test; public class CalculatorTest { /** * 测试方法是可以独立运行的,写法如下: * 1.方法名一般为test+被测试方法名 * 2.方法上方添加@Test * 3.测试方法没有参数和返回值 */ @Test public void testAdd(){ Calculator calculator = new Calculator(); int add = calculator.add(1, 4); System.out.println(add); } @Test public void testDiv(){ Calculator calculator = new Calculator(); int div = calculator.div(6, 2); System.out.println(div); } }
Junit结果判定
点击测试方法边的三角运行测试方法,如果出现绿色对钩,证明方法能正常运行;如果出现红色感叹号,证明方法抛出异常,需要修改方法。
当然,不是能正常运行就代表方法一定没有问题,也有可能方法的结果和预期结果不一致,这时就需要使用断言操作。
@Test public void testAdd(){ Calculator calculator = new Calculator(); int add = calculator.add(1, 4); //断言,参数1:预期结果,参数2:实际结果 Assert.assertEquals(5,add); }
3.3 @Before、@After
在测试类中,@Before修饰的方法会在测试方法之前自动执行,@After修饰的方法会在测试方法执行之后自动执行。之后的学习中,我们可以设置前置方法为获取资源,后置方法为释放资源。
@Before public void before(){ System.out.println("开始测试"); } @After public void after(){ System.out.println("结束测试"); }