Eclipse完成Maven + Spring Boot + Mybatis + jsp


Spring Boot 完成WEB項目開發

開發工具:eclipse

框架:Maven;Spring Boot;Mybatis

界面:jsp;javascript;css

 

前言:

  在SpringBoot的學習中,遇到很多問題,也在網上找過許多文檔,但大多數都是使用IDE開發工具完成的,所以在此記錄使用Eclipse開發工具完成的SpringBootWeb項目。

  感謝在學習中看到過的文章的作者們,讓我學習少走許多彎路。

一、  Eclipse關聯Maven

  1. 首先下載Maven,將Maven放置在除開C盤的任意盤中。
  2. 修改Maven的settings.xml文件,該文件的目錄在*/Maven/conf
  3. 在settings.xml中配置本地倉庫。如圖:

 

    apache-maven-3.2.1是我的Maven文件夾,解壓后懶得改了。。。

    maven_repository就是我的本地倉庫,以后從maven新下載的包都會放到這個本地倉庫中。

    settings.xml已經有loaclRepository標簽,不過被注釋了,只需要找到修改完並打開注釋即可

    4. 修改settings.xml中配置阿里雲鏈接。如圖:

 

    同樣,找到mirrors標簽,按圖中配置修改即可。這個配置是為了提高查找源碼或下載包時的速度,原配置中是連接國外的服務器,相對而言十分慢。

    5. 在eclipse中加入Maven的關聯

    在window-preferences-maven中添加Maven的關聯

 

    修改settings.xml的關聯。查看本地倉庫是否正確。

 

    以上5步就已經將eclipse和maven關聯起來了。

二、  使用Maven創建Spring Boot Web 項目

  1. 創建Maven項目

    1.1、    點擊File – New – Other,選中Maven

 

 

    1.2、    然后點擊Next,進入Maven Project,默認選項,點擊Next

    1.3、    選中web項目,點擊Next如圖:

 

 

    1.4、    填寫項目基本數據

 

 

      這里的工作空間已經擁有了MyMavenSpringBootWeb項目,所以出現報錯且不能創建。

    2.構建SpringBoot的目錄結構

    創建出來的SpringBoot目錄可能會有所缺失,所以我們將其補全

 

    在main包下面添加resources和webapp包,分別用於放置配置文件和web界面

    3. 修改pom.xml,引入SpringBoot的相關配置

<?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>cn.com</groupId>

  <artifactId>MyMavenSpringBootWeb</artifactId>

  <version>0.0.1-SNAPSHOT</version>

  <packaging>war</packaging>

 

  <name>MyMavenSpringBootWeb 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>

    <maven.compiler.source>1.7</maven.compiler.source>

    <maven.compiler.target>1.7</maven.compiler.target>

  </properties>

 

 

  <!-- Spring Boot父依賴 -->

  <parent>

   <groupId>org.springframework.boot</groupId>

   <artifactId>spring-boot-starter-parent</artifactId>

   <version>1.5.9.RELEASE</version>

  </parent>

 

  <dependencies>

    <dependency>

      <groupId>junit</groupId>

      <artifactId>junit</artifactId>

      <version>4.11</version>

      <scope>test</scope>

    </dependency>

   

   <!-- Spring Boot web依賴 -->

   <dependency>

      <groupId>org.springframework.boot</groupId>

      <artifactId>spring-boot-starter-web</artifactId>

   </dependency>

 

   <!-- Spring Boot 熱部署 -->

   <dependency>

      <groupId>org.springframework.boot</groupId>

      <artifactId>spring-boot-devtools</artifactId>

   </dependency>

 

    <!-- 引入thymelaf 則不需要引入web依賴,若不需要thymelaf則需要添加spring-boot-starter-web -->

    <dependency>

        <groupId>org.springframework.boot</groupId>

        <artifactId>spring-boot-starter-thymeleaf</artifactId>

    </dependency>

     

    <dependency>

      <groupId>org.springframework.boot</groupId>

      <artifactId>spring-boot-starter-test</artifactId>

    </dependency>

   

    <!-- mybatis依賴 -->

    <dependency>

        <groupId>org.mybatis.spring.boot</groupId>

        <artifactId>mybatis-spring-boot-starter</artifactId>

        <version>1.3.1</version>

    </dependency>

 

   <!-- tomcat的支持. -->

   <dependency>

      <groupId>org.springframework.boot</groupId>

      <artifactId>spring-boot-starter-tomcat</artifactId>

      <scope>provided</scope>

   </dependency>

 

   <!-- 訪問JSP頁面必須配置 -->

   <dependency>

      <groupId>org.apache.tomcat.embed</groupId>

      <artifactId>tomcat-embed-jasper</artifactId>

      <scope>provided</scope>

   </dependency>

  

   <!-- jspservlet容器的支持 -->

   <dependency>

      <groupId>javax.servlet</groupId>

      <artifactId>javax.servlet-api</artifactId>

   </dependency>

  

   <!-- 解析jsp頁面,跳轉所需配置 -->

   <dependency>

      <groupId>javax.servlet</groupId>

      <artifactId>jstl</artifactId>

   </dependency>

  </dependencies>

 

 

  <build>

    <finalName>MyMavenSpringBootWeb</finalName>

<pluginManagement>

<!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) -->

      <plugins>

      <!--springframework插件配置 -->

      <plugin>

         <groupId>org.springframework.boot</groupId>

         <artifactId>spring-boot-maven-plugin </artifactId>

      </plugin>

     

        <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>

 

 

    Pom配置文件配置好后,選中項目右鍵-Maven-Update Project下載jar包

    想要正確的訪問到jsp界面,我們需要將項目的打包方式改war,即<packaging>標簽

    4. 配置properties文件

#數據庫配置

spring.datasource.url=jdbc:mysql://localhost:3306/my_local_sql

spring.datasource.username=root

spring.datasource.password=root

#spring.datasource.driverClassName=com.mysql.jdbc.Driver

spring.datasource.max-active=20

spring.datasource.max-idle=8

spring.datasource.max-maxWait=100

spring.datasource.min-idle=8

spring.datasource.initial-size=10

spring.session.store-type=none

#mybatis.mapper-locations=classpath:/mybatis/*Mapper.xml

 

#jsp訪問路徑

spring.mvc.view.suffix=.jsp

spring.mvc.view.prefix=/WEB-INF/jsp/

 

#關閉默認模板引擎

spring.thymeleaf.cache=false

spring.thymeleaf.enabled=false

 

 

三、  編寫代碼

  1. 編寫啟動類

import org.mybatis.spring.annotation.MapperScan;

import org.springframework.boot.SpringApplication;

import org.springframework.boot.autoconfigure.SpringBootApplication;

import org.springframework.boot.builder.SpringApplicationBuilder;

import org.springframework.boot.web.support.SpringBootServletInitializer;

 

// 該注解的作用是:排除自動注入數據源的配置(取消數據庫配置),一般使用在客戶端(消費者)服務中

// 消費者是微服務的概念;消費者指的是客服端,服務者指的是服務端

//@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class})

// 當作為服務端時,需要去掉排除,我們使用的myBatis需要注入數據源的配置,而數據源的配置就是該工程的application.properties

@SpringBootApplication

@MapperScan(basePackages = {"cn.com.service","cn.com.mapper"})

public class MyFirstApplication extends SpringBootServletInitializer{

   public static void main(String[] args) throws Exception {

      SpringApplication.run(MyFirstApplication.class, args);

   }

  

    @Override

    protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {

        // 注意這里要指向原先用main方法執行的Application啟動類

        return builder.sources(MyFirstApplication.class);

    }

}

    啟動類命名均以*Application格式,文件同時放在根目錄中,如圖:


    到這一步,Spring Boot Wed項目基本上已經配置好了。然后加入service、訪問數據看的mapper、控制界面的controller和實體類的entity

    2. 編寫Mapper接口

import java.util.List;

 

import org.springframework.stereotype.Repository;

 

import cn.com.entity.MyFirstEntity;

 

@Repository

public interface MyFirstMapper {

 

   public List<MyFirstEntity> crateEntity() ;

}

    這里的Mapper需要用@Repository標簽來聲明

   3. 編寫serivce接口和實現類

import java.util.List;

 

import cn.com.entity.MyFirstEntity;

 

public interface MyFirstService {

 

   public List<MyFirstEntity> crateEntity() ;

}

 

import java.util.ArrayList;

import java.util.List;

 

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.stereotype.Service;

 

import cn.com.entity.MyFirstEntity;

import cn.com.mapper.MyFirstMapper;

import cn.com.service.MyFirstService;

 

@Service("firstService1")

public class MyFirstServiceImpl implements MyFirstService {

     

      @Autowired

      private MyFirstMapper myFirstMapper ;

 

      @Override

      public List<MyFirstEntity> crateEntity() {

//         List<MyFirstEntity> list = myFirstDao.crateEntity() ;

           MyFirstEntity firstEntity = new MyFirstEntity() ;

           firstEntity.setId("1") ;

           firstEntity.setName("One") ;

          

           MyFirstEntity secondEntity = new MyFirstEntity() ;

           secondEntity.setId("2") ;

           secondEntity.setName("Second") ;

          

           List<MyFirstEntity> list = new ArrayList<MyFirstEntity>() ;

           list.add(firstEntity) ;

           list.add(secondEntity) ;

          

           return list ;

      }

}

    @Service聲明service類,firstService1是給該類的一個別名。

    @Autowired為自動裝載的標簽,裝載類的名字默認為被裝載類型的首字母小寫,如文中的myFirstMapper

    4. Entity實體類的編寫

public class MyFirstEntity {

  

   private String id;

   private String name;

  

  

   public String getId() {

      return id;

   }

   public void setId(String id) {

      this.id = id;

   }

   public String getName() {

      return name;

   }

   public void setName(String name) {

      this.name = name;

   }

}

 

    5. 編寫Controller

import java.util.List;

 

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.stereotype.Controller;

import org.springframework.web.bind.annotation.RequestMapping;

 

import cn.com.entity.MyFirstEntity;

import cn.com.service.MyFirstService;

 

@Controller

public class MyFirstController {

  

   @Autowired

   private MyFirstService firstService1 ;

  

   @RequestMapping("/hello")

   public String start(){

     

      List<MyFirstEntity> list = firstService1.crateEntity() ;

      int size = list.size() ;

     

      System.out.println("后台測試成功!" + size);

     

        return "hello";

   }

}

    @Controller  Spring默認返回view對象,在使用html界面時完全沒有問題

    當界面換成使用jsp時,需要做些配置,首先是pom.xml的配置。

    加入spring-boot-starter-web依賴,SpringBoot有默認的模板引擎,若使用jsp需要禁用默認的模板引擎,所以需要該依賴;

    加入spring-boot-starter-tomcat依賴,本次案例是基於外部tomcat完成,

    所以加入tomcat依賴,注意這里的依賴需要使用<scope>provided</scope>標簽;

    加入tomcat-embed-jasper依賴,訪問jsp不需要的依賴;

    加入jstl依賴,解析jsp頁面,跳轉所需配置;

    在application.properties配置文件中加入spring.thymeleaf.cache=false和spring.thymeleaf.enabled=false

    起到禁用默認模板引擎的作用;

    如果controller需要分會實體,如Json則使用@ResponseBoby標簽,才能使頁面具體展示,否則會

    報 Error resolving template "hello", template might not exist or might not be accessible by any of the configured Template Resolvers的錯誤

    @RestContreller標簽內含了@Contreller和@ResponseBoby標簽。所以一般使用該標簽來代替其余兩標簽

    @RequestMapping能讓程序在url中找到對應的controller,而該標簽還能在文件名中進行定義。

    如我在MyFirstController上加@RequestMapping(“/test”),那么訪問路徑就是localhost:8080/MyMavenSpringBootWeb/test/hello。

    6. 編寫jsp

<%@ page language="java" contentType="text/html; charset=utf-8"

    pageEncoding="utf-8"%>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>

   <head>

      <meta http-equiv="Content-Type" content="text/html; charset=utf-8">

      <title>Insert title here</title>

   </head>

   <body>

      Hello Spring Boot Project

   </body>

</html>

    jsp默認放在webapp-WEB-INF文件夾下,這里編寫jsp時需要注意下application.preperties中的配置,如此次的項目jsp文件在/WEB-INF/jsp/的文件夾下。

四、  運行

    接下來的運行就如普通的web開發一樣,將項目加入到tomcat運行

 

 

 

 

    出現上圖就代表啟動成功了,典型的SpringBoot啟動啊。

    接下來就是直接進行訪問了。上圖

 

 

五、  后語

    翻閱了許多資料,發現不少博客里都有不需要項目名就能訪問jsp界面的。但這些例子大多都是用IDE開的工具完成。

    IDE和Eclipse還是有很多不同,這里說說個人是怎么完成不需要項目名直接訪問界面的。

    首先Eclipse項目部署tomcat后,會在原項目文件下生成一個Server文件夾。打開該文件夾可以看到server.xml。

    我的方法就是直接修改這個文件,找到Context標簽,將該標簽里的屬性path值清空即可。

 

    至於怎么將端口去掉也能完成訪問就需要后續研究了。。。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM