1. 程式人生 > >Java Web中的servlet、jsp、session等的用法。

Java Web中的servlet、jsp、session等的用法。

1、當伺服器響應客戶端之後,request和response會立即銷燬,在客戶端去訪問伺服器的時候就開啟Servlet,當Servlet開啟之後就會產生request和response。

2、訪問Servlet的6種方式:通過位址列輸入網址提交訪問(直接在瀏覽器上寫網址訪問),表單訪問,超連結訪問,偽連結訪問,函式訪問,用Java程式碼訪問(不講)。

①位址列輸入網址提交訪問:http://ip:port/專案名稱/user.do<後面可以追加引數,別忘了追加前加一個’?’>  ===>其中,user.do也可以寫成user.action。

其實就是get方法訪問,這種訪問方法出現的問題為:亂碼,引數在位址列可以看見且引數大小不能超過255個字元,不安全。

②表單:post提交方式無亂碼,以後用表單方式訪問時,統統採用post方式提交。

<!-- JSP -->
<body>
	<form action="user.do" method="post">
		使用者名稱:<input type="text" name="name" /><br />
		密    碼:<input type="text" name="pwd" /><br />
		<input type="submit" value="提交" /><br />
	</form>
	
</body>

訪問方式有get方式提交 ===>如要更改,可配置為post方式為:method=“post”<位址列上不顯示,安全>

post方式提交。 ===>如要更改,可配置為get方式為:method= “get”<這也是預設方式。不安全>

表單驗證方式也不安全。易造成SQL注入攻擊,程式碼如下:

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;
//sql
public class UserServlet extends HttpServlet {
 	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
 		this.doPost(request, response);
	}
	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
//		response.setContentType("text/html;charset=UTF-8");
		String name = request.getParameter("name");// 取表單資料或位址列引數的方式。
		String age = request.getParameter("age");
//		if(name!=null) // 解決亂碼方式,如果name的值不為空就執行下面的語句,如果為空,就不作任何處理
//		{
//			 name = new String (name.getBytes("ISO-8859-1"),"UTF-8");
//		}
		System.out.println(name);
		request.setAttribute("myname", name);// 通過鍵“myname”,顯示(瀏覽器取出)值name
		request.setAttribute("myage", age);
		
		request.getRequestDispatcher("user.jsp").forward(request, response); // 轉發
	}
}

③超連結:天生就是get方法訪問,天生就會有亂碼。

<a href="http://www.baidu.com">百度</a>
<a href="user.do?name=小明&age=10">UserServlet</a>

處理亂碼的方式:
String name = request.getParameter("name");// 取表單資料或位址列引數的方式。
		String age = request.getParameter("age");
		if(name!=null) // 解決亂碼方式,如果name的值不為空就執行下面的語句,如果為空,就不作任何處理
		{
			 name = new String (name.getBytes("ISO-8859-1"),"UTF-8");
		}
		System.out.println(name);

④偽連結:天生就是get方法訪問,天生就會有亂碼。

<script type="text/javascript">
		function login()
		{
			window.location.href="user.do?name=小明&age=10";
		}
	
	</script>
  </head>
  
  <body>
      <a href="javascript:login();">偽連線UserServlet</a>

⑤函式提交:天生就是get方法訪問,天生就會有亂碼。

<input type="button" value="函式提交" onclick="login();">

3、實際開發中,轉發技術用的較多。<主要程式碼如下>

request.getRequestDispatcher("user.jsp").forward(request, response); // 轉發
4、通過鍵“name”,顯示(瀏覽器取出)值“小明”。
request.setAttribute("name","小明");


5、取表單資料或位址列引數的方式:

String name = request.getParameter("name");
String age = request.getParameter("age");


6、可以用${ }表示式,顯示引數的內容,例如:${myname}  ${myage}   <通過鍵取值>

request.setAttribute("myname",name);
request.setAttribute("myage",age);

7、多頁面跳轉<其實是通過Servlet轉發>

不通過Servlet進行轉發的<這種做法在實際中不用,違背了MVC開發模式,且頁面風格、程式碼風格不統一,難以維護。>

package com.fs.servlet;

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 StuServlet extends HttpServlet {
 
	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		this.doPost(request, response);
	}
 
	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		String to = request.getParameter("to");// 取表單資料或位址列引數的方式。
		if("login".equals(to)) {
			this.login(request, response);
		}else if("main".equals(to)) {
			this.main(request, response);
		}
	}
	//轉發到main.jsp
	private void main(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		request.getRequestDispatcher("main.jsp").forward(request, response);
	}

	//轉發到login.jsp
	public void login(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException
	{
		request.getRequestDispatcher("login.jsp").forward(request, response);
	}
}

8、實際中採用MVC開發模式。V顯示:jsp,C控制:Servlet

9、會話用物件session<鍵值對>儲存。session物件就是會話物件。只要涉及到登陸的網站就會用上session技術。sessionrequest一樣,可以裝東西。

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

public class UserServlet extends HttpServlet {
	
	public int no=100;
	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		this.doPost(request, response);
	}
	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		 no ++;
		 String to = request.getParameter("to");
		 if("login".equals(to)){
			 this.login(request, response);
		 }else if("one".equals(to)) {
			 this.one(request, response);
		 }
	}
	private void one(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {
		//轉發到one.jsp
		request.getRequestDispatcher("one.jsp").forward(request, response);
	}
	public void login(HttpServletRequest request, HttpServletResponse response)
	throws ServletException, IOException {
		 String name = request.getParameter("name");
		 String pwd = request.getParameter("pwd");
		 //使用資料驗證name與pwd是否正確
		 if("123".equals(pwd)) {
			 HttpSession session = request.getSession();
			 session.setAttribute("username", name);
//			 request.setAttribute("username", name);
			 request.setAttribute("no", no+"");
			 request.getRequestDispatcher("main.jsp").forward(request, response);
		 }else {
			 request.setAttribute("inf", "使用者名稱或密碼錯誤!");
			 request.getRequestDispatcher("index.jsp").forward(request, response);
		 }
	}
}

10、session物件裝資料的方式,在儲存轉發過程中,資料不會丟失,session會一直在。(多執行緒的時候會在伺服器裡面產生多個session物件,且在伺服器裡儲存,各個session物件會根據你的(sessionID===>流水號(長整型))資訊進行控制,當關閉瀏覽器的時候session會自動銷燬)

11、設定超連結標籤:<a></a>   ====>主要屬性引數:href="...",例如下面的程式碼

<a href="user.do?to=login">到login.jsp</a>