Общий Page 2

1. На основе нашего общего New Home Page 1 блог на Servlet

 

пакет 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; 

/ ** 
 * Servlet класс реализации BookServet 
 * / 
@WebServlet ( "/ BookServet") 
общественный класс BookServet расширяет HttpServlet реализует Servlet {
	частный статический окончательный долго 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 ( "Booklist", список); 
   request.setAttribute ( "pagebean", бобовые); 
  
   request.getRequestDispatcher ( "/ book.jsp") вперед (запрос, ответ). 
   } Задвижка (Исключение е) { 
	// TODO автоматическая генерация улова блок 
	
	} 

}

  

 2. Преобразование PageBen

com.zking.util пакет; 

Импорт java.util.HashMap; 
Импорт java.util.Map; 

Импорт javax.servlet.http.HttpServletRequest; 

/ ** 
 * Инструменты вкладка 
 * 
 * / 
класс PageBean общественного { 

	Private Page = INT 1. // страница 

	частных ИНТ строк = 10; // размер страницы 

	частное ИНТ всего = 0; // общее количество записей 
	
	Private карте <String, String []> = новый новый PAMAP HashMap <String, String []> (); 
	Private Строка URL ; 
	
	
   общественная пустота SetRequest (запрос HttpServletRequest) { 
	  
	   все параметры // сохранить запрос 
	   this.setPaMap (request.getParameterMap ()); 
       this.setUrl (request.getRequestURL () ToString ().); 
       // JSP - страницы в контролирует ли пагинация
       this.setPagination (request.getParameter ( "разбиение на страницы")); 
        //在JSP页面控制一页展示多少条
       this.setRows (request.getParameter ( "строк")); 
       this.setPage (request.getParameter ( "страницы")); 
   } 
	 
	Частная пустота setPage (String страница) { 
  	this.page = StringUtils.isNotBlank (страницы)? Integer.valueOf (страница): this.page; 
} 

	Частная пустота setPagination (String пагинация) { 
     this.pagination = StringUtils.isNotBlank (пагинация)? ! "ложный" .equals (пагинация): this.pagination; 
     
} 

	Частной недействительная setRows (String строка) { 
	  this.rows = StringUtils.isNotBlank (строки)? Integer.valueOf (строки): this.rows; 
    } 
  
	Публичная Map <String, String []>
 
	Общественного недействительными setPaMap (карта <String, String []> paMap) { 
		this.paMap = paMap; 
	} 

	Строка GetURL общественности () { 
		возвращение URL; 
	} 

	Общественного недействительными setUrl (String URL) { 
		this.url = URL; 
	} 

	Частное логическое разбиение на страницы = истина; //是否分页

	общественного PageBean () { 
		супер (); 
	} 

	Общественного ИНТ GetPage () { 
		возвращение страницы; 
	} 

	Общественной недействительная setPage (интермедиат страница) { 
		this.page = страница; 
	} 

	Общественного INT GetRows () { 
		возвращают строки; 
	} 

	Общественной недействительная setRows (INT строк) { 
		this.rows = строки; 
	} 

	Общественного ИНТ getTotal () { 
		вернуться общее;
	} 

	Общественного недействительный setTotal (интермедиат всего) { 
		this.total = общее; 
	} 

	Общественного недействительными setTotal (строка всего) { 
		this.total = Integer.parseInt (всего); 
	} 

	Общественного логический isPagination () { 
		вернуть разбиение на страницы; 
	} 

	Общественного недействительный setPagination (логическое разбиение на страницах) { 
		this.pagination = нумерация страниц; 
	} 

	/ ** 
	 *获得起始记录的下标
	 * 
	 * @return 
	 * / 
	общественного ИНТ getStartIndex () { 
		возвращение (this.page - 1) * this.rows; 
	} 

	@Override 
	общественного Строка ToString () { 
		возвращение "PageBean [страница =" + страница + "строки =" + строк + "общая =" + общее + "разбиение на страницы ="
	} 
 
	 
	 / ** 
	  * получить максимальное количество страниц 
	  * @return 
	  * /
	Общественного ИНТ getMaxPage () { 
		вернуться this.total% this.rows == 0? this.total/this.rows: (this.total/this.rows) + 1; 
	} 
	/ ** 
	 *获取下一页
	 * @return 
	 * / 
	общественного ИНТ getNextPage () { 
		вернуться this.page <this.getMaxPage ()? this.page + 1: this.page; 
		
	} 
	/ ** 
	 *获取上一页
	 * @return 
	 * / 
   общественного ИНТ getPreviousPage () { 
	   вернуться this.page> 1? 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 боба; 

	общественный PageBean getBean () { 
		возвращение фасоль; 
	} 

	Общественная недействительная setBean (PageBean фасоль) { 
		this.bean = боб; 
	} 
	
	@Override 
	общественного INT doStartTag () бросает JspException { 
     JspWriter из = pageContext.getOut (); 
	  пытаться {
		out.print (tohtml ());
	} Поймать (IOException е) { 
		// TODO автоматической генерации улов блок 
		e.printStackTrace (); 
	} 
	  Вернуть super.doStartTag (); 
	} 
	
	Частная строка tohtml () { 
		StringBuilder С.Б. = новый StringBuilder (); 
		//拼接下一次发送请求所要提交的隐藏的формы表单
	   sb.append ( "<форма ID = действие 'pageBeanForm' = '" + bean.getUrl () +' Метод = 'пост'>"); 
	   sb.append ( "<входной тип = 'скрытый' имя = 'страница'>"); 
	  
	   Map <String, String []> paMap = bean.getPaMap (); 
	   если (paMap = NULL && paMap.size ()> 0) { 
		   Set <Вступление <String, String [] >> entrySet = paMap.entrySet (); 
	   для (Входа <String, String []>
	entrySet) { // Почему следует назначать его в покое? Так как последний запрос данные на первой странице, на следующей странице может быть второй, потому что эта страница до и после значения , соответствующего запросу не то же самое, чтобы присвоить отдельные
		   если (! "страница" .equals (entry.getKey ())) { 
			для (String Вэл: entry.getValue ()) { 
				sb.append ( "<входной тип = имя 'скрытый' = '" + entry.getKey ( ) +»значение = '" + вал +'> "); 
			} 
		} 
	} 
	   } 
	   Sb.append ( "</ форма>"); 
	  
		//拼接分页条
	   sb.append ( "<DIV стиль = 'выравнивания текста: справа; размер шрифта: 12px;'>"); 
	   sb.append ( "每页"+ bean.getRows () +"条,共"+ bean.getTotal () +"条,第"+ bean.getPage () +"页,共" + bean.getMaxPage () + "页<a href='javascript:gotoPage(1)'>首页"); 
	   sb.append ( "</a> <а"); getNextPage () + ")"> 下一页 </a> <а"); 
	   sb.append ( "HREF = 'JavaScript: GotoPage ( "+ bean.getMaxPage () +")'>尾页</a> <входной тип = 'Текст'");
	   sb.append ( "HREF = 'JavaScript: GotoPage ( "+ bean.getNextPage () +")'>下一页</a> <а"); 
	   
	   sb.append ( "ID = 'skipPage'"); 
	   sb.append ( "стиль = 'выравнивания текста: центр; размер шрифта: 12px; ширина: 50px;'> <а"); 
	   sb.append ( "HREF = 'JavaScript: skipPage ()'> Go </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 ( "вар страница = document.getElementById ( 'skipPage') значение;.");
	   sb.append ( "если (страница || IsNaN (страница) || ParseInt (страница) <1 || ParseInt (страница)>! "+ bean.getMaxPage () +") {"); 
	   sb.append ( "возвращение;"); 
	   sb.append ( "}"); 
	   sb.append ( "GotoPage (страница);"); 
	   sb.append ( "}"); 
	   sb.append ( "</ скрипт>"); 
	   вернуть sb.toString (); 
	
	} 
}

  3.2 Создание файла TLD index.tld (помощник класса свойства-однозначное соответствие)

<тэг> 
  <имя> страница </ имя> 
  <тег-класс> com.zking.tag.PageTag </ тег-класс> 
  <тело-контента> JSP </ тело содержание> 
  <атрибут> 
    <имя> боб </ имя> 
     <требуется> True </ требуется> 
     <rtexprvalue> True </ rtexprvalue> 
  </ атрибут> 
  </ тег>

  

4. от сделки EncodingFiter.java фильтра с китайской проблемой мусора

@WebFilter (urlPatterns = "/ *") с использованием servlet3.0 аннотацию технологии.
пакет 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 реализует фильтр { 
	частное кодирование String = "UTF-8"; //默认字符集

	общественного EncodingFiter () { 
		супер (); 
	} 

	Общественного недействительными уничтожить () { 
	} 

	общественного недействительными doFilter (запрос, ответ ServletRequest ServletResponse, 
			FilterChain цепи) бросает IOException, ServletException { 
		HttpServletRequest REQ = (HttpServletRequest) запроса; 
		Ответ HttpServletResponse Рез = (HttpServletResponse); 

		//中文处理必须放到chain.doFilter (запрос, ответ)方法前面
		res.setContentType ( "текст / html; кодировка =" + this.encoding); 
		если (req.getMethod () equalsIgnoreCase ( "пост").) { 
			req.setCharacterEncoding (this.encoding); 
		} Еще {  
			карта Карта req.getParameterMap = (); // сохранить все имя параметра = значение параметра (массив) коллекция карт
			комплект комплект = map.keySet (); //取出所有参数名
			итератора это = set.iterator (); 
			в то время как (it.hasNext ()) {
				Имя = Строка (String) it.next (); 
				String [] = значения (String []) в качестве map.get (имя); // извлекаемые значений параметров [Примечание: Этот параметр представляет собой массив] 
				для (INT I = 0; I <values.length, я ++) { 
					значения [I] = новый новый String (значения [I] , .getBytes ( "ISO-8859-1"), 
							this.encoding); 
				} 
			} 
		} 

		chain.doFilter (запрос, ответ); 
	} 

	общественного недействительными инициализации (FilterConfig FilterConfig) бросает ServletException { 
		Строка filterConfig.getInitParameter S = ( "кодирование"); // прочитать набор символов сконфигурировано web.xml файл , 
		если (нуль = s && s.trim ( ) !!. равенства ( "")) { 
			this.encoding s.trim = (); 
		} 
	} 

}

  Новый тест JSP

 

<% @ Языка страницы = "Java" CONTENTTYPE = "текст / html; кодировка = UTF-8" 
    pageEncoding = "UTF-8" %> 
    <% @ страница isELIgnored = "ложь" %> 
    <% @ TagLib префикс = "с "URI =" http://java.sun.com/jsp/jstl/core "%> 
    <% @ TagLib префикс = "г"= URI "/ MyJSP" %> 
<DOCTYPE HTML PUBLIC!" - // W3C / / DTD HTML 4.01 Transitional // EN " "http://www.w3.org/TR/html4/loose.dtd"> 
<HTML> 
<HEAD> 
<META HTTP-эквив = "Content-Type" содержание =" текст / html; кодировка = UTF-8" > 
<название> Вставить заголовок здесь </ title> 
</ HEAD> 
<BODY> 
<h2>小说目录</ h2> 
	<br>

	<форма действия = "$ {pageContext.request.contextPath} / BookServet" 
		Метод = "пост"> 
	</ form> 
		书名: <входной тип = "текст" название = "BNAME"> <входной тип = "отправить"
			значение = "确定"> 
	<таблица граница = ширина "1" = "100%"> 
		<TR> 
			<TD>编号</ TD> 
			<TD>名称</ TD> 
			<TD>价格</ TD> 
		</ TR > 
		<с: Foreach изделия = "$ {Booklist}" переменная = "B"> 
			<TR> 
				<TD> $ {b.bid} </ TD> 
				<TD> $ {b.bname} </ TD> 
				<TD > $ {b.price} </ TD> 
			</ TR> 
		</ с: Foreach> 
	</ таблица> 
<г: страница фасоли = "$ {pagebean}"> </ г: страница> 
	
</ тело> 
</ HTML>

  Результаты таковы

Все данные показывают

Нечеткие результаты запроса

 

Все запросы на вторую страницу данных

 Последние данные

 Это целая таблица одного общих эффектов пейджинговых

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

 

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

 

рекомендация

отwww.cnblogs.com/xmf3628/p/11069982.html