javaweb 與jsp頁面的交互流程 (初次接觸時寫)


javaweb 與jsp頁面的交互流程

javaweb項目目錄

1. javaweb項目的一般目錄: 

image
2. jsp 頁面一般情況下放在 top(前台頁面) back(后台頁面)
3. 后台代碼 放在src下面,分為:
1. dao層(與數據庫相關)
2. domain層(實體層)
3. service層 (服務層)
4. servlet層

前台 jsp使用表單或者使用js/jquery發送ajax請求

 1. jsp通過form表單向servlet發送請求

 ```
 <form action="${pageContext.request.contextPath }/LoginServlet" method="post" class="list">
		<div class="login_title">密碼登錄</div>  
		${msg }
		<input type="text" class="name" name="phone" placeholder="手機號">
		<input type="password" name="password" class="password">
		<input type="submit" class="submit">
</form>
 ```
注意到 action里面的路徑是一個servlet的路徑
2. jsp通過jquery 的 ajax往servlet發送請求  這個和html中使用ajax往php發送請求類似  
	例:
	
	```
	 var $value = this.value;
	 var $uid = $("#uid").val();
	 var _url = "${pageContext.request.contextPath }/CheckPassword";
	 var _param = {"id": $uid,"password":$value};
	 $.post(_url, _param,function(data){
		 if(data == 0){
			$("#s1").html("<font color='red'>原密碼輸入錯誤,請重新輸入</font>");
			$("#regBut").prop("disabled",true);
		 }else if(data == 1){
			 $("#s1").html("<font color='green'>原密碼輸入正確</font>");
			 $("#regBut").prop("disabled",false);
		 }
	 });
	```

后台java先通過 servlet接收請求

1. servlet 層首先接收請求 然后收集數據,利用收集到的數據實例化成實體對象  最后new一個service對象,調用service的某個方法將所實例化的對象傳到service層的某個方法
	/**
	 * 修改密碼
	 */
	public class ChangePasswordServlet extends HttpServlet {
		private static final long serialVersionUID = 1L;
	       
	    /**
	     * @see HttpServlet#HttpServlet()
	     */
	    public ChangePasswordServlet() {
	        super();
	        // TODO Auto-generated constructor stub
	    }
	
		/**
		 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
		 */
		protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
			//收集數據
			String newPassword = request.getParameter("newPassword");
			String id = request.getParameter("id");
			//封裝數據
			User user = new User();
			user.setId(id);
			user.setPassword(newPassword);
			//處理數據
			UserService userService = new UserService();
			try {
				userService.ChangePassword(user);
				//調整頁面
				request.setAttribute("msg", "密碼修改成功");
				request.getRequestDispatcher("/top/success.jsp").forward(request, response);
			} catch (SQLException e) {
				e.printStackTrace();
			}
			
		}
	
		/**
		 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
		 */
		protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
			// TODO Auto-generated method stub
			doGet(request, response);
		}
	
	}
	
2. service層的某個方法接收到對象后直接new一個dao層的對象,將得到的對象傳給層的某個方法


public class UserService {

	/**
	 * 注冊的方法
	 * @param user
	 * @throws SQLException 
	 */
	public void ChangePassword(User user) throws SQLException {
		UserDao userDao = new UserDao();
		userDao.ChangePassword(user);
	}

}

3. dao層的某個方法得到對象后,進行數據庫操作,然后將結果封裝成一個或多個實體,返回給上一層(根據情況,如果需要返回的結果的話就將執行結果返回,如果不需要返回的話,可以不返回,默認是操作成功)
	public class UserDao {
		public void ChangePassword(User user) throws SQLException {
			QueryRunner queryRunner = new QueryRunner(JDBCUtils.getDataSource());//和數據庫建立鏈接
			String sql = "update user set password = ? where id = ? ";
			Object[] params = {user.getPassword(),user.getId()};
			queryRunner.update(sql, params);
		}
	}
4. 如果需要就結果的話,結果就一層一層返回,至於需不需要將結果實例化成視圖還需要根據具體情況,到servlet層的話建議返回json的數據格式,一般包含 code,msg及result三部分,  
對於form提交的方式:servlet層一般使用request.setAttribute("msg","你好");類似的方法返回,當涉及到登錄的時候,要使用request.getSession().setAttribute("user",user);然后再重定向  
對於ajax提交請求的方式:servlet層一般用
	response.getWriter().write("0");
返回數據,ajax中得到的回調函數中得到的data就是返回的數據

jsp頁面接收到后台返回的結果

  1. 如果采用表單提交的方式的話,可以在jsp頁面寫上 類型 ${msg}的表達式,然后通過servlet的重定向到某個jsp頁面,在jsp頁面可以通過 JSTL標簽及el表達式將返回結果渲染出來
  2. 如果是 ajax 方式提交的話,就可以在ajax的回調函數中直接利用js/jquery修改html的dom節點或者跳轉頁面


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM