14 個(gè) Spring MVC 頂級(jí)技巧,隨時(shí)用隨時(shí)爽,一直用一直爽
1.使用@Controller構(gòu)造型
import?org.springframework.web.bind.annotation.RequestMapping;
@Controller
public?class?HomeController?{
????@RequestMapping("/")
????public?String?visitHome()?{
??????
????????return?"home";
????}
}
public?class?MultiActionController?{
????@RequestMapping("/listUsers")
????public?ModelAndView?listUsers()?{
????}
????@RequestMapping("/saveUser")
????public?ModelAndView?saveUser(User?user)?{
????}
????@RequestMapping("/deleteUser")
????public?ModelAndView?deleteUser(User?user)?{
????}
}
2.實(shí)現(xiàn)控制器接口
import?javax.servlet.http.HttpServletResponse;
import?org.springframework.web.servlet.ModelAndView;
import?org.springframework.web.servlet.mvc.Controller;
public?class?MainController?implements?Controller?{
????@Override
????public?ModelAndView?handleRequest(HttpServletRequest?request,
????????????HttpServletResponse?response)?throws?Exception?{
????????System.out.println("Welcome?main");
????????return?new?ModelAndView("main");
????}
}
3.擴(kuò)展AbstractController類(lèi)
import?javax.servlet.http.HttpServletResponse;
import?org.springframework.web.servlet.ModelAndView;
import?org.springframework.web.servlet.mvc.AbstractController;
public?class?BigController?extends?AbstractController?{
????@Override
????protected?ModelAndView?handleRequestInternal(HttpServletRequest?request,
????????????HttpServletResponse?response)?throws?Exception?{
????????System.out.println("You're?big!");
????????return?new?ModelAndView("big");
????}
}
????
AbstractUrlViewController MultiActionController ParameterizableViewController ServletForwardingController ServletWrappingController UrlFilenameViewController
4.為處理程序方法指定URL映射
import?org.springframework.stereotype.Controller;
import?org.springframework.web.bind.annotation.RequestMapping;
import?org.springframework.web.bind.annotation.RequestMethod;
@Controller
@RequestMapping("/hello")
public?class?SingleActionController?{
????@RequestMapping(method?=?RequestMethod.GET)
????public?String?sayHello()?{
????????return?"hello";
????}
}
import?org.springframework.web.bind.annotation.RequestMapping;
@Controller
public?class?UserController?{
????@RequestMapping("/listUsers")
????public?String?listUsers()?{
????????return?"ListUsers";
????}
????@RequestMapping("/saveUser")
????public?String?saveUser()?{
????????return?"EditUser";
????}
????@RequestMapping("/deleteUser")
????public?String?deleteUser()?{
????????return?"DeleteUser";
????}
}
5.為處理程序方法指定HTTP請(qǐng)求方法
import?org.springframework.web.bind.annotation.RequestMapping;
import?org.springframework.web.bind.annotation.RequestMethod;
@Controller
public?class?LoginController?{
????@RequestMapping(value?=?"/login",?method?=?RequestMethod.GET)
????public?String?viewLogin()?{
????????return?"LoginForm";
????}
????@RequestMapping(value?=?"/login",?method?=?RequestMethod.POST)
????public?String?doLogin()?{
????????return?"Home";
????}
}
6.將請(qǐng)求參數(shù)映射到處理程序方法
public?String?doLogin(@RequestParam?String?username,
??????????????????????@RequestParam?String?password)?{
}
7.返回模型和視圖
public?String?viewLogin()?{
????return?"LoginForm";
}
public?ModelAndView?listUsers()?{
????List
????//?從DAO獲取用戶列表…
????ModelAndView?modelView?=?new?ModelAndView("UserList");
????modelView.addObject("listUser",?listUser);
????return?modelView;
}
public?ModelAndView?listUsers(ModelAndView?modelView)?{
????List
????//從DAO獲取用戶列表…
????modelView.setViewName("UserList");
????modelView.addObject("listUser",?listUser);
????return?modelView;
}
8.將對(duì)象放入模型
modelView.addObject("siteName",?new?String("CodeJava.net"));
modelView.addObject("users",?1200000);
public?String?viewStats(Map
????model.put("siteName",?"CodeJava.net");
????model.put("pageviews",?320000);
????return?"Stats";
}
9.處理程序方法中的重定向
if?(!isLogin)?{
????return?new?ModelAndView("redirect:/login");
}
//?返回用戶列表
10.處理表格提交和表格驗(yàn)證
public?class?RegistrationController?{
????@RequestMapping(value?=?"/doRegister",?method?=?RequestMethod.POST)
????public?String?doRegister(
????????@ModelAttribute("userForm")?User?user,?BindingResult?bindingResult)?{
????????if?(bindingResult.hasErrors())?{
????????????//?表單驗(yàn)證錯(cuò)誤
????????}?else?{
????????????//?表單輸入沒(méi)問(wèn)題
????????}
????????//?注冊(cè)過(guò)程……
????????return?"Success";
????}
}
在方法參數(shù)上使用@ModelAttribute 在方法上使用@ModelAttribute 接口綁定結(jié)果
11.處理文件上傳
public?String?handleFileUpload(
????????@RequestParam?CommonsMultipartFile[]?fileUpload)?throws?Exception?{
????for?(CommonsMultipartFile?aFile?:?fileUpload){
????????//?存儲(chǔ)上傳的文件
????????aFile.transferTo(new?File(aFile.getOriginalFilename()));
????}
????return?"Success";
}
12.在控制器中自動(dòng)裝配業(yè)務(wù)類(lèi)
public?class?UserController?{
????@Autowired
????private?UserDAO?userDAO;
????public?String?listUser()?{
????????//?列出所有用戶的處理方法
????????userDAO.list();
????}
????public?String?saveUser(User?user)?{
????????//?保存/更新用戶的處理方法
????????userDAO.save(user);
????}
????public?String?deleteUser(User?user)?{
????????//?刪除用戶的處理方法
????????userDAO.delete(user);
????}
????public?String?getUser(int?userId)?{
????????//?獲取用戶的處理方法
????????userDAO.get(userId);
????}
}
????List
????void?save(User?user);
????void?checkLogin(User?user);
}
13.訪問(wèn)HttpServletRequest和HttpServletResponse
public?String?doDownloadFile(
????????HttpServletRequest?request,?HttpServletResponse?response)?{
????//?訪問(wèn)請(qǐng)求
????//?訪問(wèn)響應(yīng)
????return?"DownloadPage";
}
14.遵循單一責(zé)任原則
public?class?UserController?{
????@Autowired
????private?UserDAO?userDAO;
????public?String?listUser()?{
????????userDAO.list();
????}
????public?String?saveUser(User?user)?{
????????userDAO.save(user);
????}
????public?String?deleteUser(User?user)?{
????????userDAO.delete(user);
????}
????public?String?getUser(int?userId)?{
????????userDAO.get(userId);
????}
}
public?class?UserController?{
}
@Controller
public?class?ProductController?{
}
@Controller
public?class?OrderController?{
}
@Controller
public?class?PaymentController?{
}

評(píng)論
圖片
表情
