Java Web開發之Servlet、JSP基礎,servletjsp
有好多年不搞Java Web開發了,這幾天正好國慶放假,放鬆之餘也有興趣回頭看看Java Web開發技術的基礎。
我們都知道,Servlet是Java Web開發的重要基礎,但是由於Servlet開發相對繁瑣,代碼量龐大而且不易維護,美工無法參與介面設計開發等不足,於是就誕生了jsp。jsp是對servlet開發模型的重要升級。有了jsp,Java Web開發技術才真正被廣泛使用。
一、Servlet
在Java Web開發當中,建立一個類繼承(派生)自HttpServlet類即可建立一個Servlet。
比如:
@WebServlet(name="firstServlet",urlPatterns={"/firstServlet"})public class FirstServlet extends HttpServlet {/** * Constructor of the object. */public FirstServlet() {super();}/** * Destruction of the servlet. <br> */public void destroy() {super.destroy(); // Just puts "destroy" string in log// Put your code here}/** * The doGet method of the servlet. <br> * * This method is called when a form has its tag value method equals to get. * * @param request the request send by the client to the server * @param response the response send by the server to the client * @throws ServletException if an error occurred * @throws IOException if an error occurred */public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {response.setContentType("text/html");PrintWriter out = response.getWriter();out.println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">");out.println("<HTML>");out.println(" <HEAD><TITLE>A Servlet</TITLE></HEAD>");out.println(" <BODY>");out.print(" This is ");out.print(this.getClass());out.println(", using the GET method");out.println(" </BODY>");out.println("</HTML>");out.flush();out.close();}/** * The doPost method of the servlet. <br> * * This method is called when a form has its tag value method equals to post. * * @param request the request send by the client to the server * @param response the response send by the server to the client * @throws ServletException if an error occurred * @throws IOException if an error occurred */public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {response.setContentType("text/html");PrintWriter out = response.getWriter();out.println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">");out.println("<HTML>");out.println(" <HEAD><TITLE>A Servlet</TITLE></HEAD>");out.println(" <BODY>");out.print(" This is ");out.print(this.getClass());out.println(", using the POST method");out.println(" </BODY>");out.println("</HTML>");out.flush();out.close();}/** * Initialization of the servlet. <br> * * @throws ServletException if an error occurs */public void init() throws ServletException {// Put your code here}}這段代碼是在myeclipse工具當中建立servlet時自動產生的,可以看到我們建立的FirstServlet類繼承自HttpServlet。而且又實現了裡面的doGet(Get請求時調用的方法)、doPost(Post請求時調用的方法)、init(初始化對象)、destroy(銷毀對象)。值得注意的是我們採用了Annotation的方式進行了修飾,即:@WebServlet(name="firstServlet",urlPatterns={"/firstServlet"})。這是servlet3.0開始推薦的,以前採用的方式是在web.xml裡面添加servlet和servlet-mapping配置。比如:
<servlet><servlet-name>firstServlet</servlet-name><servlet-class>包名.FirstServlet</servlet-class></servlet><servlet-mapping><servlet-name>firstServlet</servlet-name><url-pattern>/firstServlet</url-pattern></servlet-mapping>
上面的配置有幾點需要說明:
1、servlet裡面的servlet-class節點需要填寫servlet類的完整名稱(包名.類名)
2、servlet-mapping下的servlet-name節點的名稱要與servlet下的servlet-name節點的名稱一致,才能找到。
3、url-pattern下的url要加"/"
啟動tomcat,在ie中輸入localhost:8080/工程名/firstServet,即可瀏覽該頁面(Get請求)。8080連接埠是tomcat預設設定的連接埠號碼,可以在tomcat/conf/下面的server.xml檔案中修改連接埠號碼。比如我們修改了預設連接埠號碼為8088,重新啟動tomcat(載入xml)以後,訪問的url即為:localhost:8088/工程名/servlet映射的urlpattern名。
<Connector port="8088" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />
最後需要說明的是,如果我們在servlet裡面修改了代碼,比如重新輸出了一段html表格,要重新編譯、部署到tomcat web容器運行,不像jsp是即時編譯的。
可以看到servlet裡面都是一行一行輸出內容(out.println方法),所以現在基本上不會採用純servlet開發Java Web項目,而是讓其作為MVC的C(Controller,控制器)來使用。
二、jsp
正是由於純servlet開發Java Web應用非常繁瑣,而且美工和程式員無法很好的合作,jsp應運而生。jsp通過頁面內嵌程式碼、標籤庫(比如JSTL,Java標準標籤庫)等手段,可以直接在頁面中混入Java代碼,從而簡化開發。但是jsp的本質還是servlet,我們可以用文字編輯器(比如:editplus、notepad++)開啟tomcat/work目錄下的工程目錄裡面的classes檔案就可以看到,實際上jsp還是被編譯產生了servlet類檔案(一個jsp對應產生一個servlet)。裡面也有init、destroy、service(這個與之前的Get、Post、Put、Delete請求不同)等方法。
下面先示範一段從MySQL資料庫中通過JDBC讀取資料顯示在頁面上的功能,讓讀者快速上手jsp。
開發環境:
1、MySQL5.7
2、MyEclipse 2014、JDK7.0
MySQL安裝後內建了一個MySQL Workbench工具,可以利用它建立資料庫。
點擊OK,出現如下介面。
輸入密碼即可登入到工作台主介面。
裡面有預設的world資料庫,可以在裡面對Tables(表)、Views(視圖)、Stored Procedures(預存程序)、Functions(函數)等進行相關操作。
當然你也可以在MySQL控制台用命令列對資料庫進行操作。
我們就使用MySQL裡面內建的world資料庫,查詢裡面的city這張表,把資料顯示出來(由於資料量比較大,只取前10條)。
先在MySQL的工具裡面用SQL查詢一下。
SQL語句測試通過,我們就可以在jsp頁面中直接使用了。
MyJsp.jsp完整代碼:
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%><%@ page import="java.sql.*" %><%String path = request.getContextPath();String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html> <head> <base href="<%=basePath%>"> <title>My JSP 'MyJsp.jsp' starting page</title> <meta http-equiv="pragma" content="no-cache"><meta http-equiv="cache-control" content="no-cache"><meta http-equiv="expires" content="0"> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"><meta http-equiv="description" content="This is my page"><!--<link rel="stylesheet" type="text/css" href="styles.css">--> </head> <body> <%Class.forName("com.mysql.jdbc.Driver");//載入驅動Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/world", "root", "123456");//建立串連Statement stmt = conn.createStatement();//建立執行者ResultSet rs = stmt.executeQuery("select * from city limit 0,10");//返回結果集(遊標)%><table cellpadding="0" cellspacing="0" border="1" width="500" ><%while (rs.next()) {%><tr><td><%=rs.getString(1) %></td><td><%=rs.getString(2) %></td></tr><%}%></table> </body></html>
可以看到,直接在jsp頁面中嵌入了Java代碼。由於我們使用的是JDBC查詢的MySQL資料庫,所以我們需要mysql-connector-java-5.1.9.jar這個Jar包作為驅動,直接放到該Web工程的WEB-INF/lib目錄下即可。
在瀏覽器中顯示的結果如下:
如我們所願,顯示出了前10條資料。
其實對比一下上面的頁面代碼,你會發現這種頁面內嵌程式碼的方式非常熟悉。在ASP、ASP.NET開發中都可以使用這種嵌入後台代碼的方式進行開發,所以基本上開發思想都可以互相套用。
由於篇幅原因,這篇部落格就先到這裡,下篇部落格重點講述jsp開發中的種種細節。
java web開發與jsp有什關係?
jsp是java的進階應用程式,要想學jsp,可以先瞭解一下html的基礎知識,再學習一下JDBC(串連資料庫的技術),之後就可以學習jsp編寫簡單的動態網頁了
學習JavaWeb,是先學習Servlet還是先學習JSP?
他們說得都太複雜,聽我的!你不是學完Java基礎了嗎?直接找本書看起,就行了,書上不管是先講什麼,都是循序漸進的,慢慢看就看懂了!
不想看書就看視頻,一步一步照著視頻看就行了!加油!