日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

Java Servlet 开发常用代码、模板、问题

發布時間:2025/4/14 java 54 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java Servlet 开发常用代码、模板、问题 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一 空Servlet類模板

import java.io.IOException;
mport java.io.PrintWriter;


import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;


public class ServletDemo1 extends HttpServlet {


? ? public void doGet(HttpServletRequest request, HttpServletResponse response)
? ? ? ? ? ? throws ServletException, IOException {


? ? }


? ? public void doPost(HttpServletRequest request, HttpServletResponse response)
? ? ? ? ? ? throws ServletException, IOException {


? ? }


}


二 web.xml配置

? ?<servlet>
? ? ?<servlet-name>ServletDemo1</servlet-name>
? ? ?<servlet-class>xxx.yyy.zzz.ServletDemo1</servlet-class>
? ?</servlet>
?
? ?<servlet-mapping>
? ? ?<servlet-name>ServletDemo1</servlet-name>
? ? ?<url-pattern>/servlet/ServletDemo1</url-pattern>
? ?</servlet-mapping>


? ? <servlet-mapping>
? ? ?<servlet-name>ServletDemo1</servlet-name>
? ? ?<url-pattern>/*</url-pattern>
? ?</servlet-mapping>


/abc/*?
/*?
/abc?
*.do?


? ? <servlet>
? ? ? ? <servlet-name>invoker</servlet-name>
? ? ? ? <servlet-class>
? ? ? ? ? ? org.apache.catalina.servlets.InvokerServlet
? ? ? ? </servlet-class>
? ? ? ? <load-on-startup>1</load-on-startup>
? ? </servlet>


如果某個Servlet的映射路徑僅僅為一個正斜杠(/),那么這個Servlet就成為當前Web應用程序的缺省Servlet。?
凡是在web.xml文件中找不到匹配的<servlet-mapping>元素的URL,它們的訪問請求都將交給缺省Servlet處理,
? <servlet>
? ? ?<servlet-name>ServletDemo2</servlet-name>
? ? ?<servlet-class>xxx.yyy.zzz.ServletDemo2</servlet-class>
? ? ?<load-on-startup>1</load-on-startup>
? ?</servlet>
? ?
? ?<!-- 將ServletDemo2配置成缺省Servlet -->
? ?<servlet-mapping>
? ? ?<servlet-name>ServletDemo2</servlet-name>
? ? ?<url-pattern>/</url-pattern>
? ?</servlet-mapping>


在<tomcat的安裝目錄>\conf\web.xml文件中,注冊了一個名稱為org.apache.catalina.servlets.DefaultServlet的Servlet,并將這個Servlet設置為了缺省Servlet。


三 Servlet的線程安全問題

  當多個客戶端并發訪問同一個Servlet時,web服務器會為每一個客戶端的訪問請求創建一個線程,并在這個線程上調用Servlet的service方法,因此service方法內如果訪問了同一個資源的話,就有可能引發線程安全問題。


不存在線程安全問題的代碼:


public class ServletDemo3 extends HttpServlet {
?
? ? ?
? ? ?public void doGet(HttpServletRequest request, HttpServletResponse response)
? ? ? ? ? ? ?throws ServletException, IOException {
? ? ? ? ?
? ? ? ? ?/**
? ? ? ? ? * i變量被多個線程并發訪問,但是沒有線程安全問題,因為i是doGet方法里面的局部變量,
? ? ? ? ? * 當有多個線程并發訪問doGet方法時,每一個線程里面都有自己的i變量,
? ? ? ? ? * 各個線程操作的都是自己的i變量,所以不存在線程安全問題
? ? ? ? ? * 多線程并發訪問某一個方法的時候,如果在方法內部定義了一些資源(變量,集合等)
? ? ? ? ? * 那么每一個線程都有這些東西,所以就不存在線程安全問題了
? ? ? ? ? */
? ? ? ? ?int i=1;
? ? ? ? ?i++;
? ? ? ? ?response.getWriter().write(i);
? ? ?}
?
? ? ?public void doPost(HttpServletRequest request, HttpServletResponse response)
? ? ? ? ? ? ?throws ServletException, IOException {
? ? ? ? ?doGet(request, response);
? ? ?}
?
?}


存在線程安全問題的代碼:
?public class ServletDemo3 extends HttpServlet {
?
? ? ?int i=1;
? ? ?public void doGet(HttpServletRequest request, HttpServletResponse response)
? ? ? ? ? ? ?throws ServletException, IOException {
? ? ? ??
? ? ? ? ?i++;
? ? ? ? ?try {
? ? ? ? ? ? ?Thread.sleep(1000*4);
? ? ? ? ?} catch (InterruptedException e) {
? ? ? ? ? ? ?e.printStackTrace();
? ? ? ? ?}
? ? ? ? ?response.getWriter().write(i+"");
? ? ?}
?
? ? ?public void doPost(HttpServletRequest request, HttpServletResponse response)
? ? ? ? ? ? ?throws ServletException, IOException {
? ? ? ? ?doGet(request, response);
? ? ?}
?
?}


  把i定義成全局變量,當多個線程并發訪問變量i時,就會存在線程安全問題了;同時開啟兩個瀏覽器模擬并發訪問同一個Servlet,本來正常來說,第一個瀏覽器應該看到2,而第二個瀏覽器應該看到3的,結果兩個瀏覽器都看到了3。
? ? 如何解決?


public class ServletDemo3 extends HttpServlet {
?
? ? ?int i=1;
? ? ?public void doGet(HttpServletRequest request, HttpServletResponse response)
? ? ? ? ? ? ?throws ServletException, IOException {
? ? ? ? ?/**
? ? ? ? ? * 加了synchronized后,并發訪問i時就不存在線程安全問題了,
? ? ? ? ? * 假如現在有一個線程訪問Servlet對象,那么它就先拿到了Servlet對象的那把鎖
? ? ? ? ? * 等到它執行完之后才會把鎖還給Servlet對象,由于是它先拿到了Servlet對象的那把鎖,
? ? ? ? ? * 所以當有別的線程來訪問這個Servlet對象時,由于鎖已經被之前的線程拿走了,后面的線程只能排隊等候了
? ? ? ? ? *?
? ? ? ? ? */
? ? ? ? ?synchronized (this) {//在java中,每一個對象都有一把鎖,這里的this指的就是Servlet對象
? ? ? ? ? ? ?i++;
? ? ? ? ? ? ?try {
? ? ? ? ? ? ? ? ?Thread.sleep(1000*4);
? ? ? ? ? ? ?} catch (InterruptedException e) {
? ? ? ? ? ? ? ? ?e.printStackTrace();
? ? ? ? ? ? ?}
? ? ? ? ? ? ?response.getWriter().write(i+"");
? ? ? ? ?}
? ? ? ? ?
? ? ?}
?
? ? ?public void doPost(HttpServletRequest request, HttpServletResponse response)
? ? ? ? ? ? ?throws ServletException, IOException {
? ? ? ? ?doGet(request, response);
? ? ?}
?
?}


  現在這種做法是給Servlet對象加了一把鎖,保證任何時候都只有一個線程在訪問該Servlet對象里面的資源,這樣就不存在線程安全問題了
? ? 這種做法雖然解決了線程安全問題,但是編寫Servlet卻不能用這種方式處理線程安全問題,假如有9999個人同時訪問這個Servlet,那么這9999個人必須按先后順序排隊輪流訪問。


  針對Servlet的線程安全問題,Sun公司提供有解決方案的:讓Servlet去實現一個SingleThreadModel接口,如果某個Servlet實現了SingleThreadModel接口,那么Servlet引擎將以單線程模式來調用其service方法。
  查看Sevlet的API可以看到,SingleThreadModel接口中沒有定義任何方法和常量,在Java中,把沒有定義任何方法和常量的接口稱之為標記接口,經??吹降囊粋€最典型的標記接口就是"Serializable",這個接口也是沒有定義任何方法和常量的,標記接口在Java中有什么用呢?主要作用就是給某個對象打上一個標志,告訴JVM,這個對象可以做什么,比如實現了"Serializable"接口的類的對象就可以被序列化,還有一個"Cloneable"接口,這個也是一個標記接口,在默認情況下,Java中的對象是不允許被克隆的,就像現實生活中的人一樣,不允許克隆,但是只要實現了"Cloneable"接口,那么對象就可以被克隆了。


  讓Servlet實現了SingleThreadModel接口,只要在Servlet類的定義中增加實現SingleThreadModel接口的聲明即可。 ?
  對于實現了SingleThreadModel接口的Servlet,Servlet引擎仍然支持對該Servlet的多線程并發訪問,其采用的方式是產生多個Servlet實例對象,并發的每個線程分別調用一個獨立的Servlet實例對象。
  實現SingleThreadModel接口并不能真正解決Servlet的線程安全問題,因為Servlet引擎會創建多個Servlet實例對象,而真正意義上解決多線程安全問題是指一個Servlet實例對象被多個線程同時調用的問題。事實上,在Servlet API 2.4中,已經將SingleThreadModel標記為Deprecated(過時的)。 ?



四 常用功能代碼


1 hello world


? public void init() throws ServletException
? {
? ? ? message = "Hello World";
? }


? public void doGet(HttpServletRequest request,
? ? ? ? ? ? ? ? ? ? HttpServletResponse response)
? ? ? ? ? ? throws ServletException, IOException
? {


? ? ? response.setContentType("text/html");
? ? ? PrintWriter out = response.getWriter();
? ? ? out.println("<h1>" + message + "</h1>");
? }

2 在客戶端輸出一個html文檔

? ? ? ? response.setContentType("text/html");
? ? ? ? PrintWriter out = response.getWriter();
? ? ? ? out.println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">");
? ? ? ? out.println("<HTML>");
? ? ? ? out.println(" ?<HEAD><TITLE>A Servlet</TITLE></HEAD>");
? ? ? ? out.println(" ?<BODY>");
? ? ? ? out.print(" ? ?This is ");
? ? ? ? out.print(this.getClass());
? ? ? ? out.println(", using the GET method");
? ? ? ? out.println(" ?</BODY>");
? ? ? ? out.println("</HTML>");
? ? ? ? out.flush();
? ? ? ? out.close();


3 處理用戶登陸的servlet實現方法


Login.java

package com.bai;
?
import javax.servlet.http.*;?
import java.io.*;
?
public class Login extends HttpServlet{
? ? ?public void doGet(HttpServletRequest req,HttpServletResponse res){
? ? ? ? ?try{req.setCharacterEncoding("gb2312");
? ? ? ? ?res.setContentType("text/html;charset=gb2312");
? ? ? ? ? ? ?PrintWriter pw=res.getWriter();
? ? ? ? ? ? ?pw.println("<html>");
? ? ? ? ? ? ?pw.println("<body>");
? ? ? ? ? ? ?pw.println("<h1>登陸界面</h1>");
? ? ? ? ? ? ?pw.println("<form action=logincl method=post>");
? ? ? ? ? ? ?pw.println("用戶名:<input type=text name=username><br>");
? ? ? ? ? ? ?pw.println("密碼:<input type=password name=passwd><br>");
? ? ? ? ? ? ?pw.println("<input type=submit value=login><br>");
? ? ? ? ? ? ?pw.println("</form>");
? ? ? ? ? ? ?pw.println("</body>");
? ? ? ? ? ? ?pw.println("</html>");
? ? ? ? ?}
? ? ? ? ?catch(Exception e){
? ? ? ? ? ? ?e.printStackTrace();
? ? ? ? ?}
? ? ?}
? ? ?
? ? public void doPost(HttpServletRequest req,HttpServletResponse res){
? ? ? ? ?this.doGet(req,res);
? ? ?}
?}
?
LoginCl.java

package com.bai;
?
import javax.servlet.http.*;
import java.io.*;
import java.sql.*;
?
public class LoginCl extends HttpServlet{
? ? ?public void doGet(HttpServletRequest req,HttpServletResponse res){
? ? ? ? ?
? ? ? ? ?Connection conn=null;
? ? ? ? ?Statement stmt=null;
? ? ? ? ?ResultSet rs=null;
? ? ? ? ?String sql = "select username,passwd from users where username = ? and passwd = ?";
? ? ? ? ?try{//req.setCharacterEncoding("gb2312");
? ? ? ? ? ? ?String user=req.getParameter("username");
? ? ? ? ? ? ?String password=req.getParameter("passwd");
? ? ? ? ? ? ?
? ? ? ? ? ? Class.forName("com.mysql.jdbc.Driver");
? ? ? ? ? ? ?conn=DriverManager.getConnection("jdbc:mysql://localhost:3306/sqdb","root","root");
?// ? ? ? ? ? ?stmt=conn.createStatement();
? ? ? ? ? ? ?PreparedStatement pstmt = conn.prepareStatement(sql);
? ? ? ? ? ? ?pstmt.setString(1, user);
? ? ? ? ? ? ?pstmt.setString(2, password);
? ? ? ? ? ? ?rs = pstmt.executeQuery();
?// ? ? ? ? ? ?rs=stmt.executeQuery("select top 1 * from users where username='"+user
?// ? ? ? ? ? ? ? ?+"' and passwd='"+password+"'");
? ? ? ? ? ? ?if(rs.next())
? ? ? ? ? ? ?{
? ? ? ? ? ? ? ? ?HttpSession hs=req.getSession(true);
? ? ? ? ? ? ? ? ?hs.setMaxInactiveInterval(60);
? ? ? ? ? ? ? ? ?hs.setAttribute("name",user);
? ? ? ? ? ? ? ? ?res.sendRedirect("welcome?&uname="+user+"&upass="+password);
? ? ? ? ? ? ?}
? ? ? ? ? ? ?else{
? ? ? ? ? ? ? ? ?res.sendRedirect("login"); //url
? ? ? ? ? ? ?}
? ? ? ? ? ? ?
? ? ? ? }
? ? ? ? ?catch(Exception e){
? ? ? ? ? ? ?e.printStackTrace();
? ? ? ? ?}finally{
? ? ? ? ? ? ?try{
? ? ? ? ? ? ? ? ?if(rs!=null){
? ? ? ? ? ? ? ? ?rs.close();
? ? ? ? ? ? ? ? ?}
? ? ? ? ? ? ? ? ?if(stmt!=null){
? ? ? ? ? ? ? ? ? ? ?stmt.close();
? ? ? ? ? ? ? ? ?}
? ? ? ? ? ? ? ? ?if(conn!=null){
? ? ? ? ? ? ? ? ? ? ?conn.close();
? ? ? ? ? ? ? ? ?} ? ?
? ? ? ? ? ? }catch(Exception e){
? ? ? ? ? ? ? ? ?e.printStackTrace();
? ? ? ? ? ? ?} ? ? ? ?
? ? ? ? }
? ? ?}
? ? ?
? ? public void doPost(HttpServletRequest req,HttpServletResponse res){
? ? ? ? ?this.doGet(req,res);
? ? ?}
?}
?
注:
上面這個處理用戶名密碼帶有明顯注入漏洞,可以根據用戶名從數據庫取密碼,用取出的密碼和用戶輸入的密碼比較


sql=select passwd from users where username = ? ?limit 1
if(rs.next())
?{
? ? ?String passwd=rs.getString(1);
? ? ?if(passwd.equals(password))
? ? ? ? ? ? ?//密碼正確
? ? ?else //密碼錯誤
?}


Welcome.java

package com.bai;
?
import javax.servlet.http.*;
import java.io.*;
?
public class Welcome extends HttpServlet{
? ? ?public void doGet(HttpServletRequest req,HttpServletResponse res){
? ? ? ? ?
? ? ? ? HttpSession hs=req.getSession();
? ? ? ? ?String val=(String)hs.getAttribute("pass");
? ? ? ? ?
? ? ? ? if(val==null){
? ? ? ? ? ? ?try{
? ? ? ? ? ? ? ? ?System.out.print(1);
? ? ? ? ? ? ? ? ?res.sendRedirect("login");
? ? ? ? ? ? ?}catch(Exception e){
? ? ? ? ? ? ? ? ?e.printStackTrace();
? ? ? ? ? ? ?}
? ? ? ? ? ? ?
? ? ? ? } ? ? ? ?
? ? ? ? ? ??
? ? ? ? String u=req.getParameter("uname");
? ? ? ? ?String p=req.getParameter("upass");
? ? ? ? ?
? ? ? ? try{//req.setCharacterEncoding("gb2312");
? ? ? ? ? ? ?PrintWriter pw=res.getWriter();
? ? ? ? ? ? ?pw.println("welcome! "+u+"&pass="+p);
? ? ? ? ?}
? ? ? ? ?catch(Exception e){
? ? ? ? ? ? ?e.printStackTrace();
? ? ? ? ?}
? ? ?}
? ? ?
? ? public void doPost(HttpServletRequest req,HttpServletResponse res){
? ? ? ? ?this.doGet(req,res);
? ? ?}
?}

4 servlet中session

在servlet中,session是封裝在javax.servlet.http.HttpSession這個接口中的,這個接口是構建在cookie或者URL重寫的基礎上,要得到一個HttpSession的實例,就可以通過HttpServletRequest的getSession()方法來獲得
HttpServletRequest有兩個重載的getSession()方法,一個接受一個boolean的類型的值,另一個不帶任何參數,getSession()方法和getSession(true)方法功能一樣,就是如果對應的客戶端已經產生過一個session,那么就會返回這個舊的session,否則,這個方法將會產生一個session ID并且和對應的客戶端綁定在一起,而如果getSession(false)表示如果對應的客戶端已經有對應的session,那么返回這個舊的session,否則不會產生新的session??梢允褂肏ttpSession對象上的isNow()方法來判定這個session是否為新建的
?
HttpSession常用方法
?
public void setAttribute(String name,Object value)
將value對象以name名稱綁定到會話

public object getAttribute(String name)
取得name的屬性值,如果屬性不存在則返回null

public void removeAttribute(String name)
從會話中刪除name屬性,如果不存在不會執行,也不會拋處錯誤.

public Enumeration getAttributeNames()
返回和會話有關的枚舉值

public void invalidate()
使會話失效,同時刪除屬性對象

public Boolean isNew()
用于檢測當前客戶是否為新的會話

public long getCreationTime()
返回會話創建時間

public long getLastAccessedTime()
返回在會話時間內web容器接收到客戶最后發出的請求的時間

public int getMaxInactiveInterval()
返回在會話期間內客戶請求的最長時間為秒

public void setMaxInactiveInterval(int seconds)
允許客戶客戶請求的最長時間

ServletContext getServletContext()
返回當前會話的上下文環境,ServletContext對象可以使Servlet與web容器進行通信

public String getId()
返回會話期間的識別號
?
一個保存信息到session的例子
?
sessionlogin.html

<meta name="keywords" content="keyword1,keyword2,keyword3" />
<meta name="description" content="this is my page" />
<meta name="content-type" content="text/html; charset=UTF-8" />

?<!-- ? ?<link rel="stylesheet" type="text/css" href="./styles.css">--></pre>
<form action="servlet/saveinfo" method="post">
?用戶名:
?<input type="text" name="username" /> <input type="submit" />
?密碼:
?<input type="password" name="userpasswd" />
?</form>
<pre>
</pre>
</div>
<div>


package xxx;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

public class saveinfo extends HttpServlet {

?public saveinfo() {
?super();
?}

?public void destroy() {
?super.destroy(); // Just puts "destroy" string in log
?// Put your code here
?}

?public void doGet(HttpServletRequest request, HttpServletResponse response)
?throws ServletException, IOException {

?//如果用戶輸入過了用戶名 則將其放在session中
?if(request.getParameter("username")!=null);
?{
?HttpSession session = request.getSession();
?session.setAttribute("username",request.getParameter("username"));
?}
?response.setContentType("text/html;charset=GBK");
?PrintWriter out = response.getWriter();
?out.println("session已經創建");
?out.println("
");
?out.println("跳轉到其他<a>頁面</a>");

?}

?public void doPost(HttpServletRequest request, HttpServletResponse response)
?throws ServletException, IOException {

?doGet(request,response);
?}

?public void init() throws ServletException {
?// Put your code here
?}

}

package xxx;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
public class getsession extends HttpServlet {

?public getsession() {
?super();
?}

?public void destroy() {
?super.destroy(); // Just puts "destroy" string in log
?// Put your code here
?}

?public void doGet(HttpServletRequest request, HttpServletResponse response)
?throws ServletException, IOException {

response.setContentType("text/html;charset=GBK");
?PrintWriter out = response.getWriter();

?String username = "";
?//此處不是創建session 而是去取已經創建的session
?HttpSession session = request.getSession();
?//如果已經取到,說明已經登錄
?if(session!=null)
?{
?username = (String)session.getAttribute("username");
?out.println("獲得創建的Session");
?out.println("
");
?out.println("登錄名:"+username);
?}
?else
?{
?response.sendRedirect("../sessionlogin.html");
?}
?}

?public void doPost(HttpServletRequest request, HttpServletResponse response)
?throws ServletException, IOException {
?doGet(request,response);
?}

?public void init() throws ServletException {
?// Put your code here
?}

}

5 獲得客戶端IP和url

可以配合實現IP白名單控制,

import javax.servlet.http.HttpServletRequest;
?
public class ClientInfoUtil{
?
/**
* 獲得客戶端的IP地址
* @param request
* @return
*/
static public String getIP(HttpServletRequest request) {
? ? String ip = request.getHeader("x-forwarded-for");
? ? if(ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
? ? ? ? ip = request.getHeader("Proxy-Client-IP");
? ? }
? ? if(ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
? ? ? ? ip = request.getHeader("WL-Proxy-Client-IP");
? ? }
? ? if(ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
? ? ? ? ip = request.getRemoteAddr();
? ? }
? ? return ip;
}
?

/**
* 獲得客戶端訪問服務器的url地址
* @param request
* @return
*/
static public String getURL(HttpServletRequest request) {
? ? String url = request.getScheme()+"://"; ??
? ? url+=request.getHeader("host"); ??
? ? url+=request.getRequestURI(); ??
? ? if(request.getQueryString()!=null) ?{
? ? ? ? url+="?"+request.getQueryString(); ??
? ? }
? ? return url;
}
}

6 JSP+Servlet+JavaBean實現登錄

登錄頁面:login.html
登錄成功歡迎頁面:login_success.jsp
登錄失敗頁面:login_failure.jsp
Servlet處理文件:LoginServlet.java
?
登錄頁面:login.html

<!-- 一個簡單的登錄界面 --><!-- 該JSP程序是用來測試與MySQL數據庫的連接, 需要一個數據庫:LearnJSP,和其中一個表:userinfo 表中有兩個字段分別為:UserName varchar (20) not null,UserPwd varchar (20) not null--><html> <head> ?<title>登錄</title> ?<meta http-equiv="content-type" content="text/html; charset=UTF-8"> ?<meta http-equiv="Content-Language" content="ch-cn"> </head> <body> <!-- Form 用來提取用戶填入并提交的信息--> <form method="post" name="frmLogin" action="LoginServlet"> ?<h1 align="center">用戶登錄</h1><br> ?<div align="center">用戶名: ? <input type="text" name="txtUserName" value="Your name" ? ?size="20" maxlength="20" ? ?οnfοcus="if(this.value=='Your name')this.value='';"><br>密碼: ? <input type="password" name="txtPassword" value="Your password" ? ?size="20" maxlength="20" ? ?οnfοcus="if(this.value=='Your password')this.value='';"><br> ? <input type="submit" name="Submit" value="提交" onClick="validateLogin();" > ? ? ? ? ? ? <input type="reset" name="Reset" value="重置"><br> ?</div> </form> <!-- javaScript 函數 validateLogin(),用來驗證用戶名和密碼是否為空 --> ?<script language="javaScript"> ? function validateLogin() ? { ? var sUserName = document.frmLogin.txtUserName.value; ? var sPassword = document.frmLogin.txtPassword.value; ? if( sUserName=="" ) ? { ? ?alert("請輸入用戶名!"); ? ?return false; ? } ? if( sPassword=="" ) ? { ? ?alert("請輸入密碼!"); ? ?return false; ? } ? } ?</script> </body></html>?

登錄成功歡迎頁面:login_success.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html> <head> <title>My JSP 'login_failure.jsp' starting page</title> <meta http-equiv="content-type" content="text/html; charset=UTF-8"> <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> <% ?String userName = (String)session.getAttribute ( "UserName" ); %> <div align=center> ?<%=userName%> ?歡迎您,登錄成功! </div> </body></html>?


登錄失敗頁面:login_failure.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html> <head> <title>My JSP 'login_failure.jsp' starting page</title> <meta http-equiv="content-type" content="text/html; charset=UTF-8"> <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> <% String userName = (String)session.getAttribute ( "UserName" ); %> <div align=center> ?<%=userName%> ?對不起,登錄失敗! </div> </body></html>?


Servlet處理文件:LoginServlet.java
/** * 該JSP程序是用來測試與MySQL數據庫的連接, * 需要一個數據庫:LearnJSP,和其中一個表:userinfo * 表中有兩個字段分別為:UserName varchar (20) not null,UserPwd varchar (20) not null */package zieckey.login.servlet;import java.sql.Statement;import java.io.IOException;import java.sql.DriverManager;import java.sql.ResultSet;import java.sql.SQLException;import javax.servlet.Servlet;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;public class LoginServlet extends HttpServlet implements Servlet{ public LoginServlet () { // TODO Auto-generated constructor stub } /* * (non-Javadoc) * * @see javax.servlet.http.HttpServlet#doGet(javax.servlet.http.HttpServletRequest, * javax.servlet.http.HttpServletResponse) */ @Override protected void doGet ( HttpServletRequest arg0, HttpServletResponse arg1 ) ?throws ServletException, IOException { } /* * (non-Javadoc) * * @see javax.servlet.http.HttpServlet#doPost(javax.servlet.http.HttpServletRequest, * javax.servlet.http.HttpServletResponse) */ @Override protected void doPost ( HttpServletRequest request, HttpServletResponse response ) ?throws ServletException, IOException { response.setContentType ( "text/html" ); String result = ""; // 獲取用戶名 String sUserName = request.getParameter ( "txtUserName" ); if ( sUserName == "" || sUserName == null || sUserName.length ( ) > 20 ) { ?try ?{ ?result = "請輸入用戶名(不超過20字符)!"; ?request.setAttribute ( "ErrorUserName", result ); ?response.sendRedirect ( "login.html" ); ?} catch ( Exception e ) ?{ ?} } // 獲取密碼 String sPasswd = request.getParameter ( "txtPassword" ); if ( sPasswd == "" || sPasswd == null || sPasswd.length ( ) > 20 ) { ?try ?{ ?result = "請輸入密碼(不超過20字符)!"; ?request.setAttribute ( "ErrorPassword", result ); ?response.sendRedirect ( "login.html" ); ?} catch ( Exception e ) ?{ ?} } // 登記JDBC驅動程序 try { ?Class.forName ( "org.gjt.mm.mysql.Driver" ).newInstance ( ); } catch ( InstantiationException e ) { ?// TODO Auto-generated catch block ?e.printStackTrace ( ); ?System.out.println ("InstantiationException"); } catch ( IllegalAccessException e ) { ?// TODO Auto-generated catch block ?e.printStackTrace ( ); ?System.out.println ("IllegalAccessException"); } catch ( ClassNotFoundException e ) { ?// TODO Auto-generated catch block ?e.printStackTrace ( ); ?System.out.println ("ClassNotFoundException"); } // 連接參數與Access不同 String url = "jdbc:mysql://localhost/LearnJSP"; // 建立連接 java.sql.Connection connection = null; Statement stmt = null; ResultSet rs = null; try { ?connection = DriverManager.getConnection ( url, "root", "011124" ); ?stmt = connection.createStatement ( ); ?// SQL語句 ?String sql = "select * from userinfo where username='" + sUserName ? + "' and userpwd = '" + sPasswd + "'"; ?rs = stmt.executeQuery ( sql );// 返回查詢結果 } catch ( SQLException e ) { ?// TODO Auto-generated catch block ?e.printStackTrace ( ); } try { ?if ( rs.next ( ) )// 如果記錄集非空,表明有匹配的用戶名和密碼,登陸成功 ?{ ?// 登錄成功后將sUserName設置為session變量的UserName ?// 這樣在后面就可以通過 session.getAttribute("UserName") 來獲取用戶名, ?// 同時這樣還可以作為用戶登錄與否的判斷依據 ?request.getSession ( ).setAttribute ( "UserName", sUserName ); ?response.sendRedirect ( "login_success.jsp" ); ?} else ?{ ?// 否則登錄失敗 ?//response.sendRedirect ( "MyJsp.jsp" ); ?response.sendRedirect ( "login_failure.jsp" ); ?} } catch ( SQLException e ) { ?// TODO Auto-generated catch block ?e.printStackTrace ( ); } try { ?if ( null!=rs ) ?{ ?rs.close ( ); ?} ?if ( null!=stmt ) ?{ ?stmt.close ( ); ?} ?if ( null!=connection ) ?{ ?connection.close ( ); ?} } catch ( SQLException e ) { ?// TODO Auto-generated catch block ?e.printStackTrace ( ); } } /** * */ private static final long serialVersionUID = 1L;}?

7 java servlet頁面跳轉

?response.sendRedirect("/a.jsp");
response.sendRedirect("http://www.jb51.net");

RequestDispatcher dispatcher = request.getRequestDispatcher("/a.jsp");
dispatcher .forward(request, response);

response.setHeader("Location","");

8 java中Servlet處理亂碼


1)從頁面獲取數據的servlet出現亂碼,在servlet中已經把request.setCharacterEncoding("GB2312");加入到代碼中去,
JAVA是Unicode編碼,先轉換成ISO8859-1,然后再轉換成GBK或是GB2312.

request.setCharacterEncoding("ISO8859-1"); ? ?
ad=request.getParameter("name"); ? ?
byte[] temp3 = ad.getBytes("GBK"); ? ?
String str = new String(temp3); ??

這樣就是中文啦

2)直接在服務器里設置編碼轉換
在Tomcat的conf目錄里找到SERVER.XML文件,設置如下:?
里面增加一個屬性,URIEncoding="GBK"

3)JSP頁面上是中文,但是看的后是亂碼
解決的辦法就是在JSP頁面的編碼的地方,因為Jsp轉成Java文件時的編碼問題,默認的話有的服務器是ISO-8859-1,如果一個JSP中直接輸入了中文,Jsp把它當作 ISO8859-1來處理是肯定有問題的,這一點,我們可以通過查看Jasper所生成的Java中間文件來確認
?
4)當用Request對象獲取客戶提交的漢字代碼的時候,會出現亂碼
解決的辦法是:要配置一個filter,也就是一個Servelet的過濾器,

代碼如下:

public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain)throws IOException, ServletException {

request.setCharacterEncoding("GBK");
// 傳遞控制到下一個過濾器

chain.doFilter(request, response);
}

配置web.xml
<filter></filter>
<filter-name></filter-name>Set Character Encoding
<filter-class></filter-class>SetCharacterEncodingFilter
?
<filter-mapping></filter-mapping>
<filter-name></filter-name>Set Character Encoding
<url-pattern></url-pattern>/*

如果還是出現這種情況的話就往下看看是不是出現了第四種情況,Form提交的數據是不是用get提交的,一般來說用post提交的話是沒有問題的,如果是的話,看第四種解決的辦法。

還有就是對含有漢字字符的信息進行處理,處理的代碼是:
public String toUni(String gbStr){
String uniStr = "";
if(gbStr == null){
gbStr = "";
}
try{
byte[] tempByte = gbStr.getBytes("GB2312");
uniStr = new String(tempByte,"ISO8859_1");
}catch(Exception ex){
}
return uniStr;
}
}

也可以在直接的轉換,首先將獲取的字符串用ISO-8859-1進行編碼,然后將這個編碼存放到一個字節數組中,然后將這個數組轉化成字符串對象就可以了,
String str=request.getParameter(“girl”);
Byte B[]=str.getBytes(“ISO-8859-1”);
Str=new String(B);
通過上述轉換的話,提交的任何信息都能正確的顯示。

5)在 Form get請求在服務端用request. getParameter(“name”)時返回的是亂碼
按tomcat的做法設置Filter也沒有用或者用 request.setCharacterEncoding("GBK");也不管用問題是出在處理參數傳遞的方法上:如果在servlet中用 doGet(HttpServletRequest request, HttpServletResponse response)方法進行處理的話前面即使是寫了:

request.setCharacterEncoding("GBK");
response.setContentType("text/html;charset=GBK");

也是不起作用的,返回的中文還是亂碼.
如果把這個函數改成doPost(HttpServletRequest request, HttpServletResponse response)一切就OK了。
同樣,在用兩個JSP頁面處理表單輸入之所以能顯示中文是因為用的是post方法傳遞的,改成get方法依舊不行。
由此可見在servlet中用doGet()方法或是在JSP中用get方法進行處理要注意。這畢竟涉及到要通過瀏覽器傳遞參數信息,很有可能引起常用字符集的沖突或是不匹配。
這個地方理解為request.setCharacterEncoding("GBK");set的是request中的body,而不是header部分,get請求時把參數放在url后邊,不是放在body中,所以這個時候request.setCharacterEncoding("GBK")就沒有起到作用,換到post提交就沒有問題了,
解決的辦法是:
1) 打開tomcat的server.xml文件,找到區塊,加入如下一行:
URIEncoding=”GBK”

完整的應如下:
<connector uriencoding="GBK" maxthreads="150" debug="0" redirectport="8443" port="8080" enablelookups="false" maxsparethreads="75" minsparethreads="25" connectiontimeout="20000" disableuploadtimeout="true" acceptcount="100"></connector>

重啟tomcat,一切OK。

6)JSP頁面上有中文,按鈕上面也有中文,但是通過服務器查看頁面的時候出現亂碼
解決的辦法是:首先在JSP文件中不應該直接包含本地化的消息文本,而是應該通過<bean:message>標簽從Resource Bundle中獲得文本。應該把中文文本放到Application.properties文件中,這個文件放在WEB-INF/classes/* 下,例如頁面里有姓名,年齡兩個label,首先就是要建一個Application.properties,里面的內容應該是name=”姓名” age=”年齡”,然后把這個文件放到WEB-INF/classes/properties/下,接下來根據 Application.properties文件,對他進行編碼轉化,創建一個中文資源文件,假定名字是 Application_cn.properties。在JDK中提供了native2ascii命令,能夠實現字符編碼的轉換。在DOS環境中找到你放置Application.properties的這個文件的目錄,在DOS環境中執行一下命令,將生成按GBK編碼的中文資源文件 Application_cn.properties:native2ascii ?encoding gbk Application.properties Application_cn.properties執行以上命令以后將生成如下內容的Application_cn.properties文件: name=u59d3u540d age=u5e74u9f84,在Struts-config.xml中配置:<message-resources parameter="properties.Application_cn"></message-resources>。到這一步,基本上完成了一大半,接著就要在JSP頁面上寫,到名字的那個label是要寫<bean:message key="”name”">,這樣的化在頁面上出現的時候就會出現中文的姓名,年齡這個也是一樣,按鈕上漢字的處理也是同樣的。
?
7)寫入到數據庫是亂碼
解決的方法:要配置一個filter,也就是一個Servelet的過濾器,代碼如同第二種時候一樣。
如果是通過JDBC直接鏈接數據庫的時候,配置的代碼如下:jdbc:mysql://localhost:3306/workshopdb? useUnicode=true&characterEncoding=GBK,這樣保證到數據庫中的代碼是不是亂碼。
如果是通過數據源鏈接的話不能按照這樣的寫法了,首先就要寫在配置文件中,

<context debug="0" path="/workshop" docbase="workshop"></context>reloadable="true" >
?
<resource name="jdbc/WorkshopDB"></resource>auth="Container"
type="javax.sql.DataSource" />
?
<resourceparams name="jdbc/WorkshopDB"></resourceparams>
<parameter></parameter>?
<name></name>factory
<value></value>org.apache.commons.dbcp.BasicDataSourceFactory
?
<parameter></parameter>?
<name></name>maxActive
<value></value>100
?
<parameter></parameter>?
<name></name>maxIdle
<value></value>30
?
<parameter></parameter>?
<name></name>maxWait
<value></value>10000
?
<parameter></parameter>?
<name></name>username
<value></value>root
?
<parameter></parameter>?
<name></name>password
<value></value>
?
<parameter></parameter>?
<name></name>driverClassName
<value></value>com.mysql.jdbc.Driver
?
<parameter></parameter>?
<name></name>url
<value></value>


8)servlet分頁

Oracle數據庫,獲取SCOTT用戶EMP表中的數據,

創建一個對象 UserData,用以保存從數據庫中獲取的數據。

package com.tool;
?
import java.math.BigDecimal;
import java.util.Date;
?
public class UserData {
?
? ? /**
? ? ?* EMP表中的數據屬性
? ? ?*/
? ? private String ename;
? ? private String job;
? ? private BigDecimal empno;
? ? private BigDecimal mgr;
? ? private Date hireDate;
? ? private BigDecimal sal;
? ? private BigDecimal comm;
? ? private BigDecimal deptno;
?
? ? public BigDecimal getEmpno() {
? ? ? ? return empno;
? ? }
?
? ? public void setEmpno(BigDecimal empno) {
? ? ? ? this.empno = empno;
? ? }
?
? ? public BigDecimal getMgr() {
? ? ? ? return mgr;
? ? }
?
? ? public void setMgr(BigDecimal mgr) {
? ? ? ? this.mgr = mgr;
? ? }
?
? ? public Date getHireDate() {
? ? ? ? return hireDate;
? ? }
?
? ? public void setHireDate(Date hireDate) {
? ? ? ? this.hireDate = hireDate;
? ? }
?
? ? public BigDecimal getSal() {
? ? ? ? return sal;
? ? }
?
? ? public void setSal(BigDecimal sal) {
? ? ? ? this.sal = sal;
? ? }
?
? ? public BigDecimal getComm() {
? ? ? ? return comm;
? ? }
?
? ? public void setComm(BigDecimal comm) {
? ? ? ? this.comm = comm;
? ? }
?
? ? public BigDecimal getDeptno() {
? ? ? ? return deptno;
? ? }
?
? ? public void setDeptno(BigDecimal deptno) {
? ? ? ? this.deptno = deptno;
? ? }
?
? ? public String getEname() {
? ? ? ? return ename;
? ? }
?
? ? public void setEname(String ename) {
? ? ? ? this.ename = ename;
? ? }
?
? ? public String getJob() {
? ? ? ? return job;
? ? }
?
? ? public void setJob(String job) {
? ? ? ? this.job = job;
? ? }
}


創建一個 DBHelper 對象用以與數據庫進行交互

package com.dao;
?
import com.tool.UserData;
?
import java.math.BigDecimal;
import java.sql.*;
import java.util.*;
import java.util.Date;
?
public class DBHelper {
?
? ? Connection conn; ?//數據庫連接對象
? ? PreparedStatement pt; ?//SQL語句預處理對象
? ? ResultSet rs; ?//結果集對象
?
? ? public ?DBHelper(){
? ? ? ? try {
? ? ? ? ? ? Class.forName("oracle.jdbc.driver.OracleDriver"); ?//裝載驅動
? ? ? ? } catch (ClassNotFoundException e) {
? ? ? ? ? ? e.printStackTrace();
? ? ? ? }
? ? }
?
? ? /**
? ? ?* 獲取當前頁的數據
? ? ?* @param curPage
? ? ?* @param rowsPerPage
? ? ?* @return
? ? ?*/
? ? public List<UserData> getData(int curPage, int rowsPerPage) {
?
? ? ? ? List<UserData> dataList = new ArrayList<>();
? ? ? ? String url = "jdbc:oracle:thin:@localhost:1521:orcl";
? ? ? ? try {
? ? ? ? ? ? conn = DriverManager.getConnection(url,"scott","tiger");
? ? ? ? ? ? String sql = "select * from emp where rownum <= ((? - 1) * "+rowsPerPage+" + "+rowsPerPage+") minus " +
? ? ? ? ? ? ? ? ? ? " select * from emp where rownum <= (? - 1) * "+rowsPerPage+" ";
? ? ? ? ? ? pt = conn.prepareStatement(sql);
? ? ? ? ? ? pt.setInt(1,curPage);
? ? ? ? ? ? pt.setInt(2,curPage);
? ? ? ? ? ? rs = pt.executeQuery();
? ? ? ? ? ? while (rs.next()){
? ? ? ? ? ? ? ? /**
? ? ? ? ? ? ? ? ?* 從結果集中取得數據
? ? ? ? ? ? ? ? ?*/
? ? ? ? ? ? ? ? UserData userData = new UserData();
? ? ? ? ? ? ? ? BigDecimal empno = rs.getBigDecimal("empno");
? ? ? ? ? ? ? ? String ename = rs.getString("ename");
? ? ? ? ? ? ? ? String job = rs.getString("job");
? ? ? ? ? ? ? ? BigDecimal mgr = rs.getBigDecimal("mgr");
? ? ? ? ? ? ? ? Date hireDate = rs.getDate("hiredate");
? ? ? ? ? ? ? ? BigDecimal sal = rs.getBigDecimal("sal");
? ? ? ? ? ? ? ? BigDecimal comm = rs.getBigDecimal("comm");
? ? ? ? ? ? ? ? BigDecimal deptno = rs.getBigDecimal("deptno");
? ? ? ? ? ? ? ? /**
? ? ? ? ? ? ? ? ?* 設置對象屬性
? ? ? ? ? ? ? ? ?*/
? ? ? ? ? ? ? ? userData.setEmpno(empno);
? ? ? ? ? ? ? ? userData.setEname(ename);
? ? ? ? ? ? ? ? userData.setJob(job);
? ? ? ? ? ? ? ? userData.setMgr(mgr);
? ? ? ? ? ? ? ? userData.setHireDate(hireDate);
? ? ? ? ? ? ? ? userData.setSal(sal);
? ? ? ? ? ? ? ? userData.setComm(comm);
? ? ? ? ? ? ? ? userData.setDeptno(deptno);
? ? ? ? ? ? ? ? dataList.add(userData); ?//把對象添加集合中
? ? ? ? ? ? }
? ? ? ? ? ? rs.close();
? ? ? ? ? ? pt.close();
? ? ? ? ? ? conn.close();
? ? ? ? } catch (SQLException e) {
? ? ? ? ? ? e.printStackTrace();
? ? ? ? }
? ? ? ? return dataList;
? ? }
?
? ? /**
? ? ?* 返回總頁數
? ? ?* @return
? ? ?*/
? ? public int getMaxPage(int rowsPerPage) {
? ? ? ? int maxPage;
? ? ? ? int maxRowCount = 0;
? ? ? ? String url = "jdbc:oracle:thin:@localhost:1521:orcl";
? ? ? ? try {
? ? ? ? ? ? conn = DriverManager.getConnection(url,"scott","tiger"); ?//創建數據庫連接
? ? ? ? ? ? String sql = "select count(*) from emp";
? ? ? ? ? ? pt = conn.prepareStatement(sql);
? ? ? ? ? ? rs = pt.executeQuery();
? ? ? ? ? ? if (rs.next()){
? ? ? ? ? ? ? ? maxRowCount = rs.getInt(1); ?//總行數
? ? ? ? ? ? }
? ? ? ? } catch (SQLException e) {
? ? ? ? ? ? e.printStackTrace();
? ? ? ? }
? ? ? ? maxPage = (maxRowCount + rowsPerPage - 1) / rowsPerPage; ?//總頁數
? ? ? ? return maxPage;
? ? }
}

創建 Servlet 對顯示頁面進行控制

package com.servlet;
?
import com.dao.DBHelper;
import com.tool.UserData;
?
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.*;
?
public class Servlet extends HttpServlet {
?
? ? public int rowsPerPage; ?//每頁顯示的行數
? ? public int curPage; ?//當前頁頁碼
? ? public int maxPage; ?//總共頁數
? ? DBHelper db = new DBHelper();
? ? public Servlet(){
? ? ? ? rowsPerPage = 5;
? ? }
?
? ? protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
? ? ? ? String curPage1 = request.getParameter("page"); ?//獲取當前頁頁碼
? ? ? ? if (curPage1 == null){
? ? ? ? ? ? curPage = 1;
? ? ? ? ? ? request.setAttribute("curPage",curPage); ?//設置curPage對象
? ? ? ? }else {
? ? ? ? ? ? curPage = Integer.parseInt(curPage1);
? ? ? ? ? ? if (curPage < 1){
? ? ? ? ? ? ? ? curPage = 1;
? ? ? ? ? ? }
? ? ? ? ? ? request.setAttribute("curPage",curPage);
? ? ? ? }
?
? ? ? ? List<UserData> dataList;
? ? ? ? dataList = db.getData(curPage,rowsPerPage); ?//獲取當前頁的數據
? ? ? ? maxPage = db.getMaxPage(rowsPerPage); ?//獲取總頁數
? ? ? ? request.setAttribute("dataList",dataList);
? ? ? ? request.setAttribute("maxPage", maxPage);
?
? ? ? ? RequestDispatcher rd = request.getRequestDispatcher("pagemain.jsp"); ?//將請求轉發到pagemain.jsp頁面
? ? ? ? rd.forward(request,response);
? ? }
?
? ? protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
? ? ? ? doPost(request,response);
? ? }
}

創建 JSP 頁面,顯示數據。

<%@ page import="java.util.List" %>
<%@ page import="com.tool.UserData" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
? ? <title>servlet數據分頁</title>
? ? <link rel="stylesheet" type="text/css" href="css.css">
</head>
<body>
<div style="margin-top: 15%; margin-left: 25%">
? ? <table>
? ? ? ? <caption>SCOTT用戶,EMP表中的數據</caption>
? ? ? ? <%! int curPage,maxPage; %>
? ? ? ? <% curPage =Integer.parseInt(request.getAttribute("curPage").toString()); %> <!--取得當前頁-->
? ? ? ? <% maxPage =Integer.parseInt((String)request.getAttribute("maxPage").toString()); %> <!--取得總頁數-->
? ? ? ? <%if (request.getAttribute("dataList") == null){
? ? ? ? %>
? ? ? ? <tr>
? ? ? ? ? ? <td colspan="8">沒有數據</td>
? ? ? ? </tr>
? ? ? ? <%
? ? ? ? }else {
? ? ? ? %>
? ? ? ? <tr>
? ? ? ? ? ? <!--表頭-->
? ? ? ? ? ? <th>EMPNO</th>
? ? ? ? ? ? <th>ENAME</th>
? ? ? ? ? ? <th>JOB</th>
? ? ? ? ? ? <th>MGR</th>
? ? ? ? ? ? <th>HIREDATE</th>
? ? ? ? ? ? <th>SAL</th>
? ? ? ? ? ? <th>COMM</th>
? ? ? ? ? ? <th>DEPTNO</th>
? ? ? ? </tr>
? ? ? ? <%
? ? ? ? ? ? List list = (List) request.getAttribute("dataList");
? ? ? ? ? ? for (Object aList : list) {
? ? ? ? ? ? ? ? UserData userData = (UserData) aList;
? ? ? ? %>
? ? ? ? <tr>
? ? ? ? ? ? <!--取得表中數據-->
? ? ? ? ? ? <td><%= userData.getEmpno() %></td>
? ? ? ? ? ? <td><%= userData.getEname() %></td>
? ? ? ? ? ? <td><%= userData.getJob() %></td>
? ? ? ? ? ? <td><%= userData.getMgr() %></td>
? ? ? ? ? ? <td><%= userData.getHireDate() %></td>
? ? ? ? ? ? <td><%= userData.getSal() %></td>
? ? ? ? ? ? <td><%= userData.getComm() %></td>
? ? ? ? ? ? <td><%= userData.getDeptno() %></td>
? ? ? ? </tr>
? ? ? ? <%
? ? ? ? ? ? ? ? }
? ? ? ? ? ? }
? ? ? ? %>
? ? </table>
</div>
<div style="margin-top: 8%; margin-left: 29%">
? ? 第<%= curPage %>頁,共<%= maxPage %>頁 ?
? ? <%if (curPage > 1){
? ? %>
? ? <a href="Servlet?page=1">首頁</a>
? ? <a href="Servlet?page=<%=curPage - 1%>">上一頁</a>
? ? <%
? ? }else {
? ? %>
? ? 首頁 上一頁
? ? <%
? ? ? ? }%>
? ? <%if (curPage < maxPage){
? ? %> ?
? ? <a href="Servlet?page=<%=curPage + 1%>">下一頁</a>
? ? <a href="Servlet?page=<%=maxPage %>">尾頁</a>
? ? <%
? ? }else {
? ? %>
? ? 下一頁 尾頁
? ? <%
? ? ? ? }%>
? ? ? 轉至第 <form name="form1" action="Servlet" method="get">
? ? <label>
? ? ? ? <select name="page" οnchange="document.form1.submit()">
? ? ? ? ? ? <%for ( int i = 1; i <= maxPage; i++){
? ? ? ? ? ? ? ? if (i == curPage){
? ? ? ? ? ? %>
? ? ? ? ? ? <!--當前頁頁碼默認選中-->
? ? ? ? ? ? <option selected value="<%= i%>"><%= i %></option>
? ? ? ? ? ? <%
? ? ? ? ? ? }else {
? ? ? ? ? ? %>
? ? ? ? ? ? <option value="<%= i %>"><%= i %></option>
? ? ? ? ? ? <%
? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? }%>
? ? ? ? </select>
? ? </label>
</form> 頁
</div>
</body>
</html>
?
web.xml
? ? <servlet>
? ? ? ? <servlet-name>Servlet</servlet-name>
? ? ? ? <servlet-class>com.servlet.Servlet</servlet-class>
? ? </servlet>
? ? <servlet-mapping>
? ? ? ? <servlet-name>Servlet</servlet-name>
? ? ? ? <url-pattern>/Servlet</url-pattern>
? ? </servlet-mapping>

總結

以上是生活随笔為你收集整理的Java Servlet 开发常用代码、模板、问题的全部內容,希望文章能夠幫你解決所遇到的問題。

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

能在线观看的日韩av | 久久网站av | av网站有哪些 | 狠狠色伊人亚洲综合网站野外 | 99视频网站| 97电影在线看视频 | 国产精品亚洲片夜色在线 | 手机在线看a | 久久99精品国产 | 久久高清片 | 国产91免费观看 | 日韩成人免费电影 | 日韩影视在线观看 | 四虎国产精品成人免费影视 | 四虎国产精品成人免费4hu | 久久视频精品 | 免费在线观看一区 | 亚洲乱码久久久 | 久久99国产综合精品免费 | 丁香六月久久综合狠狠色 | 欧美日韩啪啪 | 亚洲精品在 | 成人va在线观看 | 99精品国产在热久久下载 | 黄污在线看 | 久久夜视频| 一区二区精品在线视频 | 亚洲精品国偷拍自产在线观看蜜桃 | 天天操夜夜曰 | 97成人精品区在线播放 | 久久人91精品久久久久久不卡 | 久久精品国亚洲 | 九色porny真实丨国产18 | 又色又爽又黄高潮的免费视频 | 中文字幕在线观看亚洲 | ww亚洲ww亚在线观看 | 久久久久久久久毛片精品 | 国产精品一区二区精品视频免费看 | 五月天.com | 在线观看视频国产一区 | 黄色av在 | 午夜视频免费播放 | 久久成人国产精品一区二区 | 久久久夜色 | av在线免费在线 | 久久99精品热在线观看 | 欧美精品免费一区二区 | 黄色成人毛片 | 免费亚洲成人 | 国产亚洲成人网 | 国产精品久久精品 | 日韩av高清在线观看 | 色永久免费视频 | 午夜私人影院 | 精品国产电影 | 亚洲精品一区二区三区四区高清 | 欧美亚洲一区二区在线 | 探花视频在线版播放免费观看 | 欧美黑人xxxx猛性大交 | 日本黄色大片免费看 | 探花视频网站 | 69av免费视频 | 久久婷婷一区 | 91成人免费观看视频 | 在线观看蜜桃视频 | 天天干夜夜操视频 | 国产一级高清视频 | 日韩电影黄色 | 午夜精品久久久久久 | 国产黄色免费看 | av在线h| 久久论理| 成人国产精品一区 | 国产亚洲精品久久久久秋 | 日韩视频三区 | 免费观看的黄色 | 伊人婷婷色 | 日韩精品高清不卡 | 国产精品一区久久久久 | 伊人久操 | 高清av中文在线字幕观看1 | 在线一区av | 91污视频在线| 操操日 | 91av超碰 | 免费中文字幕视频 | 国产精品久久久久久久久久新婚 | 四虎在线观看网址 | 网站你懂的 | 友田真希x88av | 最近2019中文免费高清视频观看www99 | 国产精品久久久久久一二三四五 | 98涩涩国产露脸精品国产网 | 天天综合视频在线观看 | 欧美孕交vivoestv另类 | 日韩免费二区 | 狠狠色伊人亚洲综合成人 | 亚洲欧洲精品一区 | 成人a视频在线观看 | 免费日韩电影 | 最新精品视频在线 | 夜夜躁狠狠躁 | 在线观看色视频 | 精品在线播放视频 | 久久全国免费视频 | 日韩黄在线观看 | 久久久免费看片 | 欧美精品中文在线免费观看 | 在线视频 一区二区 | 午夜av色 | 免费av网址大全 | 久久系列 | 欧美一区中文字幕 | 日韩一区二区在线免费观看 | 日韩二区精品 | 日本不卡久久 | 国产成人黄色在线 | 国产成人资源 | 国产小视频福利在线 | 在线欧美小视频 | 国产91精品一区二区麻豆亚洲 | 免费亚洲一区二区 | 欧美精品做受xxx性少妇 | 国产麻豆精品在线观看 | www.亚洲精品 | 超碰人人超碰 | 天天操福利视频 | 久久福利剧场 | 久久中文字幕视频 | 中午字幕在线观看 | 日韩精品久久久久久久电影99爱 | av中文字幕网 | 日日夜夜草 | 激情av网址| 国产美女精品久久久 | 美女视频一区二区 | 一级成人免费视频 | 免费视频网 | 麻豆传媒电影在线观看 | 亚洲一区二区三区在线看 | 娇妻呻吟一区二区三区 | 久久草网站 | 亚洲欧美乱综合图片区小说区 | 婷婷色在线资源 | 亚洲精品在线视频 | 国产最新在线视频 | 国产午夜精品视频 | 色综合久久久久综合 | 玖玖在线免费视频 | 999久久a精品合区久久久 | 久久99精品国产麻豆宅宅 | 国产精品美女久久久久久 | 欧美少妇bbwhd| 久久婷婷国产色一区二区三区 | 国产精品区免费视频 | 91资源在线免费观看 | 青青河边草免费 | 亚洲激色 | 在线免费观看国产视频 | 麻豆久久一区二区 | 欧美日韩高清一区二区 国产亚洲免费看 | 国产日韩欧美在线播放 | 久久综合亚洲鲁鲁五月久久 | 国产一区视频免费在线观看 | 玖玖视频 | 免费福利视频网站 | 麻豆成人精品视频 | 在线激情影院一区 | 欧美久久久久久久久久 | 亚洲国产成人在线 | 激情丁香综合 | 亚洲h视频在线 | 激情久久五月 | 综合天堂av久久久久久久 | 色吊丝在线永久观看最新版本 | 免费视频网 | 国产午夜精品av一区二区 | 中文字幕一区av | 国产福利在线免费 | 欧美精品资源 | 国产精品丝袜久久久久久久不卡 | 久久久精品成人 | 在线香蕉视频 | 亚洲国产精品va在线看黑人动漫 | 午夜精品久久久久久 | 五月天.com | 免费在线日韩 | 精品成人国产 | 国产视频中文字幕在线观看 | 少妇bbb | 免费成人在线观看 | 天海冀一区二区三区 | 国内精品久久天天躁人人爽 | 91九色综合| 99久久精品午夜一区二区小说 | 欧美精品v国产精品 | 精品国产伦一区二区三区观看方式 | av日韩av| 国产精品网红福利 | 国产精品资源网 | 亚洲综合色丁香婷婷六月图片 | 综合色中色 | 国色天香永久免费 | 在线91播放| 亚洲精品视频在线免费 | 久久九九精品久久 | 日日日操 | 亚洲久草在线视频 | 国产精品手机在线播放 | 国产美女视频一区 | av在线超碰 | 激情婷婷在线观看 | a级成人毛片 | 精品国产乱子伦一区二区 | 波多野结衣一区 | 99热这里是精品 | 久久成年人网站 | 热久久最新地址 | 久久精品综合网 | 天天做综合网 | 国产精品久久久久久久久搜平片 | 久久综合免费 | 超碰在线人 | 亚洲精品色 | 日韩精品一区二区三区丰满 | 久久成人人人人精品欧 | 成人免费观看完整版电影 | 精品无人国产偷自产在线 | 探花视频在线观看免费 | 国产一区二区三区久久久 | 国产美女视频网站 | 国产精品情侣视频 | 啪啪精品 | 久久国产精品免费一区二区三区 | 操操操com | 正在播放 国产精品 | 午夜av一区二区三区 | 久久久久欧美精品999 | 黄色资源在线观看 | 手机看片午夜 | 另类五月激情 | 久久午夜电影网 | 国产黄色av | 欧美日韩在线观看一区二区三区 | 97人人模人人爽人人喊网 | 久久久久国产精品免费免费搜索 | av在线成人 | 成人黄色大片在线免费观看 | 91自拍91 | 亚洲五月激情 | 久久毛片网站 | 国产色视频网站2 | 精品无人国产偷自产在线 | 99色99| 日韩国产精品久久 | av在线影视| 国产一二区免费视频 | 最新午夜 | 99久久电影 | 国产手机视频在线观看 | 国产免费又黄又爽 | 亚洲一区视频在线播放 | 国产高清av免费在线观看 | 九九九九热精品免费视频点播观看 | 久久亚洲综合国产精品99麻豆的功能介绍 | 中文字幕免 | 亚洲最大av网 | 国产四虎影院 | 国产色婷婷在线 | 香蕉日日 | 久久国产精品一区二区三区四区 | 国产精品午夜在线观看 | 久久久免费在线观看 | 中午字幕在线观看 | 国产精品字幕 | 日韩久久精品一区二区三区下载 | 精品久久久久久久久久国产 | 天天插天天操天天干 | 国产韩国精品一区二区三区 | 国产欧美精品一区aⅴ影院 99视频国产精品免费观看 | 久久新| 天天射网 | 免费精品在线视频 | 激情五月婷婷综合 | 国产黄色免费 | 麻豆视频免费版 | 精品不卡视频 | 久久神马影院 | 日韩国产高清在线 | 一区二区视频免费在线观看 | 国产视频导航 | 欧美综合在线观看 | 国产尤物一区二区三区 | 国色天香第二季 | 中文字幕日韩有码 | 少妇av网 | 中文字幕国产亚洲 | 亚洲国产小视频在线观看 | 成人一区在线观看 | 久久精品aaa | 日韩精品视频在线观看免费 | 免费在线成人 | 成片免费观看视频大全 | 日韩激情在线视频 | 新版资源中文在线观看 | 中文视频在线看 | 国产精品99久久99久久久二8 | 天天搞天天 | 精品a在线 | 欧美亚洲精品一区 | 六月丁香婷婷网 | 中文亚洲欧美日韩 | 在线国产中文字幕 | 四虎成人精品永久免费av | 久久9精品 | 欧美日韩一区三区 | 久久久久久综合网天天 | 亚洲日本黄色 | 九九视频免费观看视频精品 | 亚洲国产一区二区精品专区 | 欧美性免费 | 亚洲激情在线观看 | 日批在线看 | 在线观看视频免费大全 | 丁香九月激情 | 久久久久国产精品午夜一区 | 亚洲 欧美 综合 在线 精品 | 欧美日韩国产一区二区三区在线观看 | 波多野结衣在线观看一区 | 国产精品一区二区久久精品 | 精品视频资源站 | 成人一级免费电影 | 欧美午夜a | 久草五月 | 婷婷综合亚洲 | 国内丰满少妇猛烈精品播放 | 中文在线字幕免费观 | 中文字幕免费高 | 中文字幕亚洲不卡 | 亚洲国产成人在线播放 | 久久9999久久 | 天天操婷婷 | 最新av在线免费观看 | 日日碰狠狠添天天爽超碰97久久 | 国产精品美女久久久久久 | 国产精品毛片一区视频播不卡 | 激情综合五月婷婷 | 亚洲国产中文在线观看 | 成人cosplay福利网站 | 国产精品久久久久久久久久免费看 | 麻豆免费视频 | 国产精品成人一区 | 99久久夜色精品国产亚洲 | 日韩欧美成 | 成人电影毛片 | 毛片a级片 | 国产精品久久久久久久婷婷 | 色综合中文综合网 | 亚洲久草网 | 国产日韩精品一区二区在线观看播放 | 香蕉精品在线观看 | 中文字幕在线观看完整版电影 | 五月黄色| 日韩精品一区二 | avsex| 欧美日韩一区二区三区在线观看视频 | 中文字幕精品久久 | a级国产乱理论片在线观看 伊人宗合网 | 久久无码精品一区二区三区 | 亚洲成av人片 | 综合伊人av | 国产在线成人 | 98久9在线 | 免费 | av专区在线| 中文字幕在线色 | 99热国产精品 | 日本久久久久久久久 | 久久激情视频 久久 | 免费视频资源 | 久草在线欧美 | 成人av直播 | av高清在线 | 婷婷久久精品 | 久久99亚洲精品久久 | 久久精品中文字幕免费mv | 午夜影视剧场 | 欧美日韩亚洲在线 | 国产一区二区三区视频在线 | 91探花国产综合在线精品 | 91视频-88av | 国产一区二区电影在线观看 | 国产亚洲精品久久久久久电影 | 在线观看中文字幕一区二区 | 国产一级视频在线 | 亚洲精品乱码白浆高清久久久久久 | 国产精品福利午夜在线观看 | 色婷婷影视| 久久久久久毛片精品免费不卡 | 日本黄区免费视频观看 | 高清免费在线视频 | 日本韩国欧美在线观看 | 狠狠婷婷| 操久久免费视频 | 免费看片日韩 | 久久久91精品国产一区二区精品 | 亚州视频在线 | 视频99爱 | 狠狠激情中文字幕 | 狠狠88综合久久久久综合网 | 久久综合狠狠狠色97 | 国产精品a久久久久 | 久久久久女人精品毛片九一 | 欧美日韩免费看 | 97操操| 精品字幕 | 粉嫩aⅴ一区二区三区 | 9797在线看片亚洲精品 | 国产成人av网 | 国产精品久久久久久久免费大片 | 精品国产免费一区二区三区五区 | 国产999精品久久久久久 | 欧美一级片免费播放 | 91亚洲永久精品 | 九七人人干 | 免费看片网页 | 天天干天天拍天天操 | 日日爱av| 91日韩免费 | 永久免费观看视频 | 免费亚洲视频 | 99久久99久久免费精品蜜臀 | 精品欧美小视频在线观看 | 亚洲国产成人精品电影在线观看 | 在线日本v二区不卡 | 亚洲黄色一级大片 | 日韩一区二区三区免费电影 | 亚洲资源视频 | 五月婷婷在线视频观看 | 亚洲精品裸体 | 久草久热 | 久久久国产精品网站 | 少妇性bbb搡bbb爽爽爽欧美 | 亚洲免费a | 日韩av免费一区二区 | 国产视频资源在线观看 | 亚洲成av人片在线观看 | 亚洲黄色在线免费观看 | 五月香视频在线观看 | se婷婷 | 日韩中文字幕a | 丁香久久五月 | 三级动态视频在线观看 | 99国产视频 | 国产69久久| 成人一区二区三区在线观看 | 五月婷婷六月丁香在线观看 | 久久激情综合 | 国产高清视频在线播放一区 | 久久久国内精品 | 亚洲欧美国产日韩在线观看 | 在线免费观看的av | 久久影院午夜论 | 中文字幕黄色网 | 亚洲作爱 | 91看成人 | 三级黄色在线观看 | 日韩免费播放 | 日本mv大片欧洲mv大片 | 久久超碰免费 | 久久天天躁夜夜躁狠狠躁2022 | 久久最新网址 | 久久综合久久久 | 色诱亚洲精品久久久久久 | 欧美高清成人 | 日本99热 | 日韩高清不卡在线 | 亚洲高清视频在线观看 | 激情av网址 | 97人人澡人人添人人爽超碰 | 日韩欧美视频一区二区 | 狠狠狠的干| 狠狠色狠狠色综合日日92 | 九九久久久久久久久激情 | 免费一级片在线 | 97国产精品 | av在线免费不卡 | 精品一区精品二区 | 国产亚洲精品xxoo | 亚洲婷婷在线 | 欧美最爽乱淫视频播放 | 婷婷色综合 | 久久久久蜜桃 | 天天做综合网 | 久草视频免费观 | 91精品推荐 | 91精品麻豆 | av网站播放 | 亚洲国产精品激情在线观看 | 啪一啪在线| 91精品一区二区在线观看 | av高清在线观看 | 黄色亚洲片| 激情xxxx| 久久国产精品区 | 91精品在线免费视频 | 小草av在线播放 | 天天射综合网视频 | 91大神电影| 五月婷婷综合在线 | 国产v在线播放 | 美女视频免费精品 | 日韩成人精品一区二区 | 久久久久亚洲精品中文字幕 | av在线网站免费观看 | 五月婷婷影视 | 九九精品视频在线 | 91在线区 | 黄色一级性片 | 天天做天天爽 | 亚洲第一区精品 | 国产又粗又猛又黄又爽 | 国产专区视频 | 国产视频在线观看一区 | 国产专区欧美专区 | avove黑丝 | 欧美精品二区 | 国产精品久久久久久av | 手机在线中文字幕 | 亚洲欧洲精品一区二区 | 精品欧美小视频在线观看 | 久久久av电影 | 麻豆视频免费观看 | 99久久精品国产系列 | 99免费在线视频观看 | 久久一区二区三区超碰国产精品 | 午夜三级大片 | 欧美大香线蕉线伊人久久 | 午夜成人免费电影 | 国产91对白在线 | 日本在线视频网址 | 视频 天天草 | 日韩视频一区二区 | 奇米影视8888在线观看大全免费 | 亚洲美女在线国产 | 在线免费观看av网站 | 免费男女羞羞的视频网站中文字幕 | 黄色亚洲免费 | 午夜精品一区二区三区在线视频 | 97色资源| 国产资源网 | 亚洲少妇xxxx| 日本中文字幕在线 | 18国产精品福利片久久婷 | 精品一二三四在线 | 玖玖视频网 | 天天射天天色天天干 | 色综合天天干 | 四虎永久免费 | 久久精品一区八戒影视 | 在线91视频 | 在线不卡中文字幕播放 | 91久久久国产精品 | 色哟哟国产精品 | 久久久久成人精品免费播放动漫 | 97香蕉久久国产在线观看 | 在线观看岛国 | 精品国内自产拍在线观看视频 | 天天操天天干天天 | 色婷婷97| 免费看黄20分钟 | 精品久久久久久久久久久久久久久久久久 | av一区在线播放 | 伊人久久av| 中文字幕在线中文 | 日韩特级毛片 | 午夜精品久久久久久久久久久久久久 | 国产午夜免费视频 | 亚洲在线观看av | 亚洲精品玖玖玖av在线看 | 超碰国产97 | 曰本免费av| 91精品综合| 亚洲天堂va | av中文天堂在线 | 亚洲一区精品二人人爽久久 | 91在线观看欧美日韩 | 精品国产免费一区二区三区五区 | 91色在线观看视频 | 久久精彩视频 | 国产不卡在线观看 | av日韩不卡| 欧美中文字幕第一页 | 丁香婷婷深情五月亚洲 | 黄色精品国产 | 久草精品视频 | 国产视频精品久久 | 国产成人综合图片 | 中文字幕超清在线免费 | 国产高清无线码2021 | 久久99精品久久久久久清纯直播 | 91网址在线| 99国产在线| 成人蜜桃视频 | 精品av在线播放 | 毛片基地黄久久久久久天堂 | 国产在线视频不卡 | 中文字幕在线观看第二页 | 国产成人精品久久二区二区 | 蜜臀av在线一区二区三区 | 国产精品免费在线视频 | 免费在线黄 | 亚洲视频免费视频 | 国产精品第二页 | 有码视频在线观看 | 亚洲午夜精品在线观看 | 成年人电影免费看 | 香蕉久久国产 | 91mv.cool在线观看 | 日韩在线第一区 | 碰超在线| 久久不射网站 | 亚洲日本va中文字幕 | 欧美亚洲国产精品久久高清浪潮 | 国产精品一区二区吃奶在线观看 | 中文字幕丝袜 | 日韩精品专区在线影院重磅 | 日韩美女av在线 | 国产裸体视频网站 | 国产二区视频在线 | 亚洲综合色丁香婷婷六月图片 | 天天爽人人爽 | 在线免费观看不卡av | 久热爱 | 又黄又爽的视频在线观看网站 | 天天干,天天射,天天操,天天摸 | 国产精品一区二区在线 | 91久久精品日日躁夜夜躁国产 | 夜添久久精品亚洲国产精品 | 久草在线看片 | 国产视频二 | 黄色午夜网站 | 日韩理论在线播放 | 91麻豆精品久久久久久 | 亚洲美女免费精品视频在线观看 | 成人午夜电影免费在线观看 | 久草视频精品 | 91丨九色丨蝌蚪丰满 | 9幺看片| 成人黄色毛片视频 | 欧美一区二区三区在线观看 | 天天色成人| 精品一区二区视频 | 亚洲精品动漫成人3d无尽在线 | 高清不卡免费视频 | 国产精品久久久久久久久免费看 | 天天爽人人爽夜夜爽 | 中文字幕亚洲字幕 | 国产综合在线观看视频 | 色网站在线免费观看 | 播五月婷婷 | 香蕉久草 | 亚洲视频网站在线观看 | 日韩在线视频观看免费 | 狠狠艹夜夜干 | 久久五月婷婷丁香社区 | 国内精品久久久久国产 | 国产成人高清在线 | 免费av网址在线观看 | 久久婷婷五月综合色丁香 | 2020天天干夜夜爽 | 亚洲区另类春色综合小说 | 日韩av不卡播放 | 成人黄色中文字幕 | 韩国一区二区三区视频 | 91看片在线免费观看 | 日本黄网站 | 97视频在线观看视频免费视频 | 天天干,天天干 | 中文字幕av在线播放 | 亚洲国产人午在线一二区 | 西西大胆啪啪 | 91久久国产露脸精品国产闺蜜 | 久久综合五月天婷婷伊人 | 91久久偷偷做嫩草影院 | 波多野结衣电影一区二区 | 五月天中文字幕mv在线 | 色国产精品 | 日韩av视屏在线观看 | 婷婷激情5月天 | 黄色成人91 | 成年人国产视频 | 在线高清av| 国产精品18久久久久久久久 | 久久亚洲福利 | 久久草草热国产精品直播 | 久草免费手机视频 | 亚洲精品资源 | 91女子私密保健养生少妇 | 中文字幕精品三区 | 黄色的视频网站 | 婷婷色中文字幕 | 97精品在线观看 | 国产精品一区二区你懂的 | 人人草在线视频 | 91精品爽啪蜜夜国产在线播放 | 欧美日韩裸体免费视频 | 亚洲成av | 91香蕉国产 | 最新av在线网址 | 欧美日韩久 | 成人网页在线免费观看 | 黄色视屏av| 国产精品国产三级在线专区 | 免费三级网 | 日韩r级电影在线观看 | 国产精品久久久久毛片大屁完整版 | 国产一区二三区好的 | 色婷婷视频在线 | 91av手机在线 | 久久久免费精品国产一区二区 | 欧美作爱视频 | 国产一级片在线播放 | 丁香激情综合久久伊人久久 | 免费在线国产 | 在线观看免费 | 四虎永久国产精品 | 欧美日韩一区二区免费在线观看 | 久久se视频 | 国产在线观看你懂得 | 日日干激情五月 | 国产精品观看 | 久久91久久久久麻豆精品 | 精品视频在线免费 | 国产精品不卡 | 美女av免费 | 在线日韩中文字幕 | 久久天堂精品视频 | 欧美精品免费视频 | 免费亚洲成人 | 9在线观看免费高清完整版 玖玖爱免费视频 | 午夜久久久精品 | 亚洲精品国产精品国自产 | 国产精品久久久久久久久久三级 | 精品一区91 | 99热国产在线观看 | 国产精品专区一 | 在线国产一区二区 | 日韩欧美精品在线观看视频 | 国产精品初高中精品久久 | 麻豆播放 | 91传媒激情理伦片 | 欧洲成人av | 亚洲第一区在线观看 | 精品福利国产 | 97超碰国产在线 | 91麻豆精品国产自产 | 在线观看视频99 | 国产精品一区二区果冻传媒 | 亚洲精品456在线播放 | 九九免费精品视频 | 在线看的av网站 | 中文区中文字幕免费看 | 国产香蕉久久 | 久久99久久99精品免观看软件 | 五月婷婷视频在线 | 日本精品视频在线播放 | 91高清在线| 中文字幕在线观看日本 | 精品国产欧美一区二区三区不卡 | 欧美日韩精品在线视频 | 日韩性片 | 99九九99九九九视频精品 | 中日韩男男gay无套 日韩精品一区二区三区高清免费 | 国产无套精品久久久久久 | 日本少妇高清做爰视频 | 深爱激情五月网 | 丁香激情婷婷 | 麻豆一二 | 色香蕉在线视频 | 午夜精选视频 | 成人资源站 | 91完整版在线观看 | 毛片在线播放网址 | 日本护士三级少妇三级999 | 9在线观看免费高清完整版在线观看明 | 久久久久久久久久久网站 | 日日干 天天干 | 91成人免费看片 | 日韩精品视频在线观看网址 | 色视频在线观看 | av一区在线播放 | 天天操天天爱天天干 | 悠悠av资源片 | 国产在线高清精品 | 97热在线观看 | 亚洲激情电影在线 | a在线观看国产 | 精品国产乱子伦一区二区 | 日韩色爱 | 日本在线观看中文字幕无线观看 | 久久久久久久久久网 | 97av精品 | 欧美日韩免费一区二区三区 | 久久久99精品免费观看乱色 | 欧美日韩国产一区二区在线观看 | 免费日韩精品 | 在线免费av播放 | 日韩天堂在线观看 | 日本三级不卡视频 | 中文字幕精品www乱入免费视频 | 国产精品99久久久久久人免费 | 久久免费激情视频 | 在线成人观看 | www.com操| 免费视频久久久久 | 亚洲日本一区二区在线 | 国产精品美女免费看 | www.在线观看av | 可以免费观看的av片 | 国产精品原创视频 | 国产中文字幕国产 | 九九免费在线看完整版 | 国产精品第一页在线 | 中文字幕久久精品亚洲乱码 | 中文字幕久久亚洲 | 欧洲激情综合 | 成人免费视频网站在线观看 | 国产99久久久国产精品免费二区 | 国产日产精品一区二区三区四区的观看方式 | 探花视频在线版播放免费观看 | 久草精品在线播放 | 成人黄色视 | 国产一区二区三区高清播放 | 天天综合成人网 | 国产精品乱码久久 | 久久久久亚洲精品国产 | 久久久精品久久 | 超碰在线91| aaa毛片视频 | 国产亚洲视频在线观看 | 日韩免费在线网站 | 激情网站免费观看 | 九九热精品国产 | 99久久精品国产欧美主题曲 | 婷婷在线精品视频 | 四川bbb搡bbb爽爽视频 | 亚洲精品久久久久久国 | 成人a视频| 黄色资源在线 | 久操中文字幕在线观看 | 国产亚洲精品成人av久久影院 | 亚洲aⅴ一区二区三区 | 99精品国产一区二区三区麻豆 | 久久精品国产精品亚洲精品 | 婷婷福利影院 | 黄网站色 | 成人羞羞视频在线观看免费 | 色偷偷男人的天堂av | 久草视频在线播放 | 伊人狠狠干 | 日韩字幕在线 | 亚洲欧美乱综合图片区小说区 | 黄色国产区 | 国产精品综合在线观看 | adn—256中文在线观看 | a黄色大片 | 亚洲精品88欧美一区二区 | 欧美最爽乱淫视频播放 | 97国产大学生情侣酒店的特点 | 亚洲视频综合 | 欧美日韩一区二区在线观看 | 337p欧美 | 国产高清在线一区 | 成人免费影院 | 国产日韩在线观看一区 | 国产精品久久久久久久久岛 | 日韩欧美精品一区二区 | 黄色毛片网站在线观看 | 日韩va欧美va亚洲va久久 | 欧美成人中文字幕 | 91在线视频在线 | 又爽又黄又无遮挡网站动态图 | 丁香五婷 | av中文字幕在线免费观看 | 亚洲黄色片一级 | 国产无吗一区二区三区在线欢 | 97精品国产97久久久久久粉红 | 日日夜夜添 | 国产福利不卡视频 | 成人免费视频网站 | 欧美精品午夜 | 91麻豆传媒 | 91在线精品播放 | 一区二区三区在线观看中文字幕 | 久久只精品99品免费久23小说 | 国产精品免费视频一区二区 | 精品uu| 麻豆视频在线观看免费 | 国产黄色片在线免费观看 | 国产一区二区在线看 | 超碰公开在线观看 | 97超级碰| 天天弄天天干 | 精品一区电影国产 | 久久久久久久久亚洲精品 | 九九热免费在线观看 | 亚洲国产欧美一区二区三区丁香婷 | 欧美成人性战久久 | 狠狠插狠狠干 | 一级电影免费在线观看 | 欧美在线aa | 日韩丝袜视频 | 999视频网 | 久久99精品一区二区三区三区 | 亚洲精选视频在线 | 国产精品久久久久久爽爽爽 | 午夜色婷婷 | 成人中文字幕在线观看 | 欧美欧美 | 国产精品18videosex性欧美 | 日日草视频| 成人av在线一区二区 | 日韩免费高清在线观看 | 久草精品视频在线观看 | 国产精品久久久久久69 | 日韩欧美在线中文字幕 | 日日干干夜夜 | 亚洲国产一二三 | 五月天天av | 五月婷婷六月丁香在线观看 | 黄色精品在线看 | 91精品国产电影 | 日本黄色a级大片 | 国产精品久久久久影院 | 免费看污黄网站 | 黄色片视频免费 | 欧美极度另类性三渗透 | 婷婷av资源 | 992tv又爽又黄的免费视频 | 日韩欧美一区二区三区黑寡妇 | 激情婷婷av | 99视频国产精品免费观看 | 久久综合狠狠综合 | 丁香六月婷婷开心婷婷网 | 日本在线免费看 | 91成人精品在线 | 一区二区高清在线 | 国产九九九视频 | 日韩av免费在线电影 | 国产福利小视频在线 | 成人av在线播放网站 | 伊人天天操 | 国产高清av | 黄色免费网战 | 人人爽人人爽人人片 | 三级av中文字幕 | 香蕉成人在线视频 | 午夜精品久久久久久久99水蜜桃 | 欧美日韩亚洲在线观看 | 欧洲一区二区在线观看 | 欧洲精品在线视频 | 久久久久综合精品福利啪啪 | 在线观看视频色 | av高清在线 | 免费在线视频一区二区 | 欧美一区日韩精品 | 日韩午夜电影院 | 91cn国产在线 | 在线 影视 一区 | 天天搞天天干天天色 | 日韩av影视| av短片在线观看 | a特级毛片| 亚洲午夜av久久乱码 | 国产一区免费在线观看 | 激情综合网五月 | 91精品国自产在线观看欧美 | 在线不卡中文字幕播放 | 亚洲国产精品女人久久久 | 超碰激情在线 | 337p日本大胆噜噜噜噜 | 91精品福利在线 | 国产中文字幕在线视频 | 国产精品三级视频 | 国产一级免费在线观看 | 亚洲视频中文 | 久久久久久久久网站 | 韩国精品一区二区三区六区色诱 | 日韩大片在线观看 | 亚洲综合欧美激情 | 91在线视频免费播放 | 精品国产欧美一区二区三区不卡 | 婷婷丁香六月天 | 日韩精品视频免费专区在线播放 | 最新91在线视频 | 99久久久精品 | 日韩精品一区二区三区高清免费 | 国产一级片视频 |