日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

第十二章_请求和响应的装饰

發布時間:2023/12/20 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 第十二章_请求和响应的装饰 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

12.1Decorator模式

即使沒有某一個對象的類的源代碼,甚至即便這個類是聲明為final的,Decorator模式和Wrapper模式都允許裝飾或包裝這個對象。

Decorator模式適用于無法使用繼承的情況(比如,所指對象的類為final),或者你不想親自創建對象,而是想從另一個子系統中獲取。例如,Servlet容器創建了一個ServletRequest和一個ServletResponse,并將他們傳給Servletservice方法。改變ServletRequestServletResponse行為的唯一方法是將他們包在其他對象中。唯一必須滿足的條件是,被裝飾對象的類要實現一個接口,并且要包裝的方法必須從這個接口處繼承。

?

12.2Servlet?Wrapper

Servlet?API中提供了4個類,他們很少用到,但是功能非常強大,分別是:ServletRequestWrapperServletResponseWrapper,以及HttpServletRequestWrapperHttpServletResponseWrapper

ServletRequestWrapper使用起來非常方便,由于它為調用被包裝ServletRequest中的對等方法的每一個方法都提供了默認實現。通過繼承則只好直接實現ServletRequest,并為接口中的每一個方法都提供實現。

?

12.3、范例:AutoCorrect過濾器

web應用程序中,用戶經常會在輸入值時,在其前面或者后面添加一些空格,甚至在詞與詞之間也會有多余空格。你又不想到應用程序的逐個Servlet中進行檢查并刪除多余的空格。那么本屆介紹的AutoCorrect過濾器的特性就可以幫你完成這些工作。這個過濾器中包含一個HttpServletRequestWrapper的子類,命名為AutoCorrectHttpServletRequestWrapper,并覆蓋返回一個或多個參數值的下列方法:getParametergetParameterValuesgetParameterMap

AutoCorrectFilter.Java

[html]?view plaincopy print?
  • package?filter;??
  • ??
  • import?java.io.IOException;??
  • import?java.util.ArrayList;??
  • import?java.util.Collection;??
  • import?java.util.HashSet;??
  • import?java.util.Map;??
  • import?java.util.Set;??
  • ??
  • import?javax.servlet.Filter;??
  • import?javax.servlet.FilterChain;??
  • import?javax.servlet.FilterConfig;??
  • import?javax.servlet.ServletException;??
  • import?javax.servlet.ServletRequest;??
  • import?javax.servlet.ServletResponse;??
  • import?javax.servlet.annotation.WebFilter;??
  • import?javax.servlet.http.HttpServletRequest;??
  • import?javax.servlet.http.HttpServletRequestWrapper;??
  • @WebFilter(filterName?=?"AutoCorrectFilter",?urlPatterns?=?{"/*"})??
  • public?class?AutoCorrectFilter?implements?Filter{??
  • ??
  • ????@Override??
  • ????public?void?destroy()?{??
  • ????????//?TODO?Auto-generated?method?stub??
  • ??????????
  • ????}??
  • ??????
  • ????@Override??
  • ????public?void?init(FilterConfig?arg0)?throws?ServletException?{??
  • ????????//?TODO?Auto-generated?method?stub??
  • ??????????
  • ????}??
  • ??
  • ????@Override??
  • ????public?void?doFilter(ServletRequest?request,?ServletResponse?response,??
  • ????????????FilterChain?filterChain)?throws?IOException,?ServletException?{??
  • ????????HttpServletRequest?httpServletRequest?=?(HttpServletRequest)request?;??
  • ????????AutoCorrectHttpServletRequestWrapper?wrapper?=?new???
  • ????????????????AutoCorrectHttpServletRequestWrapper(httpServletRequest)?;??
  • ????????filterChain.doFilter(wrapper,?response);??
  • ????}??
  • ??????
  • ????class?AutoCorrectHttpServletRequestWrapper?extends?HttpServletRequestWrapper{??
  • ????????private?HttpServletRequest?httpServletRequest?;??
  • ????????public?AutoCorrectHttpServletRequestWrapper(HttpServletRequest?httpServletRequest)?{??
  • ????????????super(httpServletRequest);??
  • ????????????this.httpServletRequest?=?httpServletRequest?;??
  • ????????}??
  • ????????@Override??
  • ????????public?String?getParameter(String?name)?{??
  • ????????????return?autoCorrect(httpServletRequest.getParameter(name))?;??
  • ????????}??
  • ????????@Override??
  • ????????public?String[]?getParameterValues(String?name)?{??
  • ????????????//?TODO?Auto-generated?method?stub??
  • ????????????return?autoCorrect(httpServletRequest.getParameterValues(name));??
  • ????????}??
  • ????????@Override??
  • ????????public?Map<String,?String[]>?getParameterMap()?{??
  • ????????????//?TODO?Auto-generated?method?stub??
  • ????????????final?Map<String,?String[]>?parameterMap?=?httpServletRequest.getParameterMap()?;??
  • ????????????Map<String,?String[]>?newMap?=?new?Map<String,?String[]>(){??
  • ????????????????@Override??
  • ????????????????public?int?size()?{??
  • ????????????????????return?parameterMap.size();??
  • ????????????????}??
  • ??
  • ????????????????@Override??
  • ????????????????public?boolean?isEmpty()?{??
  • ????????????????????return?parameterMap.isEmpty();??
  • ????????????????}??
  • ??
  • ????????????????@Override??
  • ????????????????public?boolean?containsKey(Object?key)?{??
  • ????????????????????return?parameterMap.containsKey(key);??
  • ????????????????}??
  • ??
  • ????????????????@Override??
  • ????????????????public?boolean?containsValue(Object?value)?{??
  • ????????????????????return?parameterMap.containsValue(value);??
  • ????????????????}??
  • ??
  • ????????????????@Override??
  • ????????????????public?String[]?get(Object?key)?{??
  • ????????????????????return?autoCorrect(parameterMap.get(key));??
  • ????????????????}??
  • ??
  • ????????????????@Override??
  • ????????????????public?String[]?put(String?key,?String[]?value)?{??
  • ????????????????????return?parameterMap.put(key,?value);??
  • ????????????????}??
  • ??
  • ????????????????@Override??
  • ????????????????public?String[]?remove(Object?key)?{??
  • ????????????????????return?parameterMap.remove(key);??
  • ????????????????}??
  • ??
  • ????????????????@Override??
  • ????????????????public?void?putAll(Map<??extends?String,???extends?String[]>?m)?{??
  • ????????????????????parameterMap.putAll(m);??
  • ????????????????}??
  • ??
  • ????????????????@Override??
  • ????????????????public?void?clear()?{??
  • ????????????????????parameterMap.clear();??
  • ????????????????}??
  • ??
  • ????????????????@Override??
  • ????????????????public?Set<String>?keySet()?{??
  • ????????????????????return?parameterMap.keySet();??
  • ????????????????}??
  • ??
  • ????????????????@Override??
  • ????????????????public?Collection<String[]>?values()?{??
  • ????????????????????return?autoCorrect(parameterMap.values());??
  • ????????????????}??
  • ??
  • ????????????????@Override??
  • ????????????????public?Set<java.util.Map.Entry<String,?String[]>>?entrySet()?{??
  • ????????????????????return?autoCorrect(parameterMap.entrySet());??
  • ????????????????}??
  • ??????????????????
  • ????????????}?;??
  • ????????????return?newMap?;??
  • ????????}??
  • ??????????
  • ????}???
  • ????private?String?autoCorrect(String?value){??
  • ????????if(value?==?null){??
  • ????????????return?null?;??
  • ????????}??
  • ????????value?=?value.trim()?;??
  • ????????int?length?=?value.length()?;??
  • ????????StringBuilder?temp?=?new?StringBuilder()?;??
  • ????????boolean?lastCharWasSpace?=?false?;??
  • ????????for(int?i?=?0;?i<length;?i++){??
  • ????????????char?c?=?value.charAt(i)?;??
  • ????????????if(c?==?'?'){??
  • ????????????????if(!lastCharWasSpace){??
  • ????????????????????temp.append(c)?;??
  • ????????????????}??
  • ????????????????lastCharWasSpace?=?true?;??
  • ????????????}else{??
  • ????????????????temp.append(c)?;??
  • ????????????????lastCharWasSpace?=?false?;??
  • ????????????}??
  • ????????}??
  • ????????return?temp.toString()?;??
  • ????}??
  • ????private?String[]?autoCorrect(String[]?values){??
  • ????????if(values?!=?null){??
  • ????????????int?length?=?values.length?;??
  • ????????????for(int?i=0;?i<length;?i++){??
  • ????????????????values[i]?=?autoCorrect(values[i])?;??
  • ????????????}??
  • ????????????return?values?;??
  • ????????}??
  • ????????return?null?;??
  • ????}??
  • ????@SuppressWarnings("unused")??
  • ????private?Collection<String[]>?autoCorrect(Collection<String[]>?valueCollection){??
  • ????????Collection<String[]>?newCollection?=?new?ArrayList<String[]>()?;??
  • ????????for(String[]?values?:?valueCollection){??
  • ????????????newCollection.add(autoCorrect(values))?;??
  • ????????}??
  • ????????return?newCollection?;??
  • ????}??
  • ????private?Set<Map.Entry<String,?String[]>>?autoCorrect(Set<Map.Entry<String,?String[]>>?entrySet){??
  • ????????Set<Map.Entry<String,?String[]>>?newSet?=?new?HashSet<Map.Entry<String,?String[]>>()?;??
  • ????????for(final?Map.Entry<String,?String[]>?entry?:?entrySet){??
  • ????????????Map.Entry<String,?String[]>?newEntry?=?new?Map.Entry<String,?String[]>()?{??
  • ????????????????@Override??
  • ????????????????public?String?getKey()?{??
  • ????????????????????return?entry.getKey();??
  • ????????????????}??
  • ????????????????@Override??
  • ????????????????public?String[]?getValue()?{??
  • ????????????????????return?autoCorrect(entry.getValue());??
  • ????????????????}??
  • ????????????????@Override??
  • ????????????????public?String[]?setValue(String[]?value)?{??
  • ????????????????????return?entry.setValue(value);??
  • ????????????????}??
  • ????????????};??
  • ????????????newSet.add(newEntry)?;??
  • ????????}??
  • ????????return?newSet?;??
  • ????}??
  • }??

  • test1.jsp [html]?view plaincopy print?
  • <%@?page?language="java"?import="java.util.*"?pageEncoding="UTF-8"%>??
  • <%??
  • 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>User?Form</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>??
  • ????<form?action="test2.jsp"?method="post">??
  • ????????<table>??
  • ????????????<tr>??
  • ????????????????<td>Name:</td>??
  • ????????????????<td><input?name="name"/></td>??
  • ????????????</tr>??
  • ????????????<tr>??
  • ????????????????<td>Address:</td>??
  • ????????????????<td><input?name="address"/></td>??
  • ????????????</tr>??
  • ????????????<tr>??
  • ????????????????<td?colspan="2">??
  • ????????????????????<input?type="submit"?value="Login"/>??
  • ????????????????</td>??
  • ????????????</tr>??
  • ????????</table>??
  • ????</form>??
  • ??</body>??
  • </html>??
  • test2.jsp

    [html]?view plaincopy print?
  • <%@?page?language="java"?import="java.util.*"?pageEncoding="UTF-8"%>??
  • <%@?taglib?prefix="fn"?uri="http://java.sun.com/jsp/jstl/functions"?%>??
  • <%??
  • 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>Form?Values</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>??
  • ????<table>??
  • ????????????<tr>??
  • ????????????????<td>Name:</td>??
  • ????????????????<td>??
  • ????????????????????${param.name}??
  • ????????????????????(length:${fn:length(param.name)})??
  • ????????????????</td>??
  • ????????????</tr>??
  • ????????????<tr>??
  • ????????????????<td>Address:</td>??
  • ????????????????<td>??
  • ????????????????????${param.address}??
  • ????????????????????(length:${fn:length(param.address)})??
  • ????????????????</td>??
  • ????????????</tr>??
  • ????????</table>??
  • ??</body>??
  • </html>??

  • 運行結果:


    總結

    以上是生活随笔為你收集整理的第十二章_请求和响应的装饰的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。