Servlet從零開發案例

##1.開發Servlethtml

###第一個servlet程序java

執行頁面打印「hello world!」程序的功能。web

以後,在自定義的Servlet類中覆寫HttpServlet裏的doGet()方法,此方法定義以下:api

public void doGet(HttpServletRequest request , HttpServletResponse response)throws ServletExceptoin ,IOException {
}

在導包的時候應該按照如下的順序才稱爲標準:瀏覽器

  1. 先導入java的包,例如:java.util.IOException;
  2. 導入java的子類,例如:java.lang.reflect.*;
  3. 導入擴展包:javax.servlet.*;
  4. 導入擴展包的子包:javax.servlet.http.*;
  5. 導入用戶自定義的包,導入的順序,先導入父包,再導入子包。

範例:編譯一個servlet服務器

import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class FirstServlet extends HttpServlet
{
	public void doGet(HttpServletRequest request , HttpServletResponse response)throws ServletException ,IOException {
		PrintWriter out=response.getWriter();
		out.println("<html>");
		out.println("<head><title>Hello</title></head>");
		out.println("<body>");
		out.println("<center>");
		out.println("<h1>Hello World!</h1>");
		out.println("</center>");
		out.println("</body>");
		out.println("</html>");
		out.close();
	}
}

此servlet在用javac編譯時,會出現有幾個錯誤session

FirstServlet.java:3: 軟件包 javax.servlet 不存在
import javax.servlet.ServletException;
                    ^
FirstServlet.java:4: 軟件包 javax.servlet.http 不存在
import javax.servlet.http.HttpServlet;
                         ^
FirstServlet.java:5: 軟件包 javax.servlet.http 不存在
import javax.servlet.http.HttpServletRequest;
                         ^
FirstServlet.java:6: 軟件包 javax.servlet.http 不存在
import javax.servlet.http.HttpServletResponse;
                         ^
FirstServlet.java:8: 找不到符號
符號: 類 HttpServlet
public class FirstServlet extends HttpServlet
                                  ^
FirstServlet.java:10: 找不到符號
符號: 類 HttpServletRequest
位置: 類 FirstServlet
        public void doGet(HttpServletRequest request , HttpServletResponse resp
nse)throws ServletException ,IOException {
                          ^
FirstServlet.java:10: 找不到符號
符號: 類 HttpServletResponse
位置: 類 FirstServlet
        public void doGet(HttpServletRequest request , HttpServletResponse resp
nse)throws ServletException ,IOException {
                                                       ^
FirstServlet.java:10: 找不到符號
符號: 類 ServletException
位置: 類 FirstServlet
        public void doGet(HttpServletRequest request , HttpServletResponse resp
nse)throws ServletException ,IOException {

8 錯誤

以上的8個錯誤,都是針對於Servlet程序包的,爲何會有這樣的問題那? 實際上以前在講解JAVA基礎的時候說過JAVA的三個分支:app

  • Java SE
  • Java ME
  • Java EE 是在JAVA SE之上構建的,能夠理解爲JAVA SE的子類。此時導入的都是JAVA EE擴展出來的新包。

由於如今使用的是JAVA SE的編譯環境,因此這些包確定不存在,則確定沒法經過編譯,既然沒法經過,就要找到這些擴展的包,並將其設置到classpath之中,這樣纔可使用,那麼這些包在哪裏呢?jsp

分析:Tomcat的執行流程:.jsp > .java >.class 文件,能夠發現,須要將一個.java編譯成*.class,實際上編譯出來的程序集已經很是相似於Servlet類,那麼證實在Tomcat中可能就存在了這樣的擴展包。servlet-api.jar文件post

能夠把它放到D:\java\jre\ext目錄下,此文件夾表示的是存放全部的擴展文件。

Servlet在web.xml文件中的配置

<servlet>
	<servlet-name>hello</servlet-name>
	<servlet-class>FirstServlet</servlet-class>
</servlet>
<servlet-mapping>
	<servlet-name>hello</servlet-name>
	<url-pattern>/hello</url-pattern>
</servlet-mapping>

通過以上配置以後,瀏覽器就能夠經過/hello訪問以前編寫的內容HelloWorld程序。 從第一個程序中能夠清楚的發現,一個Servlet程序除了須要編寫類以外還必須對其進行映射的配置,以後瀏覽器經過映射路徑找到一個Servlet程序。

一個Servlet程序能夠同時配置多個名稱

<servlet>
	<servlet-name>hello</servlet-name>
	<servlet-class>FirstServlet</servlet-class>
</servlet>
<servlet-mapping>
	<servlet-name>hello</servlet-name>
	<url-pattern>/hello</url-pattern>
</servlet-mapping>
<servlet>
	<servlet-name>hello2</servlet-name>
	<servlet-class>FirstServlet</servlet-class>
</servlet>
<servlet-mapping>
	<servlet-name>hello2</servlet-name>
	<url-pattern>/hello</url-pattern>
</servlet-mapping>

##2.接受表單參數

既然在servlet中存在request對象,則能夠利用request對象來接受參數。

405錯誤,沒有方法支持。由於在以前編寫的Servlet程序中,使用到是doGet()處理, 因此只能處理get請求,若是要想能夠同時處理post提交,則要覆寫doPost()方法。

##3.Servlet的生命週期

##4.取得session對象

HttpSession是其類型,若是在一個servlet中要取得此對象,則必須依靠request對象完成,在此接口中有以下兩個方法: Public HttpSession getSession();表示直接取走當前的session Public HttpSession getSession(Boolean flag);取得session,若是session不存在,則建立,falg=true;

##5.取得application 對象

使用getServletContext()來代替application

ServletContext application = this.getServletContext();

##6.Servlet跳轉

  1. 客戶端跳轉,使用response對象的sendRedirect()方法進行跳轉。
  2. 服務器跳轉:requestDIspatcher接口完成
RequestDispatcher rd=request.getRequestDispatcher("tiao.jsp");
request.setAttribute("name","cs");
rd.forward(request, response);
相關文章
相關標籤/搜索