1. 程式人生 > >Servlet&jstl標籤

Servlet&jstl標籤

一.如何接受各種不同表單引數

頁面顯示:

<form action="/s1" method="post">
    <!-- name 是引數名 -->
    <input type="date" name="birthday" value="2018-09-15">
    <hr>
    男
    <!-- MALE  FEMALE -->
    <input type="radio" name="sex" value="男" checked>
    女
    <input type="radio" name="sex" value="女">

    <hr>
    唱歌<input type="checkbox" name="hobby" value="1">
    跳舞<input type="checkbox" name="hobby" value="2">
    睡覺<input type="checkbox" name="hobby" value="3">
    玩遊戲<input type="checkbox" name="hobby" value="4">

    <hr>
    <!-- option 標籤如果不提供 value屬性, 把標籤之間的文本當成value
         如果提供了value屬性,以value為準
    -->
    <select name="city">
        <option>北京</option>
        <option>天津</option>
        <option value="shanghai">上海</option>
        <option>武漢</option>
    </select>

    <hr>
    個人簡介:
    <textarea name="intro" cols="30" rows="10"></textarea>
    <input type="submit" value="提交">
</form>

 後臺接受:

@WebServlet(urlPatterns = "/s1")
public class Servlet1 extends HttpServlet {

    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        // 處理漢字亂碼
        req.setCharacterEncoding("utf-8");

        // 1) 日期型別的接收,需要注意轉換字串為java中的Date型別
        String birthday = req.getParameter("birthday");
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        try {
            Date date = sdf.parse(birthday);
            System.out.println(date);
        } catch (ParseException e) {
            e.printStackTrace();
        }
        // 2) 處理單選按鈕
        String sex = req.getParameter("sex");
        System.out.println(sex);

        // 3) 處理複選框, 注意處理null值(都沒有勾選時,就是null值)
        String[] hobbies = req.getParameterValues("hobby");
//        System.out.println(Arrays.toString(hobbies));
        if(hobbies != null) {
            for (String hobby : hobbies) {
                System.out.println(hobby);
            }
        }

        // 4)處理下拉列表
        String city = req.getParameter("city");
        System.out.println(city);

        // 5)處理文字域
        String intro = req.getParameter("intro");
        System.out.println(intro);
    }
}

二.jstl標籤

1.選擇語句(c:choose):

<c:choose>
  <c:when test="條件1">內容1</c:when>
  <c:when test="條件2">內容2</c:when>
  ...
  <c:when test="條件n">內容n</c:when>
  <c:otherwise>以上條件都不成立時</c:otherwise>
</c:choose>

2.輸出特殊內容(c:out)

   作用:可以對${}輸出的內容進行控制,可以控制是否忽略html程式碼,例:

<c:out escapeXML="false" value="${作用域變數}">//不忽略html
<c:out escapeXML="true" value="${作用域變數}"> //忽略html,(當做普通文字)

3.格式化日期(fmt:formatDate)

<fmt:formatDate value="日期物件" pattern="日期格式"/>

4.格式化數字(fmt:formatNumber)

<fmt:formatNumber value="數字物件" pattern="數字格式"/>

三.jsp遺留語言

1.jsp的指令碼

 <%  任意java程式碼 %>

弊端:當代碼越來越多時,使用jsp指令碼的方式,會造成專案程式碼難以維護

2.jsp表示式

<%=表示式%> 

作用:向頁面顯示值, 表示式不能以;結束

3.jsp指令

3.1  <%@ page contentType="頁面的內容型別和編碼"

          import="要匯入的java類"

          isELIgnored="是否忽略EL表示式的處理"

          errorPage="出現錯誤時,要跳轉的頁面"

          isErrorPage="用在錯誤頁面上,取值為true表示是錯誤頁面,這時候才能在頁面中使用exception變數" %>

3.2  匯入標籤庫

<%@ taglib prefix="字首" uri="標籤的唯一標識" %>

3.3  重用頁面上的一些標籤和程式碼

<%@ include file="另一個jsp頁面" %>

4.jsp宣告

       原理:(本質是一個Servlet)

              1.當首次訪問此jsp時,tomcat會把jsp轉譯為*.java的類(間接繼承自HttpServlet);

              2.再把*.java類編譯為*.class位元組碼;

              3.把載入到虛擬機器執行,生命週期類似於servlet的生命週期

      例:


public class 類名 extends HttpJspBase{ // HttpJspBase 又是繼承了HttpServlet
	
	public int i = 100;
	
	public int sum(int a, int b) {
		return a+b;
	}
	
	public void _jspService(HttpServletRequest request,
		HttpServletResponse response) {
		int i = 10;
		
		out.println(i++);
	}
}

5.9大隱式物件(無需宣告即可使用)

request 代表請求物件(可以獲取請求引數,將變數存入request作用域) response 代表響應物件(返回響應) out 代表響應的字元輸出流 pageContext 頁面上下文物件,可以間接獲得request等物件,並可以將變數存入page作用域

config jsp的配置資訊 page 當前jsp物件(this) exception 代表的是異常資訊(當頁面isErrorPage="true"時有效)

session 變數作用範圍是一次會話內有效 application 變數作用範圍是整個應用程式有效

page作用域: 變數作用範圍僅限於當前頁面 request作用域: 變數的作用範圍在一次請求內有效

5.jsp forward 6.jsp 兩個頁面使用的是同一個請求 servlet servlet forward x.jsp servlet與jsp使用的是同一個請求