一般ページ2

サーブレット上の私たちの共通の新ホームページ1ブログに基づき1

 

パッケージcom.zking.web。

インポートにjava.io.IOException; 
輸入はjava.util.List; 
輸入java.util.Map; 

インポートのjavax.servlet.Servlet。
輸入javax.servlet.ServletException; 
輸入javax.servlet.annotation.WebServlet; 
輸入javax.servlet.http.HttpServlet。
インポートのjavax.servlet.http.HttpServletRequest; 
インポートのjavax.servlet.http.HttpServletResponse; 

輸入com.zking.dao.BookDao。
輸入com.zking.entity.Book。
輸入com.zking.util.PageBean。

/ ** 
 *サーブレットの実装クラスBookServet 
 * / 
@WebServlet( "/ BookServet") 
パブリッククラスBookServetが延びるのHttpServletは、サーブレット{実装します
	プライベート静的最終長いserialVersionUIDの= 1L; 
    プライベートBookDao bookDao =新しいBookDao();
	
    / ** 
     * @seeのHttpServlet#HttpServletを()
     * / 
    公共BookServet(){ 
        スーパー(); 
        // TODO自動生成コンストラクタスタブ
    } 

	/ ** 
	 * @seeのHttpServlet#のdoGet(HttpServletRequestのリクエスト、HttpServletResponseの応答)
	 * / 
	保護されたボイドのdoGet(HttpServletRequestのリクエスト、HttpServletResponseの応答)ServletExceptionがは、IOException {スロー
		// TODO自動生成方法スタブを
   doPostメソッド(リクエスト、レスポンス)。
	}
 
	/ ** 
	 * @seeのHttpServlet#のdoPost(HttpServletRequestのリクエスト、HttpServletResponseの応答)
	 * / 
	ボイドのdoPost(HttpServletRequestのリクエスト、HttpServletResponseの応答)ServletExceptionがをスローは、IOException {保護
		// TODO自動生成方法stuboの 
	e.printStackTrace();
   ストリングBNAME = request.getParameter( "BNAME")。
   ブックブック=新しいブック(); 
   book.setBname(BNAME)。
   PageBeanビーン=新しいPageBean()。
  
   試す{ 
	   bean.setRequest(リクエスト)。
	一覧<ブック>リスト= this.bookDao.list(書籍、豆); 
   request.setAttribute( "ブックリスト"、リスト)。
   request.setAttribute( "pagebean"、豆)。
  
   request.getRequestDispatcher( "/ book.jsp")、前方(リクエスト、レスポンス)。
   }キャッチ(例外e){ 
	// TODO自動生成されたcatchブロック
	
	} 

}

  

 2.変換PageBen

com.zking.utilパッケージ、

インポートのjava.util.HashMap; 
インポートjava.util.Map; 

インポートするjavax.servlet.http.HttpServletRequest; 

/ ** 
 * [ツール]タブ
 * 
 * / 
パブリッククラスPageBean { 

	プライベートページ= INT 1。 //ページ

	プライベートint型の列= 10; //ページサイズ

	プライベートint型0 =合計;レコード//総数
	
	プライベート地図<文字列、文字列[]> =新しい新しいPAMAPのHashMap <文字列、文字列[]>(); 
	プライベート文字列のURL ; 
	
	
   公共ボイドのSetRequest(HttpServletRequestのリクエスト){ 
	  
	   すべてのパラメータ//を要求セーブ
	   this.setPaMap(request.getParameterMap()); 
       (。request.getRequestURL()のtoString())this.setUrlを; 
       // JSPページへコントロールの改ページかどうか
       this.setPagination(request.getParameter( "改ページ")); 
        //在JSP页面控制一页展示多少条
       this.setRows(request.getParameter( "行")); 
       this.setPage(request.getParameter( "ページ")); 
   } 
	 
	プライベートボイドsetPageで(文字列のページ){ 
  	this.page = StringUtils.isNotBlank(ページ)?Integer.valueOf(ページ):this.page。
} 

	プライベートボイドsetPagination(文字列の改ページ){ 
     this.pagination = StringUtils.isNotBlank(ページ区切り)?! "偽" .equals(ページネーション):this.pagination。
     
} 

	プライベートボイドsetRows(文字列){ 
	  this.rows = StringUtils.isNotBlank(行)?Integer.valueOf(行):this.rows。
    } 
  
	パブリックマップ<文字列、文字列[]>

	公共ボイドsetPaMap(MAP <文字列、文字列[]> paMap){ 
		this.paMap = paMap。
	} 

	パブリック文字列のgetURL(){ 
		戻り先URL。
	} 

	公共ボイドてsetURL(文字列のURL){ 
		this.url = URL。
	} 

	プライベートブールページネーション= TRUE; //是否分页

	パブリックPageBean(){ 
		スーパー()。
	} 

	公共INT GETPAGE(){ 
		戻りページ。
	} 

	公共ボイドsetPageで(INTページ){ 
		this.page =ページ。
	} 

	公共INT GETROWS(){ 
		戻り行。
	} 

	(行INT)公共ボイドsetRows { 
		this.rowsの=行。
	} 

	公共INT getTotal(){  
		合計を返します。
	}
 
	公共ボイドsetTotal(INT合計){ 
		this.total =総。
	} 

	公共ボイドsetTotal(文字列の合計){ 
		this.total = Integer.parseInt(合計)。
	} 

	パブリックブールisPagination(){ 
		ページネーションを返します。
	} 

	公共ボイドsetPagination(ブールページネーション){ 
		this.pagination =ページネーション。
	} 

	/ ** 
	 *获得起始记录的下标
	 * 
	 * @return 
	 * / 
	パブリックINT getStartIndex(){ 
		リターン(this.page - 1)* this.rows。
	} 

	@Override 
	パブリック文字列のtoString(){ 
		リターン"PageBean [ページ=" +ページ+ "行=" +行+ "合計=" + +合計"ページネーション="
	} 
 
	 
	 / ** 
	  *ページの最大数を取得
	  * @return 
	  * /
	公共INT getMaxPage(){ 
		this.total%this.rows == 0を返しますか?this.total/this.rows:(this.total/this.rows)+1; 
	} 
	/ ** 
	 *获取下一页
	 * @return 
	 * / 
	パブリックINT getNextPage(){ 
		this.page <this.getMaxPage()を返しますか?this.page + 1:this.page。
		
	} 
	/ ** 
	 *获取上一页
	 * @return 
	 * / 
   パブリックINT getPreviousPage(){ 
	   > 1 this.pageを返しますか?this.page-1:this.page。
   } 
	
}

 3カスタムページラベルを作成します。

3.1

新しいヘルパークラスPageTag.java

 

パッケージcom.zking.tag。

インポートにjava.io.IOException; 
輸入java.util.Map; 
輸入java.util.Map.Entry。
輸入java.util.Set; 

輸入javax.servlet.jsp.JspException。
インポートするjavax.servlet.jsp.JspWriter。
輸入javax.servlet.jsp.tagext.BodyTagSupport。

輸入com.zking.util.PageBean。

パブリッククラスPageTagはBodyTagSupport {延び
	
	
	、プライベートPageBean Beanを 

	公共PageBean getBean(){ 
		戻りビーン。
	} 

	公共ボイドsetBean(PageBean豆){ 
		this.bean =ビーン。
	} 
	
	@Override 
	公共INTのdoStartTag()JspException {スロー
     )(のJspWriterアウト= pageContext.getOutと、
	  {試します
		out.print(tohtml())。
	}キャッチ(IOExceptionを電子){ 
		// TODO自動生成キャッチブロック
		e.printStackTrace(); 
	} 
	  )(super.doStartTagを返します。
	} 
	
	プライベート文字列tohtml(){ 
		StringBuilderのSB =新規のStringBuilder(); 
		//拼接下一次发送请求所要提交的隐藏的形態表单
	   sb.append( "<フォームID = 'pageBeanForm'アクション= ' "+ bean.getUrl()+"'メソッド= 'ポスト'>"); 
	   sb.append( "の<input type = 'hidden'が名= 'ページ'>"); 
	  
	   地図<文字列、文字列[]> paMap = bean.getPaMap()。
	   (!paMap = NULL && paMap.size()> 0){もし
		   セットの<entry <文字列、文字列[] >>のentrySet = paMap.entrySet()。
	   (エントリーの<文字列、文字列[]>
	entrySet){ //なぜ一人でそれを割り当てる必要がありますか?最後の要求は、1ページ目のデータであるため、要求に対応する値は、別個に割り当てること、同じではなく前後に、次のページは、このページから、第二の可能性が
		   (もし! "ページ" .equals(entry.getKey())){ 
			のために(文字列のval:entry.getValue()){ 
				sb.append( "の<input type = 'hidden'が名= '" + entry.getKey( )+ "」値= ' "+ヴァル+"'>"); 
			} 
		} 
	} 
	   } 
	   sb.append( "</フォーム>"); 
	  
		//拼接分页条
	   sb.append( "<divのスタイル= 'テキスト整列:右;フォントサイズ:12ピクセル;'>"); 
	   sb.append( "每页"+ bean.getRows()+"条、共"+ bean.getTotal()+"条、第"+ bean.getPage()+"页、共" + bean.getMaxPage() + "页<a href='javascript:gotoPage(1)'>首页"); 
	   sb.append( "</a>の<A")。
	   sb.append(」HREF = 'javascriptの:gotoPage( "+豆。getNextPage()+ "')>下一页</a>の<A"); 
	   sb.append( "HREF = 'javascriptの:gotoPage( "+ bean.getMaxPage()+")'>尾页</a>の<INPUT TYPE = 'テキスト'")。
	   
	   sb.append( "ID = 'skipPage'")。
	   sb.append( "スタイル= 'テキスト整列:センター;フォントサイズ:12ピクセル、幅は50px;'> <A")。
	   sb.append( "HREF = 'javascriptの:skipPageは()'> </a>を行きます"); 
	   sb.append( "</ DIV>"); 
	   //拼接所需要的JS代码
	   sb.append( "<スクリプトタイプ= 'テキスト/ javascriptの'>"); 
	   sb.append( "関数gotoPage(ページ){")。
	   sb.append( "のdocument.getElementById( 'pageBeanForm')page.value =ページ;"); 
	   sb.append( "のdocument.getElementById( 'pageBeanForm'))(提出します。"); 
	   sb.append( "}"); 
	   sb.append( "機能skipPage(){")。
	   sb.append( "VARページ=のdocument.getElementById( 'skipPage')値;。");
	   sb.append( "もし(ページ||ますisNaN(ページ)||のparseInt(ページ)<1つの||のparseInt(ページ)>! "+ bean.getMaxPage()+"){"); 
	   sb.append( "返します;"); 
	   sb.append( "}"); 
	   sb.append( "gotoPage(ページ);"); 
	   sb.append( "}"); 
	   sb.append( "</ SCRIPT>"); 
	   sb.toStringを返します(); 
	
	} 
}

  3.2作成TLDファイルindex.tld(プロパティ-1対応のクラスにアシスタント)

<タグ> 
  <名前>ページ</名前> 
  <タグ・クラス> com.zking.tag.PageTag </タグ・クラス> 
  <ボディ・コンテンツ> JSP </ボディ・コンテンツ> 
  <属性> 
    <名前>豆</名前> 
     <必要>真</>必要
     <rtexprvalue>真</ rtexprvalue> 
  </属性> 
  </タグ>

  

中国のゴミ問題4.オフフィルターEncodingFiter.java契約

servlet3.0注釈技術を使用して@WebFilter(urlPatterns = "/ *")。
パッケージcom.zking.util。

インポートにjava.io.IOException; 
インポートするjava.util.Iterator; 
輸入java.util.Map; 
輸入java.util.Set; 

インポートは、javax.servlet.Filter; 
輸入れるjavax.servlet.FilterChain。
インポートするjavax.servlet.FilterConfig。
輸入javax.servlet.ServletException; 
輸入javax.servlet.ServletRequest; 
インポートのjavax.servlet.ServletResponse。
輸入javax.servlet.annotation.WebFilter。
インポートのjavax.servlet.http.HttpServletRequest; 
インポートのjavax.servlet.http.HttpServletResponse; 

/ ** 
 *中文乱码处理
 * 
 * / 
@WebFilter(urlPatterns = "/ *") 
パブリッククラスEncodingFiterは{フィルタを実装
	プライベート文字列のエンコード= "UTF-8"; //默认字符集

	パブリックEncodingFiter(){ 
		スーパー()。
	} 

	公共ボイドは(){破壊
	} 

	公共ボイドのdoFilter(のServletRequest要求たServletResponse応答
			れるFilterChain鎖)にIOException、ServletExceptionが{スロー
		のHttpServletRequest REQ =(HttpServletRequestの)要求を、
		HttpServletResponseのRES =(HttpServletResponseの)応答。

		//中文处理必须放到chain.doFilter(リクエスト、レスポンス)方法前面
		するres.setContentType( "テキスト/ HTML;のcharset =" + this.encoding)。
		IF(。req.getMethod()equalsIgnoreCase( "POST")){ 
			req.setCharacterEncoding(this.encoding)。
		}他{  
			地図マップreq.getParameterMap =(); //すべてのパラメータ名=パラメータ値を保存する(アレイ)地図コレクション
			= map.keySet(設定セット); //取出所有参数名
			が(set.iteratorを=反復子)。
			一方、(it.hasNext()){
				名前=文字列(String)をit.next(); 
				map.get(名)などのString []の値=(文字列[]); //抽出されたパラメータ値:[注このパラメータは配列である] 
				(I 0 = int型のために、私はvalues.lengthを<; Iは++){ 
					値[I] =新しい新しい文字列(値[I] .getBytes( "ISO-8859-1")、
							this.encoding); 
				} 
			} 
		} 

		chain.doFilter(リクエスト、レスポンス)。
	} 

	公共ボイドのinit(に、FilterConfigに、FilterConfig)はServletExceptionが{スロー
		列filterConfig.getInitParameter S =( "エンコードを"); //は、web.xmlファイルを構成キャラクタ・セット読み取り
		(ヌル= S && s.trim(IF )を!!。 等号( "")){ 
			this.encoding s.trim =(); 
		} 
	} 

}

  新しいテストのjsp

 

<%ページ言語@ = "javaの" contentTypeの= "text / htmlの;のcharset = UTF-8" 
    pageEncodingは= "UTF-8" %> 
    <%@ページisELIgnored = "false"に%> 
    <%@ taglibの接頭辞= "C "URI =" http://java.sun.com/jsp/jstl/core "%> 
    <%@ taglibの接頭辞= "Z"のuri = "/ MyJSP" %> 
<DOCTYPE用HTML PUBLIC!" - // W3C / / DTD HTML 4.01移行// EN " "http://www.w3.org/TR/html4/loose.dtd"> 
<HTML> 
<HEAD> 
<META HTTP-当量= "Content-Typeの"コンテンツ="テキスト/ HTML;のcharset = UTF-8" > 
<タイトル>ここで挿入タイトル</ TITLE> 
</ HEAD> 
<BODY> 
<H2>小说目录</ H2> 
	<BR>

	<フォームアクション= "$ {pageContext.request.contextPath} / BookServet" 
		METHOD = "POST"> 
		书名:の<input type = "text"の名= "BNAME">の<input type = "送信"
			値= "确定">  
	</フォーム>
	<テーブル境界= "1"幅= "100%"> 
		<TR> 
			<TD>编号</ TD> 
			<TD>名称</ TD> 
			<TD>价格</ TD> 
		</ TR > 
		<C:のforeachアイテム= "$ {ブックリスト}" VAR = "B"> 
			<TR> 
				<TD> $ {b.bid} </ TD> 
				<TD> $ {b.bname} </ TD> 
				<TD > $ {b.price} </ TD> 
			</ TR> 
		</ C:forEachの> 
	</ TABLE> 
<Z:ページBean = "$ {pagebean}"> </ Z:ページ> 
	
</ body> 
</ HTML>

  結果は以下の通りであります

すべてのデータショー

ファジィクエリ結果

 

すべてのデータの2ページ目を問い合わせます

 最終データ

 これは、単一の一般的なページング効果の全体のテーブルです

主要就是将上一次查询请求再发一次
String contextPath = req.getContextPath();//根目录
String url = req.getServletPath();//请求的地址
req.getRequestURL() //获取请求全路径
Map<String, String[]> parameterMap = req.getParameterMap();//获得请求中的所有参数

 

  注1:不能将分页表单嵌套到其它表单中,否则不能提交表单!!!

 

おすすめ

転載: www.cnblogs.com/xmf3628/p/11069982.html