Java EE基礎知識學習(五)

在之前的學習中,我們主要學習的是JSP的一些使用方法,在這一節中我們將學習關於Servlet的編寫。

1、Servlet簡單編寫

JSP的本質就是Servlet,使用JSP編寫我們的Web應用可以幫助我們簡化應用表現層的代碼,如果我們直接使用Servlet來編寫和JSP同樣的一個頁面,你會發現我們需要使用大量的out語句來給瀏覽器輸出HTML語句。因此MVC規範出現以後,Servlet的責任明確下來,Servlet僅僅作爲控制器使用,不需要去生成表現層的代碼,這樣就讓我們的Servlet編寫變的更簡便了。

例如下面的代碼:
a.jsp:

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
form id="form1" action="b.jsp" method="post">
用戶名:<input type="text" name="username">
密碼:<input type="text" name="password">
<input type="submit" value="登錄">
</form>
</body>
</html>

b.jsp:

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
<%
String username=request.getParameter("username");
String password=request.getParameter("password");
%>

</form>
</body>
</html>

c.java:

public class Servlet extends HttpServlet{

    public void service(HttpServletRequest request,HttpServletResponse response)throws ServletException,java.io.IOException
    {
        request.setCharacterEncoding("GBK");
        response.setContentType("text/html;charSet=GBK");
        String username=request.getParameter("username");
        String password=request.getParameter("password");

          out.println("\r\n");
          out.println("<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\r\n");
          out.println("<html>\r\n");
          out.println("<head>\r\n");
          out.println("<meta http-equiv=\"Content-Type\" content=\"text/html; charset=ISO-8859-1\">\r\n");
          out.println("<title>Insert title here</title>\r\n");
          out.println("</head>\r\n");
          out.println("<body>\r\n");
          out.println("用戶名"+username);
          out.println("密碼"+password);
          out.println("</body>\r\n");
          out.println("</html>");
    }

}

在上述的三個文件中,a.jsp中我們定義了一個表單,讓用戶輸入用戶名和密碼,然後b.jsp可以獲取到用戶的輸入,如果我們想直接編寫一個Servlet獲取用戶的輸入並且將他們輸出到瀏覽器中,那我們就可以用c.java的這段代碼。
在c.java的代碼中,首先我們聲明瞭一個類叫Servlet並且它繼承了HttpServlet,在這個類中我們重寫service方法,在service方法中我們獲取了用戶的用戶名和密碼並且輸出到瀏覽其。通過這段代碼我們可以看出,如果我們要用Servlet同時負責表現層的代碼,會非常麻煩,每一行代碼都要用out輸出流輸出到瀏覽器中才能實現,所以我們在編寫Servlet時儘量避免編寫表現層的代碼。

2、Servlet的配置

Servlet主要有兩種配置方式:

  1. 在Servlet類中使用@WebServlet註解進行配置。
  2. 在web.xml中進行配置。

當我們使用Servlet類的@WebServlet註解進行配置的時候,將會用到以下幾條屬性:

  1. asyncSupported:指定該Servlet是否支持異步操作模式。
  2. displayName:指定該Servlet的顯示名。
  3. initParams:給該Servlet配置參數。
  4. loadOnStartup:將該Servlet配置爲load-on-startup的Servlet。
  5. name:指定該Servlet的名稱。
  6. urlPatterns/value:都是用來指定該Servlet處理的URL。

當我們使用註解配置Servlet時,要注意不要在web.xml的根元素中指定metadata-complete=”true”,同時不要在web.xml中配置這個Servlet。

如果我們要用web.xml配置,則要配置Servlet的名字和URL,分別對應於元素和元素。要想讓我們的Servlet頁面能夠響應用戶的請求,我們必須要配置URL。

例如下面的一段代碼就是用來在web.xml中配置一個Servlet的:

<?xml version="1.0" encoding="UTF-8"?>
<web-app
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instancehttp://www.springmodules.org/schema/cache/springmodules-cache.xsd http://www.springmodules.org/schema/cache/springmodules-ehcache.xsd"
    xmlns="http://xmlns.jcp.org/xml/ns/javaee"
    xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
    id="WebApp_ID" version="3.1">
    <display-name>WebTest</display-name>

    <servlet>
        <servlet-name>servlet</servlet-name>
        <servlet-class>Servlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>servlet</servlet-name>
        <url-pattern>/ser</url-pattern>
    </servlet-mapping>

</web-app>

3、JSP/Servlet的生命週期

在Servlet中主要有三個函數,分別是init、service和destroy函數,當客戶端第一次請求一個Servlet的時候,我們就會創建一個Servlet的實例並且使用init方法進行初始化並且使用service方法響應用戶,接下來每當客戶端請求一次這個Servlet,我們都用調用一次service方法來響應用戶,直到調用destroy方法銷燬了這個實例,通常我們在關閉Web應用的時候調用destroy方法。以上就是一個Servlet的生命週期,但是還有一種Servlet並不是在用戶請求時才創建實例,而是在Web應用啓動的時候就創建了實例,這種Servlet我們叫做load-on-startup Servlet。
要想配置一個Servlet成爲load-on-startup Servlet,我們可以在web.xml中用以下代碼配置:

    <servlet>
        <load-on-startup>1</load-on-startup>
    </servlet>

或者使用@WebServlet註解配置:

@WebServlet(loadOnStartup=1)

4、Servlet配置參數

配置Servlet時還可以增加額外的配置參數。具體使用方法如下:

在@WebServlet註解中配置:

@WebServlet(name="servlet",urlPatterns={"/ser"},
    initParams={
        @WebInitParam=(name="username",value="dasyang"),
        @WebInitParam=(name="password",value="12312")})
    }

然後可以使用以下代碼獲取參數:

String username=config.getInitParameter("username");
String password=config.getInitParameter("password");

或者我們可以在web.xml中配置額外參數:

    <servlet>
        <init-param>
            <param-name>username</param-name>
            <param-value>dasyang</param-value>
        </init-param>   
        <init-param>
            <param-name>password</param-name>
            <param-value>494894</param-value>
        </init-param>
    </servlet>
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章