標籤:
為了實現單擊左側導覽列,動態改變右側(一個jsp檔案)的內容,需要改變變數var的值,進而實現改變default部分內容的目的(自己想的方法,因為實在是layman。應該有簡便快捷的方法,可我不知道。)
詳述一下整個流程,以免以後忘記。定義一個java方法,其中定義靜態變數var,使得當var被賦予不同的值時default顯示不同內容。而賦值的觸發條件是單擊某個<a>,即onclick。這裡面的問題是,如何在jsp裡面改變java裡的變數值。。。。解決方案就是servelet了。下面是jsp中的js代碼,觸發條件為
<a href=""onclick=AjaxServlet("list")> 資訊</a>
list是我希望傳遞給變數var的值
<script> var req; function AjaxServlet(pointInfo) { //擷取表單提交的內容 var url="AjaxServlet?id="+pointInfo;
//?之前代表要訪問的servlet名稱,要在web.xml檔案裡定義。?後面是傳遞的值。 console.log(url); //建立一個XMLHttpRequest對象req if(window.XMLHttpRequest) { //IE7, Firefox, Opera支援 req = new XMLHttpRequest(); }else if(window.ActiveXObject) { //IE5,IE6支援 req = new ActiveXObject("Microsoft.XMLHTTP"); } /* open(String method,String url, boolean )函數有3個參數 method參數指定向servlet發送請求所使用的方法,有GET,POST等 boolean值指定是否非同步,true為使用,false為不使用。 我們使用非同步才能體會到Ajax強大的非同步功能。 */ req.open("POST", url, true);
//console.log("!!!!!!!!!!!!!!!!!!!!");//調試用
//onreadystatechange屬性存有處理伺服器響應的函數,有5個取值分別代表不同狀態
// req.onreadystatechange = callback; //不需要傳回值
//send函數發送請求 req.send(null); } </script>
下面是servelet在web.xml檔案裡的配置,名字自訂。class即建立的java方法url-pattern是在jsp或其他位置調用servelet的方法,可以是自己定義的任何字串組合(應該是)。
<servlet> <servlet-name>AjaxServlet</servlet-name> <servlet-class>Model.AjaxServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>AjaxServlet</servlet-name> <url-pattern>/AjaxServlet</url-pattern> </servlet-mapping>
然後。java
package Model;/** * Created by sinisiter on 2015/7/11. */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;public class AjaxServlet extends HttpServlet { protected void processRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html;charset=UTF-8"); PrintWriter out = response.getWriter(); try { System.out.print("Nnnnn!!!!!");//調試時候用的,就不刪了 response.setContentType("text/html"); response.setHeader("Cache-Control", "no-store"); response.setHeader("Pragma", "no-cache"); response.setDateHeader("Expires", 0); String name = request.getParameter("id");//得到傳遞的值 if(1>0) { test.pointr=name;//賦值給我要的變數 後面的實現get與put方法神馬的,還沒搞明白。不過現在是可用的 } else { System.out.print("NO!!!!!"); } } finally { out.close(); } } @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { processRequest(request, response); } @Override protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { processRequest(request, response); } @Override public String getServletInfo() { return "Short description"; }}
ok。至此,整個工作結束
個人覺得,無非是servelet名稱一致。url-pattern定義正確,還有上面js用的是ajax的方式。
關於servlet與jsp&java類傳值問題