1. 程式人生 > >IntelliJ IDEA maven專案 ***

IntelliJ IDEA maven專案 ***

建立一個新Maven專案

  • new 一個project

  • 不選擇任何Maven模板

  • 起個GroupId、ArifactId

  • 起個專案名。注意:Idea_Project是存放此專案的工作區間,mavenDemo_idea15為存放此專案的子目錄。

  • 建好專案後,開啟,點選Auto-Import

  • 下面為此專案的結構

專案部署

  • 點選

Project: 無需設定 (當然可點選Project complier output自定義編譯目錄)

Modules:可看到此專案無任何適配服務元件(因為是手工建立Maven,沒有選擇任何Maven模板)--因此需要我們進行新增。

  • 選擇Web(為此專案新增Web服務元件,這便是一個Web專案了)

  • 現在為Web設定資源目錄。雙擊Web Resource Directory

  • 選擇scr/main目錄

  • 在後面加上webapp。好了,點OK,Web的資源目錄便設定好了。

  • 現在設定Web的描述檔案的目錄

  • 設定在webapp目錄下

Facts: 表示當前專案的適配服務元件。可看到此專案已是一個Web專案了。

Aftifacts: 這個Aftifacts描述了當前專案釋出的資訊。現在進行新增,從Modeles中選擇。

說明:

A: 現在Artifacts已有了釋出的專案了(idea中準確的說應是Modele)

B:output root目錄描述了當前專案的編譯目錄及適配服務。

C:Output directory: 品庫的輸出目錄,可以直接輸出到TomCat 的webapps目錄下

確定之後當前專案的結構:

  • 如有需要,新增lib包

 

部署伺服器

  • 新增伺服器

  • 部署

注:很多童鞋在這裡找不到Arifact,請參考部署專案中的Modules的配置。如果沒有為專案配置Web服務元件,那麼就沒有Artifact。(當前專案連Web專案都不是,哪兒來的Artifact,又部署什麼呢?)

  • 注意下面的選擇:

編寫程式碼測試

  • 建立一個java類。可看到繼承HttpServlet出問題了--這是因為沒有把Tomcat的依賴加入Module

  • 在Modules加入Tomcat依賴

新增完畢

  • 現在按快捷鍵就可以了

  • 程式碼編輯

Java

 
package com.wql;

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;

/**
 * Created by Lenovo on 2016/2/25.
 */
@WebServlet("/myController")
public class Controller extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doPost(req, resp);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//        System.err.println("---");
        //解決亂碼
        req.setCharacterEncoding("UTF-8");
        String name=req.getParameter("name");
        req.setAttribute("name",name);
        System.out.println(name);
        req.getRequestDispatcher("index.jsp").forward(req, resp);
    }

}
 

Html

 
<%--
  Created by IntelliJ IDEA.
  User: Lenovo
  Date: 2016/2/25
  Time: 0:26
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<form action="myController" method="post">
    <input name="name">
    return:${name}
    <input value="提交" type="submit">
</form>
</body>
</html>
 

Xml

 
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
          http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
           version="3.0">
<welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>
 
  • 記得設定預設啟動瀏覽器

  • 啟動專案

 

intellij idea在執行web專案時部署的位置(tomcat)

說明一下:這裡是使用tomcat 部署成war exploded 而不是war包。

war exploded模式是直接把資料夾、jsp頁面 、classes等等移到Tomcat 部署資料夾裡面,進行載入部署。因此這種方式支援熱部署,一般在開發的時候也是用這種方式。

在平時開發的時候,使用熱部署的話,應該對Tomcat進行相應的設定,這樣的話修改的jsp介面什麼的東西才可以及時的顯示出來。

 在idea中配置的tomcat,在執行時idea不會把專案放到自己的webapps路徑下,而是複製三份檔案到 ${user.home}/.IntelliJIdea/system/tomcat 目錄下的各自專案。

 

也就是說每個專案都有屬於自己的一份tomcat配置,互不干擾。

每個專案的配置資料夾中有一個 /conf/Catalina/localhost/ROOT.xml 檔案,內容如下:

<?xml version="1.0" encoding="UTF-8"?>
<Context path="" docBase="D:\test\8\saas\trunk\SynergyWebService\target\com.synergy.demo.war" />

其中,path是指在訪問此專案時,是否需要新增額外的路徑,這個路徑是在IDEA->Run/Debug Configurations->TomcatServer->Deployment->Application context配置,也就是專案上下文。

如果現在我在Application context加上:/com.synergy.demo

Server這邊會自動加入:com.synergy.demo/

這時候,我們執行tomcat之後,在conf/Catalina/localhost就沒有ROOT.xml了,取而代之的是com.synergy.demo.xml檔案,內容如下:

<?xml version="1.0" encoding="UTF-8"?>
<Context path="/com.synergy.demo" docBase="D:\test\8\saas\trunk\SynergyWebService\target\com.synergy.demo.war" />

這時候專案的訪問路徑是:http://localhost:8080/com.synergy.demo/

docBase是指要執行的專案的部署位置,build是由gradle構建後生成的,gradle build完成之後生成的專案

整個專案執行過程是:

1、首先gradle build專案,將構建結果寫到專案的build目錄下,然後idea複製一份tomcat的conf、logs和work資料夾到${user.home}/.IntelliJIdea/system/tomcat 中。

2、啟動tomcat安裝目錄下的catalina.sh檔案,tomcat讀取配置檔案,找到專案位置,然後就執行起來了。

如果是使用tomcat 部署成是war包。

剛開始我將專案改為war部署的方式,但是執行之後tomcat中始終沒有專案的檔案。後來發現如果將當前的Application context設定為’/’,那麼

tomcat也不會將專案部署到webapps中,因為這個相當於你專案的根路徑。後來經過實踐,發現這個Application context就是你專案在webapps路徑下專案的根目錄名。 

 

建立一個新Maven專案

  • new 一個project

  • 不選擇任何Maven模板

  • 起個GroupId、ArifactId

  • 起個專案名。注意:Idea_Project是存放此專案的工作區間,mavenDemo_idea15為存放此專案的子目錄。

  • 建好專案後,開啟,點選Auto-Import

  • 下面為此專案的結構

專案部署

  • 點選

Project: 無需設定 (當然可點選Project complier output自定義編譯目錄)

Modules:可看到此專案無任何適配服務元件(因為是手工建立Maven,沒有選擇任何Maven模板)--因此需要我們進行新增。

  • 選擇Web(為此專案新增Web服務元件,這便是一個Web專案了)

  • 現在為Web設定資源目錄。雙擊Web Resource Directory

  • 選擇scr/main目錄

  • 在後面加上webapp。好了,點OK,Web的資源目錄便設定好了。

  • 現在設定Web的描述檔案的目錄

  • 設定在webapp目錄下

Facts: 表示當前專案的適配服務元件。可看到此專案已是一個Web專案了。

Aftifacts: 這個Aftifacts描述了當前專案釋出的資訊。現在進行新增,從Modeles中選擇。

說明:

A: 現在Artifacts已有了釋出的專案了(idea中準確的說應是Modele)

B:output root目錄描述了當前專案的編譯目錄及適配服務。

C:Output directory: 品庫的輸出目錄,可以直接輸出到TomCat 的webapps目錄下

確定之後當前專案的結構:

  • 如有需要,新增lib包

 

部署伺服器

  • 新增伺服器

  • 部署

注:很多童鞋在這裡找不到Arifact,請參考部署專案中的Modules的配置。如果沒有為專案配置Web服務元件,那麼就沒有Artifact。(當前專案連Web專案都不是,哪兒來的Artifact,又部署什麼呢?)

  • 注意下面的選擇:

編寫程式碼測試

  • 建立一個java類。可看到繼承HttpServlet出問題了--這是因為沒有把Tomcat的依賴加入Module

  • 在Modules加入Tomcat依賴

新增完畢

  • 現在按快捷鍵就可以了

  • 程式碼編輯

Java

 
package com.wql;

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;

/**
 * Created by Lenovo on 2016/2/25.
 */
@WebServlet("/myController")
public class Controller extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doPost(req, resp);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//        System.err.println("---");
        //解決亂碼
        req.setCharacterEncoding("UTF-8");
        String name=req.getParameter("name");
        req.setAttribute("name",name);
        System.out.println(name);
        req.getRequestDispatcher("index.jsp").forward(req, resp);
    }

}
 

Html

 
<%--
  Created by IntelliJ IDEA.
  User: Lenovo
  Date: 2016/2/25
  Time: 0:26
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<form action="myController" method="post">
    <input name="name">
    return:${name}
    <input value="提交" type="submit">
</form>
</body>
</html>
 

Xml

 
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
          http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
           version="3.0">
<welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>
 
  • 記得設定預設啟動瀏覽器

  • 啟動專案

 

intellij idea在執行web專案時部署的位置(tomcat)

說明一下:這裡是使用tomcat 部署成war exploded 而不是war包。

war exploded模式是直接把資料夾、jsp頁面 、classes等等移到Tomcat 部署資料夾裡面,進行載入部署。因此這種方式支援熱部署,一般在開發的時候也是用這種方式。

在平時開發的時候,使用熱部署的話,應該對Tomcat進行相應的設定,這樣的話修改的jsp介面什麼的東西才可以及時的顯示出來。

 在idea中配置的tomcat,在執行時idea不會把專案放到自己的webapps路徑下,而是複製三份檔案到 ${user.home}/.IntelliJIdea/system/tomcat 目錄下的各自專案。

 

也就是說每個專案都有屬於自己的一份tomcat配置,互不干擾。

每個專案的配置資料夾中有一個 /conf/Catalina/localhost/ROOT.xml 檔案,內容如下:

<?xml version="1.0" encoding="UTF-8"?>
<Context path="" docBase="D:\test\8\saas\trunk\SynergyWebService\target\com.synergy.demo.war" />

其中,path是指在訪問此專案時,是否需要新增額外的路徑,這個路徑是在IDEA->Run/Debug Configurations->TomcatServer->Deployment->Application context配置,也就是專案上下文。

如果現在我在Application context加上:/com.synergy.demo

Server這邊會自動加入:com.synergy.demo/

這時候,我們執行tomcat之後,在conf/Catalina/localhost就沒有ROOT.xml了,取而代之的是com.synergy.demo.xml檔案,內容如下:

<?xml version="1.0" encoding="UTF-8"?>
<Context path="/com.synergy.demo" docBase="D:\test\8\saas\trunk\SynergyWebService\target\com.synergy.demo.war" />

這時候專案的訪問路徑是:http://localhost:8080/com.synergy.demo/

docBase是指要執行的專案的部署位置,build是由gradle構建後生成的,gradle build完成之後生成的專案

整個專案執行過程是:

1、首先gradle build專案,將構建結果寫到專案的build目錄下,然後idea複製一份tomcat的conf、logs和work資料夾到${user.home}/.IntelliJIdea/system/tomcat 中。

2、啟動tomcat安裝目錄下的catalina.sh檔案,tomcat讀取配置檔案,找到專案位置,然後就執行起來了。

如果是使用tomcat 部署成是war包。

剛開始我將專案改為war部署的方式,但是執行之後tomcat中始終沒有專案的檔案。後來發現如果將當前的Application context設定為’/’,那麼

tomcat也不會將專案部署到webapps中,因為這個相當於你專案的根路徑。後來經過實踐,發現這個Application context就是你專案在webapps路徑下專案的根目錄名。