天天看點

初識 JSP---(Servlet映射 / ServletRequest / get與post差別 / 解決亂碼)Servlet映射的細節HttpServletRequestget與post差別?解決亂碼格式

Servlet映射的細節

同一個Servlet映射多個URL上,即多個<Servlet-mapping>元素的<servlet-name>子元素的設定值可以是同一個Servlet的注冊名

第一種方法:

第二種方法:

第三種方法:通配符(*.do 或者 *.html)

第四種方法:通配符(/*)

HttpServletRequest

建立Servlet實作了Servlet接口

//servlet服務的方法

public void service(ServletRequest arg0, ServletResponse arg1)

throws ServletException, IOException {

// TODO Auto-generated method stub

System.out.println("servlet服務開啟了");

}

ServletRequest:封裝了請求的資訊,可以從中擷取請求的資訊

ServletRequest:

1.可以擷取請求的參數

String(傳回類型) getparameter(String name);

使用這個方法,隻有擷取單個字元串,若是請求參數有多個值(checkBox),該方法隻能擷取到第一個送出的值【最常用】

例:擷取a标簽中的參數

例:擷取單選框中的值

String[ ](傳回類型) getParameterValues(String name);根據請求的參數的名字,傳回請求參數對應的字元串數組【最常用】

例:擷取多選框中的值

HttpServletRequest:繼承了ServletRequest并基于Http協定

提供了對使用者的請求,資訊統一封裝的接口,一般用于Servlet容易提供的。裡面包含了大量的擷取Http請求的相關方法

2.擷取請求URL

StringBuffer getRequestURL();

3.擷取請求的URI

String getRequestURI();

4.擷取method的方法

String getMethod();

5.擷取servlet請求映射路徑

String getServletPath();

例:

結果

6.設定正文的編碼格式

String getCharsetEncoding(String s);

7.擷取正文的編碼格式

String getCharsetEncoding();

8.設定請求正文的MIME的類型,如果不知道類型,則傳回null

String setContentType();

9.擷取請求的正文的MIME的類型

String getContentType();

擷取request資訊

1.擷取請求正文的長度,若長度未知傳回-1

request.getContentLength();

2.擷取URI,URL是URI的自己,結果是:

request.getRequestURI();

3.擷取請求的方式

request.getMethod();

4.擷取所有的請求頭的名字,傳回值是枚舉類型

request.getHeaderNames();

5.通過請求頭的名字,擷取值

request.getHeader(name);

6.擷取項目的根路徑:結果為:/FormServlet

request.getContextPath();

get與post差別?

差別一:

get重點是在伺服器上擷取資源,post重點在于向伺服器發送資料

差別二:

get傳輸資料是通過url請求,以字段=value的形式,置于url後,并用“?”連接配接,多個請求資料間用“&”連接配接,如http://127.0.0.1:8020/JQueryDemo/HTML1.html?user=%E5%BC%A0%E4%B8%B9&pwd = 123這個過程是可見的。

post傳輸資料是通過http的post機制,将字段與對應的值封存找到請求的實體中,整體發送給伺服器,這個過程是對使用者不可見的。

差別三:

get傳輸資料量小,因為受url長度限制,但效率高。post傳輸資料量大,傳輸的資料量不是無限大的,是以上傳檔案時,隻能用post方法。

差別四:get是不安全的,因為URL是可見的,可能會洩露資訊。post較get安全性高

差別五:get方式隻能支援ASCII字元,向伺服器傳的中文字元,有可能會亂嗎。post支援标準字元集,可以正确傳遞中文字元

解決亂碼格式

1.在JSP頁面裡(預設編碼格式為:ISO8859-1)使用中文會亂碼,必須把

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>中的pageEncoding="ISO8859-1"改成pageEncoding="UTF-8";

2.對于不同的請求

(1)doGet:對于解決doPost的方式,doGet不适用

第一種方式:在 Tomcat 中的 conf 檔案夾下的 service.xml 中的如下标簽中加入 URIEncoding="UTF-8"

< Connector URIEncoding = "UTF-8" connectionTiomeout="20000" port="8080"  protocal="HTTP/1.1" redirectPort="8443"/>

request.setCharacterEncoding(“UTF-8”);

通過修改tomcat的server.xml中的代碼:useBodyEncodingForURI=“true”

<Connector port="8088" protocol="HTTP/1.1"

connectionTimeout="20000"

redirectPort="8443"

useBodyEncodingForURI=“true”/>

還需要加上

response.setContentType(“text/html;charset-UTF-8”);

(2)doPost:

隻要回去請求之前調用:request.setCharacterEncoding(“UTF-8”);

在響應頁面之前調用:response.setContentType(“text/html;charset=UTF-8”);