一,搭建JDK開發環境
1,在Java官網下載Jdk軟件包,我的系統是64位Ubuntu14.04,所以選擇jdk-8u25-linux-x64.tar.gz。
2,解壓Jdk軟件包
tar xvzf jdk-8u25-linux-x64.tar.gz
3,使用管理員權限拷貝解壓的文件夾到/usr/lib/jvm目錄下,無需安裝
sudo cp -r jdk1.8.0_25 /usr/lib/jvm/
4,設置環境變量,在/etc/profile的后面添加如下內容,然后輸入 source /etc/profile,當然重啟的話也會重新加載的
#set java environment export JAVA_HOME=/usr/lib/jvm/jdk1.8.0_25 export JRE_HOME=${JAVA_HOME}/jre export CLASSPATH=./:${JAVA_HOME}/lib:${JRE_HOME}/lib export PATH=${JAVA_HOME}/bin:$PATH
5,在shell中輸入java -version,得到如下結果說明安裝成功
注:后面在切換到root賬戶下時使用javac彈出openjdk未安裝的錯誤提示,原因是前面設置的環境變量對root賬戶無效
6,下面設置root賬戶的環境變量,在/etc/environment文件中做如下修改
在$PATH末尾添加
:/usr/lib/jvm/jdk1.8.0_25/bin,如下所示:
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/usr/lib/jvm/jdk1.8/bin
在文件末尾加入第4步中的三條語句設置三個環境變量
export JAVA_HOME=/usr/lib/jvm/jdk1.8 export JRE_HOME=${JAVA_HOME}/jre export CLASSPATH=./:${JAVA_HOME}/lib:${JRE_HOME}/lib:/home/yxl/download/tomcat/lib/servlet-api.jar export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/usr/lib/jvm/jdk1.8/bin
輸入如下語句使修改的環境變量立即生效而不用重啟
source /etc/environment
再次輸入java -version,得到如下結果說明修改成功
注:關於修改環境變量的一個發現就是,雖然修改了/etc/profile和/etc/environment,在重啟后重新登錄bash時,對於 root賬戶該環境變量依然無效,可以利用source命令對配置文件進行更新,但是每次進入root賬戶都得這樣太麻煩了,一個技巧就是將所有對環境變 量的修改添加到.bashrc文件中,這樣在每次bash登錄時就會自動加載了,一勞永逸。我的.bashrc文件末尾如下圖所示,對於PATH采用的是具體路徑指定,沒有將$PATH本身作為右值的一部分,這樣是為了避免重復。最后面的CATALINA_HOME環境變量是tomcat的安裝路徑:
export JAVA_HOME=/usr/lib/jvm/jdk1.8 export JRE_HOME=${JAVA_HOME}/jre export CLASSPATH=./:${JAVA_HOME}/lib:${JRE_HOME}/lib:/home/yxl/download/tomcat/lib/servlet-api.jar export PATH=.:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/usr/lib/jvm/jdk1.8/bin export CATALINA_HOME=/home/yxl/download/tomcat/
二,安裝JSP容器tomcat
tomcat可以與Apache共同搭建Web服務器,Apache負責靜態HTML文件,tomcat負責解析JSP文件,也可以單獨使用,這里為了學習JSP的開發,單純使用tomcat就足夠了。
1,從官網http://tomcat.apache.org/下載最新版的tomcat,現在的最新版為8.0
2,解壓下載的軟件包
tar xvzf apache-tomcat-8.0.14.tar.gz
3,進入解壓文件下的bin目錄,可執行文件startup.sh和shutdown.sh分別用於啟動和關閉tomcat服務器。
4,啟動后在瀏覽器中輸入localhost:8080/,得到如下界面說明啟動成功(tomcat默認使用8080端口),網頁默認根目錄位於解壓文件下的:xxx/webapps/ROOT/index.html
5,測試JSP運行
在tomcat網頁根目錄webapps/ROOT/下新建test目錄,並在test目錄下新建如下JSP文件,命名為test.jsp
xxx/tomcat_install_dir/webapps/test/test.jsp

1 <html>
2 <body>
3 <center>
4 Now time is: <%=new java.util.Date()%>
5 </center>
6 </body>
7 </html>
在瀏覽器中輸入localhost:8080/test/test.jsp,得到如下頁面說明運行成功
三,搭建Servlet環境
1,修改環境變量CLASSPATH,在末尾添加servlet-api.jar的路徑,CLASSPATH修改后的內容如下:(我的tomcat解壓文件被重命名為tomcat,根據tomcat解壓路徑不同,添加的內容也不同)
如果不添加如上內容,不能正常編譯Servlet類,編譯時出現如下錯誤:
四,測試Servlet開發環境
1,Servlet開發簡介
Servlet是運行在Web服務器上的Java程序,它讀取瀏覽器發出的HTTP請求,生成結果,並向瀏覽器發送文檔,一般是HTML格式。
Servlet開發時遵循一定的目錄規則,在webapps下,我們新建自己開發用的項目文件夾xxx/tomcat/webapps/test,所有的文件都在該文件夾及其子目錄下。為了能夠正常運行Servlet程序,我們需要新建xxx/tomcat/webapps/test/WEB-INF子目錄,在WEB-INF目錄下新建xxx/tomcat/webapps/test/WEB-INF/classes子文件夾,用於存放我們編寫的Servlet類的編譯結果,為了方便,我們將編寫的.java源程序也放在該目錄下。在實際部署時,有多種方式,例如將生成的類打包成jar格式,那么jar格式的文檔需要放置在另一個需要新建的子目錄xxx/tomcat/webapps/test/lib下。
web.xml用於向Tomcat注冊我們編寫的Servlet類,可以將xxx/tomcat/webapps/ROOT/WEB-INF/web.xml拷貝到我們的xxx/tomcat/webapps/test/WEB-INF/目錄下。web.xml示例代碼及元素介紹見下一步。注意,如果沒有此web.xml文件以及加入對應的類注冊信息,在瀏覽器中輸入URL后會出現404 NOT FOUND 錯誤。
2,測試不使用包的Servlet
示例代碼:
a,xxx/tomcat/webapps/test/WEB-INF/classes/HelloServlet.java,編譯后的文件為xxx/tomcat/webapps/test/classes/HelloServlet.class

1 import java.io.*; 2 import javax.servlet.*; 3 import javax.servlet.http.*; 4
5 public class HelloServlet extends HttpServlet 6 { 7 public void doGet(HttpServletRequest request, 8 HttpServletResponse response) 9 throws ServletException, IOException 10 { 11 response.setContentType("text/html"); 12 PrintWriter out = response.getWriter(); 13 out.println("<html><head><title>head</title></head><body><h1>Hello Servlet</h1></body></html>"); 14 } 15 }
b,xxx/tomcat/webapps/test/WEB-INF/web.xml

1 <?xml version="1.0" encoding="ISO-8859-1"?>
2 <!--
3 Licensed to the Apache Software Foundation (ASF) under one or more 4 contributor license agreements. See the NOTICE file distributed with 5 this work for additional information regarding copyright ownership. 6 The ASF licenses this file to You under the Apache License, Version 2.0 7 (the "License"); you may not use this file except in compliance with 8 the License. You may obtain a copy of the License at 9
10 http://www.apache.org/licenses/LICENSE-2.0 11
12 Unless required by applicable law or agreed to in writing, software 13 distributed under the License is distributed on an "AS IS" BASIS, 14 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 15 See the License for the specific language governing permissions and 16 limitations under the License. 17 -->
18 <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
19 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
20 xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee 21 http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
22 version="3.1"
23 metadata-complete="true">
24
25 <display-name>Welcome to Tomcat</display-name>
26 <description>
27 Welcome to Tomcat 28 </description>
29
30 <servlet>
31 <servlet-name>Test1</servlet-name>
32 <servlet-class>HelloServlet</servlet-class>
33 </servlet>
34
35 <servlet-mapping>
36 <servlet-name>Test1</servlet-name>
37 <url-pattern>/servlet1</url-pattern>
38 </servlet-mapping>
39
40 </web-app>
代碼解釋:1-28行是頭部和根元素,無需理會,30-38行是添加進去的類注冊信息,servlet-name元素的值Test1任意命名,合法即可。servlet-class元素的值HelloServlet是類名,這個肯定不能錯,url-pattern表示從瀏覽器中輸入URL的格式,前面需要加上我們的項目文件夾的名稱。完整的一個URL如下:
http://localhost:8080/test/servlet1
在初次開發的時候經常遇到的一個問題就是瀏覽器中輸入URL后得到404錯誤,這時需要仔細檢查下面幾個方面,也是我已經犯過的錯誤:
關鍵字是否輸入錯誤,例如servlet-pattern被我寫成了servlet-patter,少一個,多一個字符都不行。
類名稱,也就是servlet-class元素中的值是否正確。
url-pattern元素的值必須以“/”或者“*.”開頭,有一次我將url-pattern的值賦成了servlet1,結果總是404錯誤,浪費了好幾個小時來排錯。
所有的注冊信息都必須在<web-app>和</web-app>之間。
所有的元素必須成對存在,<servlet>必須以標簽</servlet>結束,這也是xml文件的規則。
每次修改web.xml或者Servlet代碼之后都需要重新啟動Tomcat。
c,在瀏覽器中輸入:http://localhost:8080/test/servlet1,不出意外的話得到如下結果,如果是404對這步驟b進行檢查:
3,測試使用包的Servlet
相比不使用包的Servlet,多了兩個變化,一個是需要新建一個子目錄,名稱就是包名,比如包名稱為coreservlets,那么新建子目錄為
xxx/tomcat/webapps/test/WEB-INF/classes/coreservlets。二是web.xml文件的servlet-class需要改成“包名.類名”,即多了一個點號,下面直接上代碼。
a,xxx/tomcat/webapps/test/WEB-INF/classes/coreservlets/HelloServlet.java,編譯后的結果為xxx/tomcat/webapps/test/WEB-INF/classes/coreservlets/HelloServlet.class

1 package coreservlets; 2
3 import java.io.*; 4 import javax.servlet.*; 5 import javax.servlet.http.*; 6
7 public class HelloServlet extends HttpServlet 8 { 9 public void doGet(HttpServletRequest request, 10 HttpServletResponse response) 11 throws ServletException, IOException 12 { 13 response.setContentType("text/html"); 14 PrintWriter out = response.getWriter(); 15 out.println("<html><head><title>Hello</title></head><body><h1>Hello Servlet</h1>" +
16 "</body></html>"); 17 } 18 }
b,xxx/tomcat/webapps/test/WEB-INF/web.xml

1 <?xml version="1.0" encoding="ISO-8859-1"?>
2 <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
4 xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee 5 http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
6 version="3.1"
7 metadata-complete="true">
8
9 <display-name>Welcome to Tomcat</display-name>
10 <description>
11 Welcome to Tomcat 12 </description>
13
14 <servlet>
15 <servlet-name>Test1</servlet-name>
16 <servlet-class>HelloServlet</servlet-class>
17 </servlet>
18 <servlet-mapping>
19 <servlet-name>Test1</servlet-name>
20 <url-pattern>/servlet1</url-pattern>
21 </servlet-mapping>
22
23 <servlet>
24 <servlet-name>Test2</servlet-name>
25 <servlet-class>coreservlets.HelloServlet</servlet-class>
26 </servlet>
27 <servlet-mapping>
28 <servlet-name>Test2</servlet-name>
29 <url-pattern>/servlet2</url-pattern>
30 </servlet-mapping>
31
32 </web-app>
為了節省篇幅,刪掉了web.xml自帶的注釋。23-30行是我們為了coreservlets.HelloServlet添加的類注冊信息,只是在servlet-class元素的值中加上了一個包名。
c,在瀏覽器中輸入http://localhost:8080/test/servlet2,得到如下結果
呼,終於大功告成了,折騰了好久