文章目錄
- 1、 準備工作
- 2、tomcat、servlet簡介
- 3、java web應用程式
- 4、目錄結構
- 5、各個檔案存放位置及原始碼
- 6、運行
- 7、打包成war檔案發布
- 8、關於servlet中重新導向的區別
- 9、參考資料
1、 準備工作
工具:tomcat、editplus、jdk、windows作業系統
操作:在windows作業系統上安裝jdk、tomcat、editplus,配置JAVA_HOME,Path,CLASSPATH;在CLASSPATH路徑上加上servlet-api.jar
CLASSPATH D:\Program Files\Java\jdk1.6.0_10\lib;F:\tomcat\lib\servlet-api.jar;
也可以配置CATALINA_HOME F:\tomcat
2、tomcat、servlet簡介
tomcat是完全免費得web伺服器
servlet容器也叫servlet引擎,是web伺服器或應用程式伺服器的一部分,用於在發送的請求和響應之上提供網路服務,解碼基於MIME的請求,格式化基於MIME的響應
解壓tomcat後,得到如下目錄,當然tomcat7中只有一個lib目錄。其中要用到的servlet-api.jar放在lib目錄下
servlet生命週期
3、java web應用程式
一個web應用程式是由一組servlet、類、html頁面以及其他資源群組成的運行在web伺服器上的完整的應用程式。一個Context表示一個應用程式
以一個登陸servlet為例介紹java web程式的開發流程,完成功能:使用者通過login.html登陸,登陸成功返回用戶端和伺服器的一些資訊,以及請求資訊
4、目錄結構
F:\tomcat\webapps\servlet_demo這是我電腦上的應用程式servlet_demo的路徑,這個路徑是上下文路徑,在該路徑下建立如下檔案:
5、各個檔案存放位置及原始碼
lib目錄下存放我們要用到的資源,這裡存放的是mysql的jdbc驅動
src目錄下放的是原始碼,這個在部署的時候可以不需要的
DataBaseConnection類是一個通用的資料庫連接工具類
import java.sql.Connection;import java.sql.DriverManager;import java.sql.SQLException;import java.sql.Statement;/** * 該工具類用於資料庫連接,返回一個Statement對象,使用者可以根據此對象執行sql語句擷取結果 */public class DataBaseConnection {public static final String ACCESS_DRIVER = "sun.jdbc.odbc.JdbcOdbcDriver";public static final String MYSQL_DRIVER = "com.mysql.jdbc.Driver";public static final String ORACLE_DRIVER = "oracle.jdbc.driver.OracleDriver";public static final String SQLSERVER_DRIVER = "com.microsoft.sqlserver.jdbc.SQLServerDriver";private Statement st = null;private Connection connection = null;public Statement getStatement(String driver, String url, String user,String password) {try {// 1、載入驅動程式Class.forName(driver);// 2、通過url建立串連,串連到資料庫connection = DriverManager.getConnection(url, user, password);// 3、建立語句,connection可以看出纜道,Statement可以看出纜車st = connection.createStatement();} catch (ClassNotFoundException e) {e.printStackTrace();} catch (SQLException e) {e.printStackTrace();}return st;}public void close() {try {if (st != null)st.close();if (connection != null)connection.close();} catch (SQLException e) {e.printStackTrace();}}}
LoginServlet類用於處理表單資料,判斷使用者名稱密碼是否正確,如果正確則返回資訊,錯誤轉到登陸介面
import javax.servlet.RequestDispatcher;import javax.servlet.ServletContext;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import java.io.*;import java.sql.ResultSet;import java.sql.SQLException;import java.sql.Statement;import java.util.Enumeration;public class LoginServlet extends HttpServlet {protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {doPost(req, resp);}protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {// 設定響應MIME類型resp.setContentType("text/html;charset=utf-8");// 獲得輸出資料流PrintWriter out = resp.getWriter();if (isRight(req, resp)) {// 擷取用戶端資訊和伺服器資訊String clientAddress = req.getRemoteAddr();int clientPort = req.getRemotePort();String clientHost = req.getRemoteHost();String serverAddress = req.getLocalAddr();int serverPort = req.getLocalPort();String serverHost = req.getLocalName();// 輸出資訊到客戶瀏覽器out.print("<html><head><title>");out.print("登陸成功!</title></head><body><center>");out.print("<p>客戶機IP:" + clientAddress + " 客戶機連接埠:" + clientPort + " 客戶機主機名稱:" + clientHost);out.print("<p>伺服器IP:" + serverAddress + " 伺服器連接埠:" + serverPort + " 伺服器主機名稱:" + serverHost);// 擷取http請求資訊Enumeration headNames = req.getHeaderNames();out.print("<p>http請求資訊<br><table border=\"1\">");while (headNames.hasMoreElements()) {String headName = (String) headNames.nextElement();String value = req.getHeader(headName);out.print("<tr><td>" + headName + "</td><td>" + value + "</td></tr>");}out.print("</table>");// 獲得上下文,一個上下文代碼一個web應用ServletContext context = getServletContext();// 統計訪問量,context.getAttribute("count");這個Attribute是屬於整個web應用程式的// 該應用程式的每個servlet都可以訪問此屬性Integer count = (Integer) context.getAttribute("count");if (count == null)count = 1;elsecount++;context.setAttribute("count", count);out.print("<p><br>當前訪問量:" + count);out.print("</body></html>");} else {// 請求轉寄// RequestDispatcher由servlet容器所建立,用於封裝一個由路徑所標識的資源// 1.參數表示相對於當前servlet路徑,也可以是上下文路徑// RequestDispatcher rd=req.getRequestDispatcher("success.html");// 2.參數是相對上下文路徑,必須要以/開始//RequestDispatcher rd = getServletContext().getRequestDispatcher("/success.html");// 控制權交給轉寄到的servlet,out輸出的內容將會被清除,其他後面的代碼也不會執行 //rd.forward(req, resp);// 控制權交給轉寄到的servlet,執行完後返回當前servlet並繼續執行// rd.include(req, resp);// 響應發送到指定頁面,和rd.forward(req, resp);有區別resp.sendRedirect("login.html");}out.close();}// 通過查詢資料庫,判斷輸入的使用者名稱密碼是否正確private boolean isRight(HttpServletRequest req, HttpServletResponse resp) {// 擷取表單資料String user = req.getParameter("user");String password = req.getParameter("password");// 擷取初始參數,下面是獲得串連資料庫的參數String driverClass = getInitParameter("driverClass");String url = getInitParameter("url");String username = getInitParameter("username");String pw = getInitParameter("password");DataBaseConnection dbConnection = new DataBaseConnection();Statement st = dbConnection.getStatement(driverClass, url, username, pw);try {ResultSet result = st.executeQuery("select * from user");while (result.next()) {if (result.getString("username").equals(user) && result.getString("password").equals(password))return true;}result.close();st.close();} catch (SQLException e) {e.printStackTrace();}dbConnection.close();return false;}}
登陸頁面login.html
<html> <head> <title>登陸</title> </head> <body> <center> <form action="login" method="post"> 使用者名稱:<input type="text" name="user" id="user"><p> 密碼:<input type="password" name="password" id="password"><p> <input type="submit" value="登陸"> <input type="reset" value="重設"> </form> </body></html>
資料庫資訊
6、運行
第5步弄完之後,開啟tomcat和資料庫,在地址欄輸入:http://localhost:8080/servlet_demo 就會進入登陸介面
當然也可以通過telnet來運行:
先串連:
telnet localhost 8080
然後訪問:
GET /servlet_demo/login HTTP/1.1
Host:localhost
連續按兩下斷行符號
7、打包成war檔案發布
dos視窗切換到 F:\tomcat\webapps\servlet_demo 。執行命令:jar -cvf servlet_demo.war * 。在目前的目錄下就有了servlet_demo.war 檔案,可以用壓縮軟體直接開啟該檔案,也可以用命令:jar -tf servlet_demo.war開啟該檔案。
刪除webapps目錄下得servlet_demo應用,把servlet_demo.war檔案放入目錄下,這樣就部署好了,運行跟第6步一樣了。。。
8、關於servlet中重新導向的區別
9、參考資料
《java web開發詳解》