1. javaweb項目的通常目錄:
2. jsp 頁面通常狀況下放在 top(前臺頁面) back(後臺頁面)
3. 後臺代碼 放在src下面,分爲:
1. dao層(與數據庫相關)
2. domain層(實體層)
3. service層 (服務層)
4. servlet層php
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); } }); ```
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就是返回的數據