1. 程式人生 > >【疑難解答】如何通過servlet跳轉到jsp的錨點位置

【疑難解答】如何通過servlet跳轉到jsp的錨點位置

在實際情況中,我們往往需要從servlet中跳轉到jsp上的某一個特殊位置,而不只是首部,遺憾的是servlet中並不可以只在url後面加#引數的方式來跳轉到描點,下面,我們就來探討一下問題的解決方案
1.Servlet跳轉之前在request中加入一個引數(錨記的id)
2.Jsp中加入一段js程式碼,獲取1中的引數值,然後模擬錨記的點選

假設我們有這樣一個網頁
程式碼為

<style type="text/css">
    #div1{
        height: 1000px;
        background-color: gray;
    }
#div2{ height: 1000px; background-color: green; }
</style> </head> <body> <div id="div1"> </div> <a name="here" id="here" href="#here"></a> <div id="div2"> </div> </body>

預覽為
這裡寫圖片描述
如果我們需要直接翻滾到綠色的部分
直接在url後面接上#here即可,如http://localhost:8080/ex150512_testHref/index.jsp#here

,輸入回車
這裡寫圖片描述

OK,很好,
但是當我們需要請求Servlet,然後再返回Jsp頁面需要翻滾到綠色部分時,又可以直接在url後面加上#here來實現嗎?
在頁面上加上一個超連結來訪問servlet

<body>
    <a href="servlet1">GOTOGREEN</a>
    <div id="div1">

    </div>
    <a name="here" id="here" href="#here"></a>
    <div id="div2">

    </div
>
</body>

Servlet核心程式碼為

request.getRequestDispatcher("/index.jsp#here").forward(request, response);

點選之後
這裡寫圖片描述
發現出現404錯誤

解決方案
1.在request中加入一個引數(錨記的id)
servlet核心程式碼為

request.setAttribute("location", "here");
    request.getRequestDispatcher("/index.jsp").forward(request, response);

2.在頁面加入一段js程式碼,跳轉到相應的錨記

<script type="text/javascript">
    window.onload=function(){
    //如果location存有資料,跳到錨點
    var location_id='${location}';
    if(location_id!=''){
        document.getElementById(location_id).click();
    }

}
</script>

3.在頁面上加上一個超連結來訪問servlet2
最後的完整頁面程式碼為

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
<style type="text/css">
    #div1{
        height: 1000px;
        background-color: gray;
    }
    #div2{
        height: 1000px;
        background-color: green;
    }
</style>
<script type="text/javascript">
window.onload=function(){
    //如果location存有資料,跳到錨點
    var location_id='${location}';
    if(location_id!=''){
        document.getElementById(location_id).click();
    }

}
</script>
</head>
<body>
    <a href="servlet1">GOTOGREEN</a>
    <a href="servlet2">GOTOGREEN2</a>
    <div id="div1">

    </div>
    <a name="here" id="here" href="#here"></a>
    <div id="div2">

    </div>
</body>
</html>

最後點選GOGREEN2,然後你會發現,你成功了!
這裡寫圖片描述