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

javaweb 與jsp頁面的交互流程

javaweb項目目錄

1. javaweb項目的通常目錄:

image
2. jsp 頁面通常狀況下放在 top(前臺頁面) back(後臺頁面)
3. 後臺代碼 放在src下面,分爲:
1. dao層(與數據庫相關)
2. domain層(實體層)
3. service層 (服務層)
4. servlet層php

前臺 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節點或者跳轉頁面
相關文章
相關標籤/搜索