Maven--搭建Web專案

BtWangZhi發表於2017-08-19

1 之前搭專案一直都是採用新增架包的形式,學了一下Maven,嘗試採用Maven搭Web專案。
將Dao層和Service層和Controller分層,分到三個不同的專案中,通過依賴來連線三個不同的層次。

2 Dao層,即資料訪問層,建立一個Maven專案
2.1 生成Maven專案
這裡寫圖片描述
這裡寫圖片描述
這裡寫圖片描述
填寫說明:Group Id為專案名稱,而Artifact ID為子專案名稱。比如Spring即為Group Id,而Artifact ID為spring-context,即主從的關係。版本自己定義。Package為幫助你提前生成一個包。可隨意填寫,生成後可更改。
2.2 Finish後會看到如下的專案結構
這裡寫圖片描述
2.3 更改jdk版本,預設生成的不知道是啥編譯版本,改成自己想要的版本
這裡寫圖片描述
2.4 建立配置檔案資料夾
這裡寫圖片描述
放在該下的配置檔案均用classpath:來訪問。並且部署後apache-tomcat-8.0.35\webapps\user-web\WEB-INF\classes下。
生成檔案目錄如下:
這裡寫圖片描述
pom中新增設計到的架包

<dependencies>
    <!-- Mybatis-->
    <dependency>
        <groupId>org.mybatis</groupId>
        <artifactId>mybatis</artifactId>
        <version>3.4.4</version>
    </dependency>

    <!-- Spring -->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context</artifactId>
        <version>4.3.10.RELEASE</version>
    </dependency>

    <!-- 日誌 -->
    <dependency>
        <groupId>log4j</groupId>
        <artifactId>log4j</artifactId>
        <version>1.2.17</version>
    </dependency>

    <!-- 測試 -->
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.12</version>
        <scope>test</scope>
    </dependency>
  </dependencies>

Mapper.xml檔案:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "mybatis-3-mapper.dtd" >
<mapper namespace="com.text.dao.UserMapper" >
  <resultMap id="BaseResultMap" type="com.text.pojo.User" >
    <id column="id" property="id" jdbcType="INTEGER" />
    <result column="name" property="name" jdbcType="VARCHAR" />
    <result column="password" property="password" jdbcType="VARCHAR" />
  </resultMap>
  <sql id="Base_Column_List" >
    id, `name`, `password`
  </sql>
<select id="selectByExample" resultMap="BaseResultMap" parameterType="com.text.pojo.UserExample" >
    select
    <if test="distinct" >
      distinct
    </if>
    <include refid="Base_Column_List" />
    from `user`
    <if test="_parameter != null" >
      <include refid="Example_Where_Clause" />
    </if>
    <if test="orderByClause != null" >
      order by ${orderByClause}
    </if>
  </select>

對映的介面:

package com.text.dao;

import com.text.pojo.User;
import com.text.pojo.UserExample;

import java.util.List;

import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.session.RowBounds;
import org.springframework.stereotype.Repository;
@Repository
public interface UserMapper {
     /**
     * 批量條件查詢
     * 引數:查詢條件,null查整張表
     * 返回:物件集合
     * @ibatorgenerated 2017-02-07 23:33:19
     */
    List<User> selectByExample(UserExample example);
}

實體:

package com.text.pojo;
import java.io.Serializable;
public class User implements Serializable {

    private Integer id;

    private String name;

    private String password;
    //get set 省略

3 Service層
和上面一樣,均生成一個Maven專案
pom.xml

<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.java.1234.user</groupId>
  <artifactId>user-service</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <packaging>jar</packaging>
  <name>user-service</name>
  <url>http://maven.apache.org</url>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  </properties>

  <dependencies>

    <!-- 依賴本地的Dao層專案 -->
    <dependency>
        <groupId>com.java.1234.user</groupId>
        <artifactId>user-dao</artifactId>
        <version>0.0.1-SNAPSHOT</version>
    </dependency>

    <!-- 測試 -->
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.12</version>
      <scope>test</scope>
    </dependency>

  </dependencies>
</project>

Service依賴Dao成中的類,所以要在pom.xml中引用
這裡寫圖片描述
Service中的新增兩個包:一個com.text.service.impl.user,一個com.text.service.user

package com.text.service.user;

import java.util.List;

import com.text.pojo.User;

public interface UserService {

    /**
     * 根據使用者條件進行查詢
     */
    public List<User> getUserInfoByCondition(User user);
}

package com.text.service.impl.user;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.text.dao.UserMapper;
import com.text.pojo.User;
import com.text.pojo.UserExample;
import com.text.pojo.UserExample.Criteria;
import com.text.service.user.UserService;
@Service
public class UserServiceImpl implements UserService{

    @Autowired
    private UserMapper userMapper;

    /**
     * 根據使用者條件進行查詢
     */
    public List<User> getUserInfoByCondition(User user){
        UserExample example=new UserExample();
        Criteria criteria=example.createCriteria();
        criteria.andNameEqualTo(user.getName());
        criteria.andPasswordEqualTo(user.getPassword());
        return userMapper.selectByExample(example);
    }
}

4 Controller層,生成Maven專案和上面有點不一樣,在第三步的位置
這裡寫圖片描述
生成專案後替換兩個檔案
這裡寫圖片描述
pom.xml中引入需要的架包,通過新增Service層依賴包,如下只貼的部分程式碼:

<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/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.java.1234.user</groupId>
  <artifactId>user-web</artifactId>
  <packaging>war</packaging>
  <version>0.0.1-SNAPSHOT</version>
  <name>user-web</name>
  <url>http://maven.apache.org</url>
  <dependencies>
    <!-- Server層依賴-->
    <dependency>
        <groupId>com.java.1234.user</groupId>
        <artifactId>user-service</artifactId>
        <version>0.0.1-SNAPSHOT</version>
    </dependency>

  </dependencies>
  <build>
    <finalName>user-web</finalName>
  </build>
</project>

這裡寫圖片描述
建立resources資料夾存放配置檔案,如spring-mvc.xml和applicationContext.xml
建立com.text.controller.user包,新增一個控制類:

@RequestMapping("/user")
@Controller
public class UserController {

    @Autowired
    private UserService userService;

    /**
     * 驗證登入
     * @param response
     * @param request
     * @param user
     * @throws IOException
     */
    @RequestMapping("/login")
    public String login(HttpServletResponse response,HttpServletRequest request,User user) throws IOException{
        List<User> lstUser=userService.getUserInfoByCondition(user);
        if(lstUser!=null&&lstUser.size()>0){
            request.setAttribute("message", "success");
        }else{
            request.setAttribute("message", "error");
        }
        return "index";
    }
}

index.jsp頁面:

<body>
    <form  id="form01" action="<%=basePath %>user/login.html" enctype="multipart/form-data" >
        <input type="text" name="name" id="name"/> 
        <input type="password" name="password" id="password"/>
        <input type="submit" value="確認">
    </form>
    ${message }
  </body>

效果:
這裡寫圖片描述
附出現的警告及報錯:
警告:Establishing SSL connection without server’s identity verification is not recommended.
解決方案:在mysql連線字串url中加入ssl=true或者false即可,如下所示。
url=jdbc:mysql://127.0.0.1:3306/framework?characterEncoding=utf8&useSSL=true
參考:https://zhidao.baidu.com/question/2056521203295428667.html

applicationContext.xml報錯:The reference to entity “useSSL” must end with the ‘;’ delimiter.
連線jdbc時,路徑連結引數之前一直是使用&符號連線,但是這次卻 提示用;來進行連線,wtf!
於是 按照編譯器的提示 我把&改為;,於是 執行 起來它把兩個引數 當做了一個引數,OhMyGod!
在沒頭沒腦的一番探索後,終於發現問題,在xml檔案中 &符號 需要轉義 這個根據 HTML 的轉義規則 更改就行
& -> & 於是便解決了
如:jdbc:mysql://127.0.0.1:3306/test?characterEncoding=utf8&useSSL=true
參考:http://www.zhimengzhe.com/shujuku/MySQL/282953.html
下載位置:http://download.csdn.net/download/btwangzhi/9941189
學習自某java1234網站.

相關文章