前言
Java從大二開始學習到現在大四也有差不多兩年了,但是由於之前一直在玩,沒有認真學過,直到現在才開始重新學習。也是很湊巧,看到了黃勇老師的《架構探險》,於是便開始學習寫Java Web框架。
1.開發工具
《架構探險》書中提到說IntelliJ IDEA(簡稱IDEA)是業界最牛的Java開發工具,但是它有兩個版本,一個社區版不花錢,屬於開源的個人版,但是功能不全面,另一個是完全版,屬於收費的企業版,功能全面。於是我本着要用就用最好的的宗旨,毅然下載了收費版的,在安裝過程中也發現了這款開發工具的一個小Bug,因為這個工具收費版有30天的試用期,我們可以在安裝之前把電腦系統時間修改到推后半年,比如現在是2016年12月,我們可以改成2017年6月,這樣安裝完成后它的試用期就會到2017年7月,之后先關閉軟件再把系統時間改回來就OK了,它的試用期依然是2017年7月。
之后的安裝過程就比較簡單了,提醒一點的是,最好不要改的太多,推后的時間在一年之內,超過一年安裝會有報錯。
2.做一個小項目
在開始正式工作之前,先做一個Hello World(好像所有開發都離不開這一步)。一是熟悉一下Maven,二是復習一下Servlet和JSP。開始!!!
1.創建一個Maven的項目
Maven 是一個項目管理和構建自動化工具。不過對於程序員而言,更看重它的項目構建功能。但是對於使用IDEA作為開發工具,也不用單獨下載、配置Maven,因為IDEA默認將其整合了。使用IDEA創建Maven項目很簡單:
a.點擊右上角工具欄的File/New/Project。
b.在彈出框選擇Maven,然后Next。
c.在接下來的窗口中,這三個是必填的,很重要的東西。GroupId建議為網站域名的倒排方式,確保唯一性,類似於Java的包名;ArtifactId是模塊名稱,這個自行起名。
d.繼續Next,輸入Project name,然后Finish。
到此,Maven項目就創建完成了。
2.配置Maven
打開Maven配置文件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>org.smart4j</groupId> <artifactId>chapter1</artifactId> <version>1.0.0</version> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> </properties> <build> <plugins> <!-- Compile --> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId> maven-compiler-plugin</artifactId> <version>3.3</version> <configuration> <source>1.8</source> <target>1.8</target> </configuration> </plugin> <!-- Test --> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> <version>2.18.1</version> <configuration> <skipTests>true</skipTests> </configuration> </plugin> <!-- Tomcat --> <plugin> <groupId>org.apache.tomcat.maven</groupId> <artifactId>tomcat7-maven-plugin</artifactId> <version>2.2</version> <configuration> <path>/${project.artifactId}</path> </configuration> </plugin> </plugins> </build> <packaging>war</packaging> <dependencies> <!-- Servlet --> <dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <version>3.1.0</version> <scope>provided</scope> </dependency> <!-- JSP --> <dependency> <groupId>javax.servlet.jsp</groupId> <artifactId>jsp-api</artifactId> <version>2.2</version> <scope>provided</scope> </dependency> <!-- JSTL --> <dependency> <groupId>javax.servlet</groupId> <artifactId>jstl</artifactId> <version>1.2</version> <scope>runtime</scope> </dependency> </dependencies> </project>
首先是配置編碼格式為UTF-8:
<properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding></properties>
然后配置JDK為1.8(這個看個人,因為我電腦里JDK版本為1.8)和Tomcat為7:
<build> <plugins> <!-- Compile --> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId> maven-compiler-plugin</artifactId> <version>3.3</version> <configuration> <source>1.8</source> <target>1.8</target> </configuration> </plugin> <!-- Test --> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> <version>2.18.1</version> <configuration> <skipTests>true</skipTests> </configuration> </plugin> <!-- Tomcat --> <plugin> <groupId>org.apache.tomcat.maven</groupId> <artifactId>tomcat7-maven-plugin</artifactId> <version>2.2</version> <configuration> <path>/${project.artifactId}</path> </configuration> </plugin> </plugins> </build>
再然后配置打包類型為war包:
<packaging>war</packaging>
最后配置Servlet、JSP、JSTL(Maven三坐標必須提供,之后的Servlet和JSP因為Tomcat自帶有相應的jar包,故scope設置為provided;而JSTL是在運行時需要,編譯時不需要,故scope設置為runtime):
<dependencies> <!-- Servlet --> <dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <version>3.1.0</version> <scope>provided</scope> </dependency> <!-- JSP --> <dependency> <groupId>javax.servlet.jsp</groupId> <artifactId>jsp-api</artifactId> <version>2.2</version> <scope>provided</scope> </dependency> <!-- JSTL --> <dependency> <groupId>javax.servlet</groupId> <artifactId>jstl</artifactId> <version>1.2</version> <scope>runtime</scope> </dependency> </dependencies>
到此,Maven的配置也完成了(確實比Eclipse之類的配置簡單的多)。
3.轉換為Java Web項目
只需3步,輕松搞定,
a.在main目錄下新建webapp目錄。
b.在webapp目錄下新建WEB-INF目錄。
c.在WEB-INF目錄下新建web.xml。
此時,屏幕右下角會有個提示:
那么表示,web項目已經創建完成。
4.編寫Servlet類和JSP頁面
在main目錄下的java目錄下新建包,包名,然后新建一個Servlet(HelloServlet),該Servlet負責頁面跳轉,並且將當前時間轉換為標准格式傳遞到頁面當中。(在這里有一點,我照着黃勇老師的步驟在Servlet頁面跳轉時候的路徑是"/WEB-INF/jsp/hello.jsp",但是頁面一直報錯提示404,后來我查找資料才找到,頁面不能寫在"/WEB-INF"目錄下,於是改成下面這個樣子就可以顯示了):
package org.smart4j.chapter1;
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.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
@WebServlet("/hello")
public class HelloServlet extends HttpServlet{
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String currentTime = dateFormat.format(new Date());
req.setAttribute("currentTime", currentTime);
req.getRequestDispatcher("/jsp/hello.jsp").forward(req, resp);
}
}
之后新建一個負責顯示的JSP頁面,該頁面接收Servlet傳遞過來的參數並通過JSTL表達式顯示:
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>Hello</title> </head> <body> <h1>Hello!</h1> <h2>當前時間為:${currentTime}</h2> </body> </html>
5.配置Tomcat
寫好頁面和Servlet之后就需要配置一個服務器,把寫的東西在可以展示出來。在這里肯定是要配置Tomcat服務器了:
a.點擊右上角工具欄中的“Edit Configurations...”(這是一個下拉框)。
b.點擊左上角的“+”按鈕,選擇“Tomcat Server/Local”。
c.Name自己起個名字,然后去掉勾選的After launch。
d.點擊Application server右邊的“Configure...”按鈕,配置Tomcat(這個會自動幫你尋找你電腦上的Tomcat)。
e.切換到Deployment選項卡,點擊右側“+”按鈕,選擇“Artifact...”選項,在彈出框中選擇“項目名:war exploded”,點擊OK,然后在Application context中輸入項目名。
f.切換回Server選項卡,在On frame deactivation下拉框選擇“Update resources”選項,點擊OK。
到此,Tomcat配置完成。
6.上傳到git
我照着書上的方法上傳時候一直提示錯誤:“fatal: The current branch master has no upstream branch.”。后來我又重新從git上先clone下來,然后把倉庫導入項目根目錄下 之后才正常提交,可能是我操作有問題,但是我也一直沒有找到問題在哪兒,只好用最笨的方法了。。。。。