標籤:span bsp erro 註冊 ann char model 需求 content
在完成Dao層的實現之後,接下來我們需要繼續開發我們網頁的Control層以及View層。
從開發網頁的角度來說:
1. Control層之下的Dao層和Service層可以看做是一個網頁的底層負責與資料庫互動,做資料持久化,實現一些邏輯業務等
2. Control層自身則是一個網頁的中介層,負責聯通Dao層以及View層,將View層的請求傳向Dao層,並從Dao層擷取資料,再返回到View層進行顯示
3. View層則是網頁的上層,負責直接與使用者進行互動,擷取使用者的需求,將使用者的需求轉變成一個個的請求,向下傳遞與Control層。
並且從層級結構上來說,Control與View的串連更為緊密,所以往往這兩層是一起進行開發的。
在進行Control層開發的時候,由於網頁的每部分可執行檔操作不同,可以依據這些不同的行為操作分化出許多個控制器對網頁的操作進行監控,比如我們的網頁在剛開啟的時候,需要進行一個使用者的登入的過程,那麼這個過程我們可以分化出一個UserLoginController對使用者的行為從View傳下來的請求進行相應的響應和Action。
此處要補充說明一點,基於SpringMVC3.0之後的架構,網頁的URL請求映射可採用註解的形式 @RequestMapping 進行,十分的方便開發,並且對於每一個URL請求的相應返回,可以通過對設定檔的配置,直接返回對應的字串,view層就會展示相應的JSP頁面,或者可以通過返回ModelAndView對象,可向jsp頁面傳入資料。
以下是實現使用者登入控制器UserLoginController代碼:
package Fmu.wellhold.controller;import java.util.ArrayList;import java.util.HashMap;import java.util.List;import java.util.Map;import javax.annotation.Resource;import javax.servlet.http.HttpServletRequest;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RequestMethod;import org.springframework.web.servlet.ModelAndView;import Fmu.wellhold.dao.ITF.UserInfoDaoITF;import Fmu.wellhold.dao.pojo.UserInfo;@Controllerpublic class UserLoginController { @Resource private UserInfoDaoITF userInfoService; @RequestMapping(value="/index",method={RequestMethod.GET}) public String modelAutoBindtoIndex(HttpServletRequest request) { //配合XML當中的視圖映射實用 System.out.println(">>>> 已經啟動Controller"); return "index"; } @RequestMapping(value="/index", method = {RequestMethod.POST}) public ModelAndView modelAutoBindtologin(HttpServletRequest request,UserInfo UserInfo) { List list=new ArrayList(); list=userInfoService.findByNamePwd(UserInfo.getId(),UserInfo.getPwd()); System.out.println("查詢結果是:"+list.size()); if(list.isEmpty()) { System.out.println(">>>> 不存在該使用者");// model.addAttribute("accountmodel", UserInfo); return new ModelAndView("forworld","erro","the user is not exit"); } else { UserInfo user = (UserInfo) list.get(0); if(user.getNumber()<=10){ System.out.println(">>>> 該使用者為管理員"); list.add(userInfoService.findAll()); System.out.println(list.get(0)); return new ModelAndView("showUser1","list",list); } System.out.println(">>>> 普通使用者登入"); Map map = new HashMap(); map.put("user", user); return new ModelAndView("userInfo","map",map); } } }
方法modelAutoBindtoIndex作用是當瀏覽器輸入http://localhost:8080/MoneyRecordSys/index的時候,向view層返回顯示index.jsp的響應,而方法modelAutoBindtoLogin是當使用者從index.jsp頁面
post回一些資料的時候,控制器映射到的該方法負責進行邏輯處理,並且再次向View層返回View下一步要進行的響應,即應該繼續顯示哪個頁面,此處為showUser1.jsp,並且將list這個對象傳到該JSP當中,list[0]記錄當前
使用者資訊,list[1]裡頭包涵另個list,這個list內容是網頁當中所有使用者的資料。
一下是index.jsp代碼:
<%@ page language="java" contentType="text/html" pageEncoding="utf-8"%><!DOCTYPE html><html> <head> <title></title> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <style type="text/css"> </style> </head> <body> <!-- 控制格式,縱向置中 --> <table width="500" height="195" align="center"> <tr> <td> </td> </tr> </table> <!--標籤中的name和ID是兩個概念,name面向後台,id面向jsp --> <form method="post"> <table width="1500" height="570" align="center" background="images/2.png"> <tr> <td colspan="2"> </td> <td>${error}</td> </tr> <tr> <td width="500"> </td> <td width=136><span style="font-size:30pt;font-family:宋體;font-weight:bold">使用者名稱</span></td> <td width="404"><input name="id" type="text" style="height:35px;width:350px"></td> </tr> <tr> <td> </td> <td><span style="font-size:30pt;font-family:宋體;font-weight:bold">密碼</span></td> <td><input name="pwd" type="password" style="height:35px;width:350px"></td> </tr> <tr> <td> </td> <td colspan="2" align="center"> <input type="submit" value="login" style="height:50px;width:200px;font-size:18pt;font-family:Calibri;font-weight:bold"></td> </tr> </table> </form> <br> </body></html>
此處補充說明一個點:在jsp當中,我們可以看到標籤中的name和ID是兩個概念,name是面向後台,id面向的則是jsp,在index.jsp我們將使用者輸入的使用者名稱和密碼以 name="id"和name="pwd"
POST回控制器對應的接受方法 public ModelAndView modelAutoBindtologin(HttpServletRequest request,UserInfo UserInfo),形參中並沒有HttpServletResponse而是UserInfo是因為
UserInfo這個POJO類當中,正好有兩個欄位名為id和pwd,所以index.jsp POST回來的使用者名稱和密碼則自動解析到了UserInfo當中。
當使用者以管理員的許可權登入成功之後,進入到主介面當中,並且可以向網頁的註冊使用者資訊進行一系列的操作,這一系列的操作,我們分化出一個UserOperationController控制器進行管理和監控,包括
添加使用者,刪除使用者,更改使用者的資訊等操作。
package Fmu.wellhold.controller;import java.io.PrintWriter;import java.util.ArrayList;import java.util.HashMap;import java.util.List;import java.util.Map;import javax.annotation.Resource;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RequestMethod;import org.springframework.web.servlet.ModelAndView;import Fmu.wellhold.dao.ITF.UserInfoDaoITF;import Fmu.wellhold.dao.pojo.UserInfo;@Controllerpublic class UserOperationController { @Resource private UserInfoDaoITF UserInfoService; @Resource private FileUpload fileUpload;//注入則不需要new了 @RequestMapping(value="showUser1",method={RequestMethod.GET}) public ModelAndView showUser(HttpServletRequest request,HttpServletResponse response) { String number = request.getParameter("number"); List list=new ArrayList<>(); list.add(UserInfoService.findByld(Integer.valueOf(number)));// System.out.println("showUser控制器已啟動"); list.add(UserInfoService.findAll()); return new ModelAndView("showUser1","list",list); } @RequestMapping(value="updateTheUser",method={RequestMethod.GET}) public ModelAndView getToupdateTheUser(HttpServletRequest request,HttpServletResponse response) throws Exception { String number = request.getParameter("number"); String user= request.getParameter("user");// System.out.println("updateTheUser,已經啟動控制器"); List list=new ArrayList<>(); UserInfo user1=(UserInfo)UserInfoService.findByld(Integer.valueOf(user)); list.add(user1); list.add(UserInfoService.findByld(Integer.valueOf(number))); return new ModelAndView("updateTheUser","list",list); } @RequestMapping(value="postTheUpdateUserInfo",method={RequestMethod.POST}) public ModelAndView updateTheUserInfo(HttpServletRequest request,HttpServletResponse response) throws Exception { Map<String, String> map = fileUpload.upload(request, response);// System.out.println(map.toString()); UserInfo user = new UserInfo(); user.setId(map.get("id")); user.setPwd(map.get("pwd")); user.setName(map.get("name")); user.setSex(map.get("sex"));// user.setBirthday(map.get("birthday")); user.setCome(map.get("come")); user.setRemark(map.get("remark")); user.setNumber(Integer.valueOf(map.get("number").toString()));// System.out.println(user.toString()); UserInfoService.update(user);// return null; return showUser(request, response); } @RequestMapping(value="deleteUser",method={RequestMethod.GET}) public ModelAndView deleteUser(HttpServletRequest request,HttpServletResponse response) throws Exception { String number=request.getParameter("deleteUserNum");// System.out.println("deleteUser"+number); UserInfoService.delete(Integer.valueOf(number)); return showUser(request, response); } @RequestMapping(value="insertTheUser",method={RequestMethod.GET}) public ModelAndView getToInsertUser(HttpServletRequest request,HttpServletResponse response) throws Exception { String number = request.getParameter("number");// System.out.println("insertTheUser,已經啟動控制器"); List list=new ArrayList<>(); UserInfo user1=(UserInfo)UserInfoService.findByld(Integer.valueOf(number)); list.add(user1); return new ModelAndView("insertTheUser","list",list); } @RequestMapping(value="postTheInsertUserInfo",method={RequestMethod.POST}) public ModelAndView postTheInsertUserInfo(HttpServletRequest request,HttpServletResponse response) throws Exception {// System.out.println("postTheInsertUserInfo控制器已啟動"); Map<String, String> map = fileUpload.upload(request, response);// System.out.println(map.toString()); if (map != null) { UserInfo user = new UserInfo(); user.setId(map.get("id")); user.setPwd(map.get("pwd")); user.setName(map.get("name")); user.setSex(map.get("sex")); user.setCome(map.get("come")); user.setRemark(map.get("remark")); UserInfoService.insert(user); } else { PrintWriter out = response.getWriter(); out.print("<script type=‘text/javascript‘>"); out.print("alert(‘你提交的建立使用者為空白‘);"); out.print("window.history.go(-1);"); out.print("</script>"); out.close(); } return showUser(request, response); }}
未完待續。。。
SpringMVC + Hibernate + MySQL 的簡易網頁搭建(Control實現篇)