使用MyEclipse開發Web專案並進行釋出,執行,測試和除錯
本文將介紹如何使用 MyEclipse 來開發Web 專案(包括HTML,JSP,Servlet,Filter和後臺Java 類),並進行釋出,執行,測試和除錯。本章將通過開發一個使用JDBC 進行登入驗證的簡單例子來給大家展示相關的操作過程。
那麼哪些應用算是 Web 應用呢?簡單說通過網路瀏覽器,例如IE,Firefox 等等上網看到的絕大多數網頁,都屬於Web 應用的範圍,所以它的應用是非常的廣的。要想做好一個Web 應用,只掌握Java 是遠遠不夠的,您還得深入瞭解HTML,CSS,JavaScript 甚至AJAX,Flash,ActiveX 等技術。俗話說的好:三分相貌七分妝。使用者第一印象看到的只能是看到的網頁的樣子和友好度,他是完全不懂所謂的.NET,PHP,JSP,ASP 還有什麼ROR的,所以提示初學者多花些時間在Web 層的技術上。
建立Web 專案
本節內容將介紹如何建立一個 JSPHelloWorld 的Web 專案。選擇選單File > New >Web Project,可以啟動建立Web 專案的嚮導,如圖8.3 所示。
在這個圖的 Project Name 中輸入JSPHelloWorld,然後選中J2EE Specification Level 下面的Java EE 5.0 單選鈕,最後點選Finish 按鈕就可以建立Web 專案了。
注意:選擇哪個版本的J2EE Specification Level 取決於你使用的伺服器,例Tomcat4,Weblogic 9 以下版本請選擇J2EE 1.4,而Tomcat 5,JBoss 4,或者GlassFish 這樣
的伺服器可以選擇 Java EE 5.0。Java EE 5.0 可以直接使用 EL 表示式和JSTL。
圖 8.3 新建Web Project 對話方塊
關於輸入框的詳細意義請參考下表:
選項 | 描述 |
Project name | 專案的名稱。必須是有效的 Eclipse Java 專案名。 |
Location | 選中這個複選框來選擇新專案的檔案將存放到電腦上的其它位置 |
Directory | 專案的預設存放位置是放在 MyEclipse 啟動時候工作區目錄下的。當然可以選擇位於工作區目錄外的其它路徑。 注意:不能選擇位於工作區子目錄下的另一子目錄,因為Eclipse 禁止這種做法! |
Source folder | Java 原始碼目錄-將包含Java 包和.java 檔案。這些內容會被加入到專案的Java 構造路徑中。 |
Web root folder | 這個目錄將包含 web 應用的內容,WEB-INF 目錄以及對應的子目錄。如果這個輸入框內容為空,那麼專案的根目錄("/")將會成為web 根目錄。 |
Context root URL | MyEclipse的釋出工具會發布新Web專案時候所使用這個路徑。預設使用的值是專案的名字。什麼是上下文根目錄?它是訪問釋出後的應用時所用的根路徑,例如輸入myapp後,將用地址http://localhost:8080/myapp 來訪問這個專案. 你可以把這個輸入框中的內容修改成全是小寫字母的內容。 |
J2EE specification | 指定J2EE 規範的版本。需要檢查伺服器的文件來了解其所支援的版本。 |
Add JSTL 1.0 libraries | 啟用此選項來新增 Java Standard Template Library (Java 標準模版庫1.0或者1.1 版本)的 JAR 檔案到新專案的<web-root>/WEB-INF/lib 目錄下。 |
表8.1 新建Web 專案的選項說明
建立HTML 頁面
注意:在實際的開發中,一般使用的都是像Frontpage 或者DreamWeaver 這樣的工具來建立,視覺化的(所見即所得,WYSWYG)的來修改靜態網頁(HTML)。因為MyEclipse的視覺化網頁編輯器功能是比較弱的。因此本節內容僅供參考。
啟動建立 HTML 頁面的對話方塊有多種方式,這裡只介紹兩種:1. 選擇選單 File > New> Html(Advanced Template);2. 選中Package Explorer 檢視的WebRoot 目錄,點選右鍵選擇上下文選單中的New > Html(Advanced Template)。這時候將會彈出建立HTML頁面的對話方塊,如下圖所示:
圖 8.4 新建HTML 頁面嚮導
在這個對話方塊中的 File Name(檔名)框中輸入login.html,Template to use:(要使用的模版)右側的下拉框選中Default HTML template(預設HTML 模版,另一個是帶表單的模版)。最後點選Finish 按鈕完成嚮導。稍後MyEclipse 會用HTML 編輯器來開啟剛建立的檔案,如圖8.5 所示。在這裡可以在頁面設計器中視覺化的修改網頁內容,也可以點選格式工具欄上的按鈕來視覺化的修改網頁的格式,還可以在原始碼面板中直接修改HTML 原始碼。Properties 檢視則顯示了當前選中元素的屬性,可以快速的對一些關鍵的屬性進行修改。拖動設計器和原始碼標籤之間的隔條可以對兩個區域之間的大小進行調節,點擊向上按鈕可以最大化顯示程式碼區,點擊向下按鈕則可以最大化顯示設計區。點選Preview 標籤可以同時在IE 和Mozilla 瀏覽器中檢視頁面的顯示效果。
點選 Palette(工具箱,確切說應該是叫元件面板)可以選擇對應的一些常用的程式碼片段插入到當前頁面中,例如超連結,圖片,表單和表單元素等等。HTML-Basic 裡面列出常用的基本網頁元素,而HTML-Form 下則列出了表單元素。
現在我們把它的內容修改成一個包含登入表單和客戶端表單有效性驗證的頁面,然後點選工具欄上的儲存按鈕。程式碼內容請參考清單8.1。
圖 8.5 HTML 編輯器
- <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
- <html>
- <head>
- <title>登入</title>
- <meta http-equiv="content-type" content="text/html; charset=GBK">
- </head>
- <script type="text/javascript">
- // 驗證輸入不為空的指令碼程式碼
- function checkForm(form) {
- if(form.username.value == "") {
- alert("使用者名稱不能為空!");
- form.username.focus();
- return false;
- }
- if(form.password.value == "") {
- alert("密碼不能為空!");
- form.password.focus();
- return false;
- }
- return true;
- }
- </script>
- <body>
- 請登入 <br>
- <form action="login.aspx" method="post" onsubmit="return
- checkForm(this);">
- 使用者名稱:<input type="text" name="username"><br>
- 密碼:<input type="password" name="password"><br>
- <input type="submit" value="登入" name="submit1">
- <input type="reset" value="重置" name="reset1">
- </form>
- </body>
- </html>
清單 8.2 登入頁面
至此,建立靜態頁面的過程就簡要介紹完畢了。在此先虛晃一槍,為什麼表單的提交頁面是login.aspx 呢?難道Java 也支援ASP.NET 嘛?答案請在建立Servlet中找。
建立JSP 頁面
本節內容將會講解建立JSP頁面。實際上JSP編輯器許多地方都是和上文介紹的HTML編輯器非常相似的。因此本節內容將會簡要介紹其過程。啟動建立 HTML 頁面的對話方塊有多種方式,這裡只介紹兩種:1. 選擇選單 File > New> JSP(Advanced Template);2. 選中Package Explorer 檢視的WebRoot 目錄,點選右鍵選擇上下文選單中的New > JSP(Advanced Template)。這時候將會彈出建立JSP 頁面的對話方塊,和圖8.4 非常相似。只需要在這個對話方塊中的File Name(檔名)框中輸入result.jsp,然後點選Finish 按鈕即可建立這個JSP 頁面。
注意:Template to use 右側的模版下拉框中有很多JSP 模版可以使用,例如支援JSF,Struts 等等的模版,這樣可以加快開發的速度。
稍後 MyEclipse 會用HTML 編輯器來開啟剛建立的檔案,介面已經操作方法和圖8.5非常類似,不同的是Palette 裡面多了很多JSP 特有的內容,而編輯器的程式碼檢視呢,也支援自動查錯(但是不支援自動修正錯誤)和程式碼編寫提示功能,如下圖所示:
圖 8.6 JSP 編輯器的查錯和編碼提示
當你在變數後按下.之後,會彈出程式碼完成提示,另外還支援斷點的設定等等。因此使用MyEclipse 的JSP 編輯器可以大大減少開發人員出錯的機會(在出現能查錯的JSP 編輯器之前這是個大問題)。
現在我們將把這個頁面的程式碼改寫成如下清單所示內容:
- <%@ page language=”java” pageEncoding=”GBK”%>
- <html>
- <head>
- <title>登入結果</title>
- <meta http-equiv=”pragma” content=”no-cache”>
- <meta http-equiv=”cache-control” content=”no-cache”>
- <meta http-equiv=”expires” content=”0”>
- </head>
- <body>
- 您登入${message}了!
- </body>
- </html>
清單 8.3 登入結果頁面 result.jsp
在這個頁面我們將使用JSP 2.0 裡面的EL 表示式來顯示登入結果資訊,${message}就是一段EL 表示式,它將從request 或者session 裡面查詢名為message 的屬性,其實就是呼叫getAttribute(“message”)然後把裡面的內容顯示出來。這個頁面不包含其它複雜的程式碼,是因為JSP 頁面一般來說是用作檢視層的,專門用來顯示資料用的,只能包含或者儘量少包含一些複雜的業務邏輯。
注意:EL 表示式不能在J2EE 1.4 的Web 專案中使用。如果您打算在J2EE 1.4 的Web 專案中編寫這個頁面,對應的程式碼是把
- 您登入${message}了!
修改為:
- <%
- String message = (String)request.getAttribute("message");
- if(message == null) message = "";
- %>
- 您登入<%=message%>了!
即可。
然而有讀者發現 Tomcat 5.5 中啟用了Java EE 5 也無法使用EL 表示式,那麼這種情況下的一種簡單解決辦法是用Tomcat 6.0。不過,Tomcat 5.5 下也有解決辦法,第一種是設定整個專案使用el 表示式,需要在web.xml 中加上(控制一個專案):
- <jsp-config>
- <jsp-property-group>
- <el-ignored>false</el-ignored>
- </jsp-property-group>
- </jsp-config>
第二種辦法是設定某個jsp 頁面使用el 表示式,需要在jsp 頁面開頭加上(控制單個頁面):
- <%@ page isELIgnored="false"%>
在 page 指令中的isELIgnored 屬性用來指定是否忽略EL 表示式。格式為:
- <%@ page isELIgnored="true|false"%>
如果設定為真,那麼JSP 中的表示式被當成字串處理。比如下面這個表示式${2000 % 20},在isELIgnored="true"時輸出為${2000 % 20},而isELIgnored="false"時輸出為100。Web 容器預設isELIgnored="false",但是為什麼個別Tomcat 5.5 不支援呢?這我就不得而知了。
至於有沒有全域性的設定辦法?我想應該也是有的,但是我還沒找到。
建立Servlet
啟動建立Servlet 的對話方塊有多種方式,這裡只介紹兩種:1. 選擇選單 File > New >Servlet;2. 選中Package Explorer 檢視的專案,點選右鍵選擇上下文選單中的New >Servlet。這時候將會彈新建Servlet 類的對話方塊,如圖8.7 所示。在這個對話方塊中的Package(包)框中輸入servlets,Name(類名)輸入LoginServlet,然後點選Next 按鈕可以進一步設定對映檔案。也可以點選Finish 按鈕直接完成這個建立嚮導,不過此處將選擇Next按鈕來進入到下一步的設定頁面。
圖 8.7 新建Servlet 類對話方塊
在這一頁中可以設定 Servlet 的父類(Superclass),以及修飾符(Modifiers),新增介面(Interfaces),選擇模版(Template to use)以及一些選項(Options)。Options 中可以選擇是否建立繼承的方法(Inherited Methods),建立構造器(Constructors),初始化和銷燬方法(init and destory)以及doGet,doPost,doPut,doDelete,getServletInfo等方法。詳細意義請參考Servlet 開發的書籍。
當點選 Next 按鈕後,將會進入修改,設定web.xml 的嚮導頁面,如圖8.8 所示。注意圖中的紅框,我們在這裡在Servlet/JSP Mapping URL 右側輸入框中輸入/login.aspx。這個路徑可以幫你理解一個概念,那就是其實Servlet 的字尾可以是任何形式的字串,例如.do,.php 等等。最後點選Finish 按鈕來完成建立Servlet 的過程。
注意:Servlet 的對映路徑一定要以/開始,或者以*.do 的方式出現,而且不能輸入/*.do。
圖 8.8 修改,設定web.xml 中的對映資訊
對話方塊關閉後,稍等片刻 web.xml 和新建立的LoginServlet.java,可以看到web.xml的內容已經被自動加入了新的Servlet 定義,如下所示:
- <?xml version="1.0" encoding="UTF-8"?>
- <web-app version="2.5"
- 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_2_5.xsd">
- <servlet>
- <description>This is the description of my J2EE
- component</description>
- <display-name>This is the display name of my J2EE
- component</display-name>
- <servlet-name>LoginServlet</servlet-name>
- <servlet-class>servlets.LoginServlet</servlet-class>
- </servlet>
- <servlet-mapping>
- <servlet-name>LoginServlet</servlet-name>
- <url-pattern>/login.aspx</url-pattern>
- </servlet-mapping>
- <welcome-file-list>
- <welcome-file>index.jsp</welcome-file>
- </welcome-file-list>
- </web-app>
清單 8.4 加入了Servlet 定義的web.xml
至此Servlet就創建出來了,你可以接著修改Servlet的原始碼來加入更多功能。這個Servlet的最終訪問路徑是:http://localhost:8080/JSPHelloWorld/login.aspx,是不是看起來非常像.NET應用呢?不過這是個假的而已。
建立Filter(過濾器)
實際開發中都需要開發一些很有用的過濾器,來解決中文表單提交問題啊,給請求和響應加入GZIP 壓縮功能啊,使用者許可權控制啊,等等,然而遺憾的MyEclipse 不支援直接建立過濾器。在這裡只好手工建立一個解決Tomcat 表單提交中文問題的過濾器。選擇選單 File > New > Class,來建立一個名為TomcatFormFilter 的類,包名為filters。然後把類的程式碼修改為如下所示:
- package filters;
- import java.io.IOException;
- import javax.servlet.Filter;
- import javax.servlet.FilterChain;
- import javax.servlet.FilterConfig;
- import javax.servlet.ServletException;
- import javax.servlet.ServletRequest;
- import javax.servlet.ServletResponse;
- import javax.servlet.http.HttpServletRequest;
- import javax.servlet.http.HttpServletRequestWrapper;
- public class TomcatFormFilter implements Filter {
- /**
- * Request.java
- * 對 HttpServletRequestWrapper 進行擴充, 不影響原來的功能並能提供所
- 有的HttpServletRequest
- * 介面中的功能. 它可以統一的對 Tomcat 預設設定下的中文問題進行解決而只
- 需要用新的Request 物件替換頁面中的
- * request 物件即可.
- */
- class Request extends HttpServletRequestWrapper
- {
- public Request(HttpServletRequest request) {
- super(request);
- }
- /**
- * 轉換由表單讀取的資料的內碼.
- * 從 ISO 字元轉到 GBK.
- */
- public String toChi(String input) {
- try {
- byte[] bytes = input.getBytes("ISO8859-1");
- return new String(bytes, "GBK");
- }
- catch (Exception ex) {
- }
- return null;
- }
- /**
- * Return the HttpServletRequest holded by this object.
- */
- private HttpServletRequest getHttpServletRequest()
- {
- return (HttpServletRequest)super.getRequest();
- }
- /**
- * 讀取引數 -- 修正了中文問題.
- */
- public String getParameter(String name)
- {
- return
- toChi(getHttpServletRequest().getParameter(name));
- }
- /**
- * 讀取引數列表- 修正了中文問題.
- */
- public String[] getParameterValues(String name)
- {
- String values[] =
- getHttpServletRequest().getParameterValues(name);
- if (values != null) {
- for (int i = 0; i < values.length; i++) {
- values[i] = toChi(values[i]);
- }
- }
- return values;
- }
- }
- public void destroy() {
- }
- public void doFilter(ServletRequest request, ServletResponse
- response,
- FilterChain chain) throws IOException, ServletException {
- HttpServletRequest httpreq = (HttpServletRequest)request;
- if(httpreq.getMethod().equals("POST")) {
- request.setCharacterEncoding("GBK");
- } else {
- request = new Request(httpreq);
- }
- chain.doFilter(request, response);
- }
- public void init(FilterConfig filterConfig) throws
- ServletException {
- }
- }
清單 8.5 過濾器程式碼
然後修改 web.xml 加入Servlet 定義,修改後的程式碼清單如下所示:
- <?xml version="1.0" encoding="UTF-8"?>
- <web-app version="2.5" 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_2_5.xsd">
- <servlet>
- <description>
- This is the description of my J2EE component
- </description>
- <display-name>
- This is the display name of my J2EE component
- </display-name>
- <servlet-name>LoginServlet</servlet-name>
- <servlet-class>servlets.LoginServlet</servlet-class>
- </servlet>
- <filter>
- <filter-name>TomcatFormFilter</filter-name>
- <filter-class>filters.TomcatFormFilter</filter-class>
- </filter>
- <filter-mapping>
- <filter-name>TomcatFormFilter</filter-name>
- <url-pattern>/*</url-pattern>
- </filter-mapping>
- <servlet-mapping>
- <servlet-name>LoginServlet</servlet-name>
- <url-pattern>/login.aspx</url-pattern>
- </servlet-mapping>
- <welcome-file-list>
- <welcome-file>index.jsp</welcome-file>
- </welcome-file-list>
- </web-app>
清單 8.6 加入了過濾器的web.xml 內容
建立資料庫訪問層(DAO)
做 Web 應用一般來說不訪問資料庫是不太可能的,因此本節就介紹給應用加入資料庫訪問功能。
首先第一步是建立資料庫表
第二步是要加入JDBC驅動類庫
這裡打算使用MySQL資料庫,對於Web專案來說加入類庫檔案非常容易,只要把mysql-connector-java-3.1.11-bin.jar這個檔案複製到WebRoot/WEB-INF/lib下,MyEclipse會自動把檔案加入到專案的類路徑中。
第三步需要建立一個實體類,來代表資料庫中的Student 物件,這個類用來儲存和傳遞來自資料庫庫的資料資訊。程式碼清單如下:
- package entity;
- /** 學生實體類*/
- public class Student {
- private int id;
- private int age;
- private String username;
- private String password;
- public int getId() {
- return id;
- }
- public void setId(int id) {
- this.id = id;
- }
- public int getAge() {
- return age;
- }
- public void setAge(int age) {
- this.age = age;
- }
- public String getUsername() {
- return username;
- }
- public void setUsername(String username) {
- this.username = username;
- }
- public String getPassword() {
- return password;
- }
- public void setPassword(String password) {
- this.password = password;
- }
- }
清單 8.7 Student 實體類
最後是建立一個數據庫訪問物件 ,其原始碼如下所示:
- package dao;
- import java.sql.SQLException;
- import entity.Student;
- /**
- * 學生資料訪問類
- * @author [email protected]
- * @version 0.1 2007-12-21
- */
- public class StudentDAO {
- /**
- * 根據使用者名稱和密碼找到使用者物件。
- * @param username 使用者名稱
- * @param password 密碼
- * @return 找到的使用者物件,找不到返回null
- */
- public Student findStudent(String username, String password) {
- try {
- Class.forName("com.mysql.jdbc.Driver");
- } catch (ClassNotFoundException e) {
- e.printStackTrace();
- }
- java.sql.Connection conn = null;//資料庫連線
- java.sql.PreparedStatement pstmt = null;//資料庫表示式
- java.sql.ResultSet rs = null;//結果集
- String sql = "select * from Student where username = ? and password
- = ?";//SQL
- try {
- conn = java.sql.DriverManager.getConnection(
- "jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncodi
- ng=GBK", "root", null);
- pstmt = conn.prepareStatement(sql);
- pstmt.setString(1, username);
- pstmt.setString(2, password);
- rs = pstmt.executeQuery();
- if(rs !=null && rs.next()) {
- // 讀到資料,生成實體類
- Student student = new Student();
- student.setId(rs.getInt(1));
- student.setUsername(rs.getString("username"));
- student.setPassword(rs.getString("password"));
- student.setAge(rs.getInt("age"));
- return student;
- }
- } catch (SQLException e) {
- e.printStackTrace();
- } finally {
- // 6. 釋放資源,建議放在finally語句中確保都被關閉掉了
- try {
- rs.close();
- } catch (SQLException e) {}
- try {
- pstmt.close();
- } catch (SQLException e) {}
- try {
- conn.close();
- } catch (SQLException e) {}
- }
- return null;
- }
- }
清單 8.8 StudentDAO 資料訪問類
至此資料訪問層的開發已經完成,為什麼要多寫這麼多程式碼呢?這是因為分層的設計能夠便於多人合作開發,也便於單獨測試每一層的功能。當然,專案規模小的話把所有的程式碼都放到那個Servlet 裡面就行了。
修改Servlet 呼叫後臺類
現在我們可以修改 Servlet 來加入呼叫DAO 層程式碼然後判斷登入的功能了,設定完登入狀態後,會轉向到/result.jsp。修改後的Servlet 程式碼如下所示:
- package servlets;
- import java.io.IOException;
- import javax.servlet.ServletException;
- import javax.servlet.http.HttpServlet;
- import javax.servlet.http.HttpServletRequest;
- import javax.servlet.http.HttpServletResponse;
- import dao.StudentDAO;
- import entity.Student;
- public class LoginServlet extends HttpServlet {
- public void doPost(HttpServletRequest request, HttpServletResponse
- response)
- throws ServletException, IOException {
- Student student = new StudentDAO().findStudent(
- request.getParameter("username"),request.getParameter("password"));
- if(student != null &&
- student.getUsername().equals(request.getParameter("username")) &&
- student.getPassword().equals(request.getParameter("password"))) {
- request.setAttribute("message", "成功");
- //儲存登入使用者到session中
- request.getSession().setAttribute("student", student);
- } else {
- request.setAttribute("message", "失敗");
- }
- //轉向登入結果頁面
- request.getRequestDispatcher("/result.jsp").forward(request,
- response);
- }
- }
清單 8.9 Servlet 加入登入判斷功能
至此,這個簡單的登入小專案就開發完畢了。
釋出,重新發布,執行和測試應用
最快的執行方式就是在Package Explorer檢視中選中專案節點StrutsLoginDemo,然後選擇選單Run > Run As > 3 MyEclipse Server Application,之後MyEclipse可能會顯示一個可用的伺服器列表,選中其中的伺服器之一例如MyEclipse Tomcat並點選OK按鈕後,就會自動釋出或者重新發布應用然後啟動伺服器。也可以通過點選主介面工具欄上的 按鈕釋出完畢後,然後啟動伺服器來進行測試了。在Servers檢視中選中伺服器,之後點選檢視工具欄上的 按鈕以執行模式啟動伺服器。
伺服器啟動完畢後,點選工具欄上的 按鈕來開啟瀏覽器檢視,然後鍵入地址:http://localhost:8080/JSPHelloWorld/login.html 來開啟登入頁面,如下圖所示:
圖 8.9 在MyEclipse 中開啟瀏覽器測試應用
在表單的使用者名稱處輸入資料庫裡存在的學生的名字,例如張三,再輸入密碼,然後點選提交,就可以顯示登入的結果了。
如果只是修改了 JSP 頁面,那麼MyEclipse 會自動把JSP 更新到伺服器上,但是如果是改了類檔案或者一些配置檔案,那麼需要手工重新發布這個專案。如何重新發布這個專案呢?我們可以在Servers 檢視上選中所釋出的專案,然後點選檢視工具欄上的
來重新發布,或者在專案上點選右鍵選擇選單Redeploy,如圖8.10 所示。之後稍等片刻就可以完成重新發布的過程。
除錯JSP 應用
MyEclipse可以對Web應用裡面的類或者JSP頁面,Servlet進行除錯。例如可以雙擊JSP編輯器的行首的隔條,來設定斷點,然後以除錯模式啟動伺服器。例如下面是訪問index.jsp時的除錯透檢視介面,我們可以修改變數值b為4(被修改過的值以本人允荊緩蟮慊鱀ebug檢視的
Resume按鈕來繼續往下執行,就可以看到最終的執行結果是5。如下圖所示:
圖 8.11 修改變數跟蹤除錯JSP 頁面
這裡用的 index.jsp 頁面的原始碼清單如下所示:
- <%
- int a = 1;
- int b = 2;
- out.println(a + b);
- %>
清單 8.10 用來除錯的JSP 頁面原始碼
使用偵錯程式可以很方便的快速定位出現問題的地方,加快修改程式碼的速度。
向現有Web 專案新增Web 開發功能
如果拿到了一個其它開發工具例如 WTP,Netbeans,JBuilder 等所製作的Web 專案,而不是通過MyEclipse 所建立的Web 專案,那麼MyEclipse 將會拒絕對它進行釋出,除錯等操作。這種情況下可以從 MyEclipse 選單欄選擇MyEclipse > Project Capabilities >Add Web Project Capabilities ... 來啟動MyEclipse Web Capabilities 嚮導,如下圖示:
圖 8.12 MyEclipse Web 專案嚮導
在這個對話方塊中選中 Web 專案的根目錄,點選Web Root Directory 最右側的Browse...按鈕來選中,之後設定上下文訪問路徑(Web Context Root),並選擇合適的Java EE 版本(J2EE Specification Level)後,點選Finish 按鈕後就給當前專案加入了Web 開發功能了,之後就可以方便的對它進行釋出等操作。
高階設定
本節內容僅供瞭解,大部分情況下都不需要對這些內容進行修改。
修改Web 專案的預設設定
選擇選單 Window > Preferences,開啟Preferences 對話方塊,在選項樹上選擇MyEclipse > Java Enterprise Project > Web Project,來進一步設定Web 專案的預設設定,如下圖所示:
圖 8.13 修改Web 專案的預設設定
在 Template 標籤頁可以設定Web 專案的模版,包括預設的原始碼目錄名以及Web 應用根目錄的名稱。而在Build Path 標籤頁,則可以設定是否自動將WEB-INF/lib 下面的jar 或者zip 檔案釋出到伺服器上。Deployment 標籤則設定了當專案存在依賴的時候如何進行釋出。Tag Libraries 標籤則可以修改一些自定義的標籤庫的快速程式碼段。
除此之外,還可以對單個專案的Web功能進行設定。點選選單Project > Properties可以開啟專案的屬性對話方塊,這時候可以點選MyEclipse > Web節點進行一些必要的設定,如圖8.14 所示。如果修改了值Web Context-root,例如它的值修改為ABC,那麼這個專案再次釋出時,將會發布到Tomcat安裝目錄/webapps/ABC下面,對應應用的訪問地址也會改為http://localhost:8080/ABC/。如果複製Web Project來進行開發,往往會出現多個專案釋出到Tomcat的webapps下面同一個目錄下的問題,這時就可以修改這個屬性的值來解決問題。
給Web 專案加入高階功能
在實際開發中不可避免的要在 Web 專案中使用Hibernate,Struts,Spring 等技術,那麼這些都可以通過點選選單MyEclipse > Project Capabilities 然後選擇需要使用的技術,就可以將對應的類庫和配置檔案加入到當前專案中。例如要開發Struts 和Hibernate 應用,分別點選兩次子選單Add Struts Capabilities 和Add Hibernate Capabilities 就可以了。如下圖所示:
小結
在本文我們介紹瞭如何開發,釋出,執行,測試,除錯 Web 應用,這些概念適用於以後所介紹的其它基於Web 的專案例如Struts,JSF 等等。通過本章,你將對如何使用MyEclipse 如何開發Web 專案有一個大致的瞭解,併為使用後續複雜的Web 框架進行開發打好基礎。
相關推薦
使用MyEclipse開發Web專案並進行釋出,執行,測試和除錯
本文將介紹如何使用 MyEclipse 來開發Web 專案(包括HTML,JSP,Servlet,Filter和後臺Java 類),並進行釋出,執行,測試和除錯。本章將通過開發一個使用JDBC 進行登入驗證的簡單例子來給大家展示相關的操作過程。那麼哪些應用算是 Web 應用呢
idea匯入Web專案並配置tomcat執行
文章目錄 一、匯入專案 二、配置tomcat 三、配置Web專案在tomcat下的執行包 一、匯入專案 File——>Open...然後選擇要匯入的
Dubbo+Zookeeper架構—持續整合篇14—Jenkins自動化部署:Jenkins編譯一個Web專案並遠端釋出到Tomcat
上一章講了如何編譯我們第一個專案 但是有時候我們不僅僅只是編譯更多的是需要釋出 在微服務普及之前我們最常用的就無非就是通過tomcat執行war格式的專案了,本章將介紹如何配置一個傳統的Java web專案併發布到遠端tomcat上。 這裡需要用到的外掛為:Deploy t
Maven+MyEclipse 建立web工程並自動釋出tomcat
1.Myeclipse配置maven外掛 Myeclipse 10.0本身已經內建了maven的外掛,不需要單獨安裝,唯一需要修改的是Myeclipse中使用的maven版本,不管Myeclipse使用的是哪個版本,咱們都統一改成剛才下載到本地安裝的版本,方法是: 1)
使用HBuilder和MyEclipse共同開發web專案簡明教程
第一步:使用MyEclipse建立web專案 使用MyEclipse建立web專案我在這裡就不用多說了,web專案建立後,對新建的專案右鍵點選Porperties,在Resource中即可看到專案儲存的路徑,複製該路徑。 第二步:使用HBuilder建立web專案 開啟
Dockerfile 之 tomcat中執行MyEclipse搭建Web專案(Docker系列)
本文章來自【知識林】 在之前的講解中主要講述的是如何使用已經存在的Docker映象,當然這些映象對我們的使用肯定有很大的幫助,但很多時候我們是需要執行我們自己所定製開發的應用程式,這些應用程式在Doc
MyEclipse + Tomcat 開發web專案記憶體配置方式
1、修改eclipse.ini 在Myeclipse安裝目錄下G:\MyEclipse8.5\Genuitec\MyEclipse 8.5有一個myeclipse.ini配置檔案,設定如下: -vmargs -Xmx512m -XX:MaxPermSize=25
Eclipse中匯入Maven Web專案並配置執行
1.拿到一個maven專案 從網上下載了一個maven專案,發現進入目錄後是一個pom.xml檔案和一個src資料夾,當然可能還存在一些README之類的這些都不重要,最關鍵的就是pom.xml和src資料夾,在src下,src/main/java一般就是
如何讓Eclipse/MyEclipse的web專案在執行時不要自動開啟瀏覽器
解決: 使用Eclipse/MyEclipse,新建一個web project,然後新建一個Servlet,每次在執行或者debug後,都會自動開啟內建的瀏覽器。 視窗選項:Window——>Preference——>在搜尋框裡面搜尋Web Br
解決:Intellij idea匯入MyEclipse Web專案時,伺服器搭建執行正常,但無法訪問WebRoot下的頁面
首先開啟如下頁面,並選中指定的選項: 有些使用者可能在選擇這個選項後,沒有我們的Web專案,解決方法: 選中+號,新增Web,並將自己的Web專案新增上去.這樣就可以跟我上面的圖資訊一樣. 在idea上面,預設的web根目錄時web,而MyEclipse預設的根目錄時W
Eclipse中匯入Maven Web專案並配置其在Tomcat中執行
首先我通過svn將公司的專案checkout到了本地。 因為Maven遵循的是規約比配置重要的原則,所以Maven專案的結構一般是進入目錄後是一個pom.xml檔案和一個src資料夾,當然可能還存在一些README之類的這些都不重要,最關鍵的就是pom.xml和src資料夾
如何將Eclipse和MyEclipse中Web專案打成war包
war包即Web歸檔檔案,將Web專案打成war包可以直接拷貝到Web伺服器釋出目錄(例如Tomcat伺服器webapps目錄 ),當Tomcat啟動後該壓縮檔案自動解壓,war包方便了web工程的釋出,那麼在Eclipse中如何將Web專案打成war包呢?  
MyEclipse部署web專案到Tomcat出現An internal error occurred during: "Launching on Tomcat 7.x"的問題,或者是出現空指標的現象
如果出現了上述的錯誤按照如下的3個步驟解決: 1、首先關閉MyEclipse工作空間。 2、然後刪除工作空間下的檔案。 “MyEclipse10\workspace.metadata.plugins\org.eclipse.core.runtime.settings、com.gen
Xcode開發ios專案遇到自定義執行時屬性異常
異常包含以下字樣: this class is not key value coding-compliant for the key 原因: 添加了使用者定義的執行時屬性,去檢查一下, 點選報錯對應的控制元件,然後看一下,不需要的刪除,如果是空名稱的更要刪除,例如下圖:
web專案中使用多執行緒的一些坑
在web專案中有時候我們需要建立一個或者幾個執行緒去處理問題。線上程的業務處理方法裡面我們的寫法通常和mvc的業務層方法寫法類似。這時候有一個問題,如果業務方法丟擲了執行時異常(RuntimeException或其子類),在mvc專案中我們是不需要try-catch的,因為web專案通常
jfinal+hbase+eclipse開發web專案詳細步驟04---在web頁面實現對hbase資料庫資料的增刪查改功能
首先提醒大家,本節是在步驟01、步驟02、步驟03都成功的基礎上做進一步開發。如果在之前的任何一個步驟出現問題,那麼希望你先解決好問題之後,再做本次的開發。 步驟1:建表。 1、開啟我們虛擬機器,並且啟動hadoop、hbase start-all.sh start
jfinal+hbase+eclipse開發web專案詳細步驟03---jfinal工程中加入hbase外掛
首先,這個步驟是在01工程步驟之上進行修改。 其次,要準備好hbase開發jar包(我們沒有用mevan,所以要下載我準備好的jar包,下載地址:hbase1.2.6開發jar包,如果已經在01中下載好,那麼就不需要再下載)。 1、將下載好的hbase開發jar包全部複製(C
jfinal+hbase+eclipse開發web專案詳細步驟02---jfinal工程中加入jquery外掛
本小節是在01工程步驟至上進行改進,主要改進內容有: 1、加入jquery外掛。 2、利用jquery外掛的ajax來做頁面與後臺的資料互動。 3、利用jquery來動態處理頁面資料與頁面顯示。 注意,在開發之前,我們先要準備好01工程和jquery外掛,jquery外掛下載,我用的是j
jfinal+hbase+eclipse開發web專案詳細步驟01--搭建jfinal工程
在工程專案搭建之前,首先要做以下幾個事情的準備。 最新的jfinal框架jar包,下載地址:jfinal 下載hbase1.2.6開發需要的jar包,下載地址:hbase1.2.6jar包 安裝好eclipse和jdk。eclipse綠色版下載地址:32位、64位
web專案啟動時,執行某個方法
1.監聽(Listener) web檔案新增 <listener> <listener-class>cn.ro.common.InitListener</listener-class> </l