servlet、jsp跳轉(傳值)總結及URL傳參數__js

來源:互聯網
上載者:User
Servlet傳值總結 1) redirect方式 [ 效率不高 ]
  request和response沒有傳給目標頁面
  response.sendRedirect("/a.jsp");
  頁面的路徑是相對路徑。sendRedirect可以將頁面跳轉到任何頁面,不一定局限於本web應用中,如:
  response.sendRedirect("URL");跳轉後瀏覽器地址欄變化。
  這種方式要傳值出去的話,只能在url中帶parameter或者放在session中,無法使用request.setAttribute來傳遞。
  傳值:HttpSession session =request.getSession();
              session.setAttribute("bbbb", 1111111111);
  取值:session.getAttribute("bbbb");

  傳值:RequestDispatcher rd =application.getRequestDispatcher("/queryResult.jsp?a="+000);
  取值:request.getParameter("a") 

2) forward方式 [ 更多地使用此方法進行伺服器端的跳轉 ]
   Servlet Context application =this.getServletContext();    //this是這個頁面
  RequestDispatcher rd = application.getRequestDispatcher("/目標頁面");
  rd.forward(request, response);
  Servlet頁面跳轉的路徑是相對路徑。forward方式只能跳轉到本web應用中的頁面上,跳轉後瀏覽器地址欄不會變化。
  使用這種方式跳轉,傳值可以使用三種方法:url中帶parameter,session,request.setAttribute
  傳值:request.setAttribute("a", 00);
  取值:request.getAttribute("a");

  傳值:HttpSession session =request.getSession();
              session.setAttribute("bbbb", 1111111111);
  取值:session.getAttribute("bbbb");

  傳值:RequestDispatcher rd =application.getRequestDispatcher("/queryResult.jsp?a="+000);
  取值:request.getParameter("a");
  getParameter()只能傳遞字串,而setAttribute()/getAttribute()還可以傳遞對象
  其次getParameter方法傳遞的資料,會從Web用戶端傳到Web伺服器端,代表HTTP請求資料。  
  只能是頁面發送到後台或者Web用戶端傳到Web伺服器端

=======================================================================
servlet 和 jsp 跳轉頁面的幾種方法
跳轉分兩部分:

一是發生在servlet,一是在JSP,其實JSP也就是servlet,不過還是有點差異滴。當然,在servlet中,一般跳轉都發生在doGet, doPost等方法裡面。

Servlet:

(1)redirect 方式
response.sendRedirect("/a.jsp");
頁面的路徑是相對路徑。
sendRedirect可以將頁面跳轉到任何頁面,不局限於本web應用中,如:response.sendRedirect(http://www.ycul.com);
跳轉後瀏覽器地址欄變化。
這種方式要傳值出去的話,只能在url中帶parameter或者放在session中,無法使用request.setAttribute來傳遞。

  (2) forward方式
request.getRequestDispatcher("/a.jsp").forward(request, response);

getServletContext().getRequestDispatcher("/a.jsp").forward(request, response);
頁面的路徑是相對路徑。
forward方式只能跳轉到本web應用中的頁面上。
跳轉後瀏覽器地址欄不會變化。
使用這種方式跳轉,傳值可以使用三種方法:url中帶parameter,session,request.setAttribute

  JSP

1)response.sendRedirect();
和servlet的response.sendRedirect()方式一樣。
此語句前不允許有out.flush(),如果有,會有異常:
java.lang.IllegalStateException: Can't sendRedirect() after data has committed to the client.
at com.caucho.server.connection.AbstractHttpResponse.sendRedirect(AbstractHttpResponse.java:558)....
跳轉後瀏覽器地址欄變化
如果要跳到不同主機下,跳轉後,此語句後面的語句會繼續執行,如同新開了線程,但是對response的操作已經無意義了;
如果要跳到相同主機下,此語句後面的語句執行完成後才會跳轉

2)response.setHeader("Location","");
此語句前不允許有out.flush(),如果有,頁面不會跳轉。
跳轉後瀏覽器地址欄變化
此語句後面的語句執行完成後才會跳轉.

3)<jsp:forward page="" />
此語句前不允許有out.flush(),如果有,會有異常:
java.lang.IllegalStateException: forward() not allowed after buffer has committed.
at com.caucho.server.webapp.RequestDispatcherImpl.forward(RequestDispatcherImpl.java:134)
at com.caucho.server.webapp.RequestDispatcherImpl.forward(RequestDispatcherImpl.java:101)
at com.caucho.jsp.PageContextImpl.forward(PageContextImpl.java:836)
跳轉後瀏覽器地址欄不變,但是只能跳到當前主機下
此語句後面的語句執行完成後才會跳轉 ==============================================================
例題:login.jsp---->LoginServlet.java----->UserDAO.java----->success.jsp
 請看下面項目部署結構:   web.xml:
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" 
    xmlns="http://java.sun.com/xml/ns/javaee" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
    http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
    
    <servlet>
        <servlet-name>loginservlet</servlet-name>
        <servlet-class>com.laolu.servlet.LoginServlet</servlet-class>
    </servlet>
    
    <servlet-mapping>
        <servlet-name>loginservlet</servlet-name>
        <url-pattern>/loginservlet</url-pattern>
    </servlet-mapping>
    
  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>
</web-app>
login.jsp:
<%@ 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>login.jsp</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="loginservlet" method="post">
         使用者名稱:<input type="text" name="uname" /><br/>
         密碼:<input type="password" name="ps" /><br/>
        文本域:<textarea rows="10" cols="30" name="text"></textarea><br/>
        <input type="submit" value="提交">
    </form>
  </body>
</html>
LoginServlet.java:
package com.laolu.servlet;

import java.io.UnsupportedEncodingException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.laolu.dao.UserDAO;

public class LoginServlet extends HttpServlet{

    public void doGet (HttpServletRequest request,HttpServletResponse response){
        String name = request.getParameter("uname");
        byte[] b;
        try {
            b = name.getBytes("iso8859-1");
            String username = new String(b,"UTF-8");
            
            String password = request.getParameter("ps");
            
            String text = request.getParameter("text");
            
            //設定session範圍屬性
            request.getSession().setAttribute("china", "李靜");
            
            //設定request範圍屬性
            request.setAttribute("n", "肖人");
            
            UserDAO user = new UserDAO();
            
            boolean flag = user.findUser(username,password);
            if(flag){
                //將需要轉寄或發送的地址進行轉碼操作。這樣在目標頁面更好取值,以免亂碼產生
                 String url = "forward/success.jsp?first=傳遞第一個參數&second=傳遞第二個參數";
                url = new String(url.getBytes("UTF-8"),"ISO8859-1");
                
                 //用戶端跳轉。只有session範圍的屬性及url中參數會被傳遞下去
                //response.sendRedirect(url);
                
                 //伺服器端跳轉。request對象、url中的參數會被傳遞下去
                request.getRequestDispatcher( url).forward(request, response);
                
            }else{
                response.sendRedirect("forward/error.jsp");
            }
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        } catch (Exception e) {
            e.printStackTrace();
            }
        
    }
    
    public void doPost(HttpServletRequest request,HttpServletResponse response){
        doGet(request, response);
    }
}
success.jsp:
<%@ 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>My JSP 'login.jsp' starting page</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>
        servlet登入成功。<br/><br/>
         <!-- 取得在servlet中設定的session範圍屬性值 -->
         <%= "session中取得的屬性值"+ session.getAttribute("china") %><br/>
          <!-- 取得通過url傳遞的參數的值。並進行解碼。否則會亂碼 -->
         <%="url中第一個參數:"+ new String(request.getParameter("first").getBytes("ISO8859-1"),"UTF-8") %>
            <br/>
             <%="url中第二個參數:"+ new String(request.getParameter("second").getBytes("ISO8859-1"),"UTF-8") %>
 
        <br/>
         <!-- 取得在servlet中設定的request的屬性值。並進行解碼。否則會亂碼 -->
        <%="request中取得的屬性值:"+ request.getAttribute("n") %>
        <br/>
         <!-- 取得表單提交過來的資料。同樣需要進行解碼-->
        <%=new String(request.getParameter("text").getBytes("ISO8859-1"),"UTF-8") %>
  </body>
</html>
error.jsp:
<%@ 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>My JSP 'login.jsp' starting page</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>
       servlet輸入錯誤,<a href="forward/login.jsp">請重新登入</a>
  </body>
</html>
UserDAO:
package com.laolu.dao;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class UserDAO {
    Connection  conn = null;
    //去串連資料庫,查詢userInfo表中的資料
    //1.串連資料庫
    public Connection getCon(){
        //1.載入資料庫驅動程式:微軟公司開發的資料庫驅動程式jar包,添加到WEB-INF/lib目錄下
        String driver = "com.microsoft.sqlserver.jdbc.SQLServerDriver";
        String url = "jdbc:sqlserver://localhost:1433;DataBaseName=abc";
        
        try {
            Class.forName(driver);
            try {
                conn = DriverManager.getConnection(url,"sa",&

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.