api报错 javaee maven_Maven--项目管理工具(二)

8d479e5d4aa850825eabdaee86a4170c.png

【Maven】

☞Maven入门教程-Maven项目实战☜

六、Maven项目中pom配置文件的使用

1. pom文件的作用

在maven项目中,通过maven来获取和管理第三方的资源。每个maven项目默认是有一个pom文件的。该文件是用来告诉maven当前项目中需要使用的资源的,该文件会被maven自动加载识别。我们需要在pom配置文件中声明需要使用的资源的坐标即可。

注意:

当pom文件被修改的时候,maven会自动的重新加载pom文件,并根据文件的最新内容加载最新的资源。可以理解为maven给pom文件增加了一个onchange的事件。

2. pom文件的配置内容

2.1 modelverson

声明模块的版本

2.2 当前项目的资源坐标

给maven查看,并便于maven查找到该项目给其他项目使用

2.3 配置第三方的资源坐标

让maven根据坐标从本地仓库中引入第三方的资源到项目中使用,如果

本地仓库中没有,则会自动从云仓库中下载。

注意1:

我们可以在https://mvnrepository.com/下来搜索需要的资源坐标,然后当我们将资源坐标变更后,需要点击import changes让maven重新加载pom文件,根据最新的资源坐标获取资源到项目中

73611e9d092b03dd4fd3bf242e11b4f1.png

注意2:

maven将资源引入到项目中后,在idea的项目视图中是看不到第三方资源的,需要点击idea右侧栏上的maven,进入maven的资源管理视图中,查看当前项目中引入的第三方的资源。

b639ef27132a6d6934280461ba26a8a7.png

2.4 properties自定义资源版本号管理

一个第三方资源会有很多的版本,比如mybatis,spring等如果我们需要引入的第三方资源过多,当我们对某一个资源的版本号进行修改时,不好修改。可以使用properties标签将资源的版本号单独 的声明在外部,便于我们的修改。

99d5f82e5ce8a2161fa3d5b0314090a9.png

2.5 引入第三方的插件资源

452fab2fa7aff15591b72eecce4e62ff.png

3. jar类型和war类型配置示例

3.1 jar类型的配置示例

<?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.bjsxt</groupId>
    <artifactId>01_maven_jar</artifactId>
    <version>1.0-SNAPSHOT</version>
    <!--自定义资源版本号管理-->
    <properties>
        <junit.version>4.13</junit.version><!--版本号的标签名可以自定义声明,但是建议格式为 资源.version-->
        <mysql.jdbc.version>5.1.31</mysql.jdbc.version>
    </properties>
    <!--引入第三方资源-->
    <dependencies>
        <!--一个dependency子标签表示一个要引入的资源,内容为要引入的资源的坐标-->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>${junit.version}</version>
            <scope>test</scope>
        </dependency>
        <!--jdbc的资源坐标-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>${mysql.jdbc.version}</version>
        </dependency>
    </dependencies>

</project>

3.2 war类型的配置示例

问题:

在以前的JAVAEE项目中,IDE工具会自动的将JDK以及tomcat的资源依赖到项目中,我们在web-inf下的lib文件夹下声明的是自定义的第三方资源,而maven中的war类型项目中默认是没有给我们引入任何第三方资源的,造成我们在war类型项目中无法直接创建jsp和声明Servlet完成最基本的web开发。

解决:

在war类型的项目的pom文件中配置最基础的web开发相关的第三方的资源坐标:

  • servlet的资源坐标
  • jsp的资源坐标
  • jstl的资源坐标

配置示例:

<?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.bjsxt</groupId>
  <artifactId>02_maven_war</artifactId>
  <version>1.0-SNAPSHOT</version>
  <packaging>war</packaging>
<!--配置版本号-->
  <properties>
    <servlet-version>3.1.0</servlet-version>
    <jsp-version>2.2</jsp-version>
    <jstl-version>1.2</jstl-version>
  </properties>
<!--配置资源坐标-->
  <dependencies>
    <!--servlet的资源坐标-->
      <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>javax.servlet-api</artifactId>
        <version>${servlet-version}</version>
        <scope>provided</scope>
      </dependency>
    <!--jsp的资源坐标-->
    <dependency>
      <groupId>javax.servlet.jsp</groupId>
      <artifactId>jsp-api</artifactId>
      <version>${jsp-version}</version>
      <scope>provided</scope>
    </dependency>
    <!--jstl的资源坐标-->
    <dependency>
      <groupId>jstl</groupId>
      <artifactId>jstl</artifactId>
      <version>${jstl-version}</version>
    </dependency>
  </dependencies>
</project>

七、Maven的war类型项目的本地启动运行

1. 问题

以前我们使用idea工具直接创建javaEE项目,而idea在帮我们创建javaEE项目的时候就已经指定了项目运行所需要的tomcat,我们直接启动tomcat访问项目即可。但是使用maven创建的war类型的项目,在创建的时候并没有指明项目运行所需要的tomcat,那么maven的war类型项目,在功能开发完成后如何启动运行呢?

2. 解决

maven的项目中涉及到的资源需要maven来进行管理。war类型的项目在开发完成后,需要告诉maven去调用一个tomcat来运行我们当前的war项目,而maven的资源都是从本地仓库中加载或者从云仓库中下载,那么能不能我们自己在war类型项目中告诉maven去下载一个tomcat,来运行我们的war项目呢?答案是可以的。

3. 实现

3.1 在war类型项目的pom文件中配置tomcat插件的资源坐标,并配置tomcat的端口号以及项目的访问路径

<build>
  <plugins>
    <plugin>
      <groupId>org.apache.tomcat.maven</groupId>
      <artifactId>tomcat7-maven-plugin</artifactId>
      <version>2.2</version>
      <configuration>
        <port>6060</port><!--配置tomcat启动的端口号-->
        <path>/my</path><!--配置项目的访问名称-->
      </configuration>
    </plugin>
  </plugins>
</build>

3.2 通过maven启动当前war项目的tomcat容器,运行项目

ee923e42c62a8f95fff1506237b6d550.png

八、使用Maven完成对用户信息的增删改查功能

1. 功能需求

用户访问用户信息管理页面,在管理页面中显示所有的用户信息,并可以对用户信息进行增加,删除,修改操作。

2. 功能分析

  1. 用户管理页面创建
  2. 用户信息的查询
  3. 用户信息的删除
  4. 用户信息的增加
  5. 用户信息的修改

3. 功能实现

3.1 数据库设计

用户信息表:

  • 用户Id
  • 用户名
  • 用户性别
  • 手机号
##创建用户信息表
create table t_user(
	uid int(10) not null auto_increment,
	uname varchar(100) not null,
	sex char(4) not null,
	phone char(11) not null,
	primary key(uid)
);
##添加测试数据
insert into t_user values(default,'张三','男','15566332211');
insert into t_user values(default,'李四','男','15566332212');

3.2 项目开发环境的搭建

3.2.1 使用Maven创建war项目

3.2.2 配置项目的java和resources目录

5bb68358c99c258778266ded7465eacb.png

3.2.3 配置项目的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.bjsxt</groupId>
  <artifactId>04_maven_user</artifactId>
  <version>1.0-SNAPSHOT</version>
  <packaging>war</packaging>
  <!--配置版本号-->
  <properties>
    <servlet-version>3.1.0</servlet-version>
    <jsp-version>2.2</jsp-version>
    <jstl-version>1.2</jstl-version>
    <mybatis.version>3.5.2</mybatis.version>
  </properties>
  <!--配置资源坐标-->
  <dependencies>
    <!--配置Mybatis的依赖-->
    <dependency>
      <!--资源坐标-->
      <groupId>org.mybatis</groupId>
      <artifactId>mybatis</artifactId>
      <version>${mybatis.version}</version>
    </dependency>
    <!--配置JDBC的依赖-->
    <dependency>
      <groupId>mysql</groupId>
      <artifactId>mysql-connector-java</artifactId>
      <version>5.1.23</version>
    </dependency>
    <!--servlet的资源坐标-->
    <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>javax.servlet-api</artifactId>
      <version>${servlet-version}</version>
      <scope>provided</scope>
    </dependency>
    <!--jsp的资源坐标-->
    <dependency>
      <groupId>javax.servlet.jsp</groupId>
      <artifactId>jsp-api</artifactId>
      <version>${jsp-version}</version>
      <scope>provided</scope>
    </dependency>
    <!--jstl的资源坐标-->
    <dependency>
      <groupId>jstl</groupId>
      <artifactId>jstl</artifactId>
      <version>${jstl-version}</version>
    </dependency>
    <!--配置Gson的依赖-->
    <dependency>
      <groupId>com.google.code.gson</groupId>
      <artifactId>gson</artifactId>
      <version>2.8.2</version>
    </dependency>
  </dependencies>
  <!--配置Tomcat插件-->
  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.tomcat.maven</groupId>
        <artifactId>tomcat7-maven-plugin</artifactId>
        <version>2.2</version>
        <configuration>
          <port>8080</port><!--配置tomcat启动的端口号-->
          <path>/project</path><!--配置项目的访问名称-->
        </configuration>
      </plugin>
    </plugins>
  </build>
</project>

3.3.4 在java源码目录下创建MVC的包结构

2f3fb312c2c644c3dd06f01ea383ac5b.png

3.2.5 在pojo包中声明User实体类

package com.bjsxt.pojo;
import java.util.Objects;
public class User {
    private Integer uid;
    private String uname;
    private String sex;
    private String phone;
    @Override
    public String toString() {
        return "User{" +
                "uid=" + uid +
                ", uname='" + uname + ''' +
                ", sex='" + sex + ''' +
                ", phone='" + phone + ''' +
                '}';
    }
    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        User user = (User) o;
        return Objects.equals(uid, user.uid) &&
                Objects.equals(uname, user.uname) &&
                Objects.equals(sex, user.sex) &&
                Objects.equals(phone, user.phone);
    }
    @Override
    public int hashCode() {
        return Objects.hash(uid, uname, sex, phone);
    }
    public Integer getUid() {
        return uid;
    }
    public void setUid(Integer uid) {
        this.uid = uid;
    }
    public String getUname() {
        return uname;
    }
    public void setUname(String uname) {
        this.uname = uname;
    }
    public String getSex() {
        return sex;
    }
    public void setSex(String sex) {
        this.sex = sex;
    }
    public String getPhone() {
        return phone;
    }
    public void setPhone(String phone) {
        this.phone = phone;
    }
    public User() {
    }
    public User(Integer uid, String uname, String sex, String phone) {
        this.uid = uid;
        this.uname = uname;
        this.sex = sex;
        this.phone = phone;
    }
}

3.2.6 在mapper层将User表的增删该查功能实现

package com.bjsxt.mapper;
import com.bjsxt.pojo.User;
import org.apache.ibatis.annotations.*;
import java.util.List;
public interface UserMapper {
    //查询所有的用户信息
    @Select("select * from t_user")
    List<User> selAllUserInfoMapper();
    //根据ID删除用户信息
    @Delete("delete from t_user where uid=#{uid}")
    int delUserInfoMapperById(@Param("uid") int uid);
    //根据ID修改用户信息
    @Update("update t_user set uname=#{uname},sex=#{sex},phone=#{phone} where uid=#{uid}")
    int upUserInfoById(User user);
    //增加用户信息
    @Insert("insert into t_user values(default,#{uname},#{sex},#{phone})")
    int insUserInfo(User user);
}

3.2.7 在resources下创建并配置mybatis.xml文件

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
    <!--配置别名-->
        <typeAliases>
            <package name="com.bjsxt.pojo"/>
        </typeAliases>
    <!--配置数据环境-->
        <environments default="mysql">
            <!--配置mysql的环境-->
            <environment id="mysql">
                <transactionManager type="JDBC"></transactionManager>
                <dataSource type="POOLED">
                    <property name="driver" value="com.mysql.jdbc.Driver"/>
                    <property name="url" value="jdbc:mysql://localhost:3306/maven"/>
                    <property name="username" value="root"/>
                    <property name="password" value="1234"/>
                </dataSource>
            </environment>
        </environments>
    <!--配置mapper扫描路径-->
    <mappers>
        <package name="com.bjsxt.mapper"/>
    </mappers>
</configuration>

3.3 创建用户管理页面

要求:

在页面加载成功后就要显示所有的用户信息

实现:

使用ajax技术来实现,在页面加载成功后,发起ajax请求,请求所有的用户信息。

代码示例:

<%--
  Created by IntelliJ IDEA.
  User: zyp
  Date: 2020/5/6
  Time: 17:14
  To change this template use File | Settings | File Templates.
--%>
<%
    String path = request.getContextPath();
    String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + path + "/";
%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <base href="<%=basePath %>"/>
    <title>Title</title>
    <%--引入jquery文件--%>
    <script type="text/javascript" src="js/j.js"></script>
    <%--声明js代码域--%>
    <script type="text/javascript">
        /*声明页面加载事件*/
        $(function () {
            //发起ajax请求,请求所有的用户信息
            $.get("userServlet",function (data) {//"[{uid:1,uname:'zhangsan',sex:'男',phone:'15533662233'},{},{}]"
                //使用Eval函数将数据转换为js对象
                eval("var us="+data);
                //获取tb对象
                var tb=$("#tb");
                //遍历填充
                for(var i=0;i<us.length;i++){
                    tb.append(" <tr>n" +
                        "                <td>"+us[i].uid+"</td>n" +
                        "                <td>"+us[i].uname+"</td>n" +
                        "                <td>"+us[i].sex+"</td>n" +
                        "                <td>"+us[i].phone+"</td>n" +
                        "                <td><a href=''>删除</a>&nbsp;&nbsp;&nbsp;&nbsp;<a href=''>修改</a></td>n" +
                        "            </tr>")
                }
                
            })
        })

    </script>
</head>
<body>
    <h3>用户管理</h3>
    <hr>
    <table border="1px" cellpadding="10px" cellspacing="0px">
        <%--声明表头--%>
        <thead>
            <tr>
                <td>用户编号</td>
                <td>用户名</td>
                <td>性别</td>
                <td>手机号</td>
                <td>操作</td>
            </tr>
        </thead>
         <%--声明主体内容--%>
        <tbody id="tb"></tbody>
    </table>
</body>
</html>

3.4.查询所有用户信息后台功能实现

UserServlet的创建和实现

package com.bjsxt.controller;
import com.bjsxt.pojo.User;
import com.bjsxt.service.UserService;
import com.bjsxt.service.impl.UserServiceImpl;
import com.google.gson.Gson;
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;
import java.util.List;
@WebServlet("/userServlet")
public class UserServlet extends HttpServlet {
    //声明Service方法
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //设置请求编码格式
            req.setCharacterEncoding("utf-8");
        //设置响应编码格式
            resp.setContentType("text/html;charset=utf-8");
            resp.setCharacterEncoding("utf-8");
        //获取请求信息
        //处理请求
            //创建业务层对象
            UserService us=new UserServiceImpl();
            //调用业务层对象
            List<User> list = us.selAllUserInfoService();
        //响应结果
            //直接响应
            resp.getWriter().write(new Gson().toJson(list));
    }
}

UserService接口的创建和实现

package com.bjsxt.service;
import com.bjsxt.pojo.User;
import java.io.IOException;
import java.util.List;
public interface UserService {
    //获取所有的用户信息
    List<User> selAllUserInfoService() throws IOException;
}

UserServiceImpl的创建和实现

package com.bjsxt.service.impl;
import com.bjsxt.mapper.UserMapper;
import com.bjsxt.pojo.User;
import com.bjsxt.service.UserService;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import java.io.IOException;
import java.io.InputStream;
import java.util.List;
public class UserServiceImpl implements UserService {
    @Override
    public List<User> selAllUserInfoService() throws IOException {
        //获取SqlSession对象
        InputStream is = Resources.getResourceAsStream("mybatis.xml");
        SqlSessionFactory factory=new SqlSessionFactoryBuilder().build(is);
        SqlSession session=factory.openSession();
        //获取Mapper对象
        UserMapper mapper = session.getMapper(UserMapper.class);
        //完成查询
        return mapper.selAllUserInfoMapper();
    }
}

3.5 删除用户信息功能实现

删除功能需求:

用户点击行的删除按钮,发起删除请求,将当前的行数据删除。并在当前页面中显示删除成功提示语,并重新加载用户资源。

功能实现:

① 页面功能实现:

因为点击删除后,要在当前页面中显示删除结果的提示语。所以采用ajax 技术实现。

  • 请求地址:/userDelServlet
  • 请求数据:uid
  • 响应数据:“true”|“false”

② 后台功能实现:

根据用户ID删除用户信息

3.6 更新用户信息功能实现

更新功能需求:

用户点击更新按钮,弹出更新页面,并在页面中显示要更新的用户信息。修改完成后,点击更新按钮,在当前页面中提示用户更新结果。并重新加载表格中的内容。

功能实现:

① 更新子窗口以及数据的回显

1) 点击更新按钮,弹出更新的子窗口

技能:window.open

2) 在更新窗口中回显示要更新的数据

② 更新功能实现

3.7 更新用户信息功能实现

增加的功能需求:

用户在页面中点击增加按钮,弹出用户信息增加窗口。并在窗口中输入用户信 息后点击增加完成用户信息的增加。

功能实现:

  1. 创建增加增加并完成增加窗口的效果
  2. 完成用户信息的增加

九、Maven项目java目录下的配置文件不会被编译到项目中

1. 问题

maven的项目,是由maven来进行编译的。maven会将项目编译为以前的javaSE和javaEE的结构来运行。但是maven在编译项目的时候,不会讲java目录下的配置文件编译到项目中。mapper包中除了java代码以外,还有mapper.xml文件,maven是不会将mapper.xml文件被编译到项目中的,造成项目运行失败,怎么办呢?

dc71360d249659f3361dfd20cbb470f0.png

2. 解决

我们需要告诉maven在编译项目中java代码时,在java目录下除了java代码,还有配置文件,需要将配置文件也编译到项目中使用。我们需要在项目的pom.xml文件中配置相关标签即可

3. 实现

在项目的pom.xml文件的build标签下使用resources子标签来告诉maven需要将源码中的xml文件也进行编译:

<build>
<plugins>
<plugin>
  <groupId>org.apache.tomcat.maven</groupId>
  <artifactId>tomcat7-maven-plugin</artifactId>
  <version>2.2</version>
  <configuration>
    <port>7070</port><!--配置tomcat启动的端口号-->
    <path>/ty</path><!--配置项目的访问名称-->
  </configuration>
</plugin>
</plugins>
  <!--告诉maven将项目源码中的xml文件也进行编译,并放到编译目录中-->
  <resources>
    <resource>
      <directory>src/main/java</directory>
      <includes>
        <include>**/*.xml</include>
      </includes>
      <filtering>true</filtering>
    </resource>
    <resource>
      <directory>src/main/resources</directory>
      <filtering>true</filtering>
    </resource>
  </resources>
</build>

十、使用maven打包自己的项目到本地仓库中

1. 问题

假如我们使用maven在本地同时开发两个项目,分别为项目A和项目B,项目A已经开发完成了。而我们想在项目B中使用项目A的功能,怎么办?

2. 解决

项目B是由Maven进行管理的,项目B中的资源需要通过Maven来获取,而Maven会从本地仓库中加载对应的资源给项目B使用。而本地仓库中是没有项目A的资源。那么能不能让maven讲项目A打包并上传到其自己的本地仓库中一份儿,这样其他的项目就可以通过项目A的资源坐标来获取项目A的资源来 使用了。答案是可以的。

3. 实现

注意:

  • jar类型的项目打成jar包放到maven的本地仓库中
  • war类型的项目打成war包放到maven的本地仓库中

21db49b293c4bf33d9e080f6bbb1b5d1.png

29567cdc98cd4bf6112bd0b3da4f976d.png

>>>学习交流群< < <课件,视频,项目,源码,你想要的这里都有

加群暗号“知乎”

风里雨里,我们等你~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值