springのspring MVCは勉強します.
13781 ワード
一般的なMVCフレームの比較
運転性能上:
Jsp+servlet>struts 1>spring mvc>struts 2+freemarker>>struts 2、ognl、値スタック.
開発効率はほぼ逆です.特に、spring mvcの開発効率はstruts 2と同じぐらいです.
Struts 2の性能が低いのはONLと値スタックによるものです.だから、もしあなたのシステムの同時進行量が高いならば、freemarkerを使って表示することができて、ONLと値スタックを採用するのではありません.このように、性能の面ではかなり向上します.
1.環境構築web.xml
運転性能上:
Jsp+servlet>struts 1>spring mvc>struts 2+freemarker>>struts 2、ognl、値スタック.
開発効率はほぼ逆です.特に、spring mvcの開発効率はstruts 2と同じぐらいです.
Struts 2の性能が低いのはONLと値スタックによるものです.だから、もしあなたのシステムの同時進行量が高いならば、freemarkerを使って表示することができて、ONLと値スタックを採用するのではありません.このように、性能の面ではかなり向上します.
1.環境構築web.xml
<web-app
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
<servlet>
<servlet-name>dispatcherServlet</servlet-name>
<servlet-class>
org.springframework.web.servlet.DispatcherServlet
</servlet-class>
<init-param> <!-- , :<servlet-name> +"-servlet” xml, dispatcherServlet-servlet.xml-->
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/web-config.xml</param-value><!-- , , -->
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>dispatcherServlet</servlet-name>
<url-pattern>/</url-pattern> <!-- -->
</servlet-mapping>
</web-app>
web-config.xml:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.1.xsd
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd">
<mvc:annotation-driven/>
<context:component-scan base-package="com.test.controller" />
<mvc:resources location="/resources/" mapping="/resource/**"/><!-- ( spring ) css,js ,css mapping -->
<!-- View -->
<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/> <!-- jstl , -->
<property name="suffix" value=".jsp"/> <!-- -->
<property name="prefix" value="/WEB-INF/jsp/" /> <!-- -->
</bean>
<!-- -->
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver" >
<property name="defaultEncoding" value="utf-8"/> <!-- (ISO-8859-1) -->
<property name="maxInMemorySize" value="10240"/> <!-- (10240)-->
<property name="uploadTempDir" value="/upload/"/> <!-- (WebUtils#TEMP_DIR_CONTEXT_ATTRIBUTE) -->
<property name="maxUploadSize" value="-1"/> <!-- ,-1 (-1) -->
</bean>
</beans>
の い は の の である.@Controller
@SessionAttributes({"param","se"})//// session, ModelMap param、se session , ,request session 。
@RequestMapping(value="user") //--1 @RequestMapping , url 。 , url
public class HelloController {
@RequestMapping(value={"/hello2","/hello"},params="method=do") //--2 value ,
public String hello() {
return "hello"; // /WEB-INF/jsp/hello.jsp
}
// 1、2 :
//http://localhost:8080/springMVC/user/hello2?method=do http://localhost:8080/springMVC/user/hello?method=do
//
@RequestMapping(params="param=do") //http://localhost:8080/springMVC/user?param=do&name=ljf&age=22&id=1&uname=test
public String serv(int id,@RequestParam String name,@RequestParam("age") int old,User u){ //@RequestParam
System.out.println(u.getUname()+" "+id+" "+name+" "+old); //
return "hello";
}
// , , id , name,age 404
// map model request
@RequestMapping //http://localhost:8080/springMVC1/user
public String say(Map<String, Object> map,Model model,HttpServletRequest req,HttpSession session) {// request,session
map.put("param", "v1");
model.addAttribute("p1", "v2");
// Object key,String-->string
User u=new User("ljf");
model.addAttribute("ok");//${string}
model.addAttribute(u); //${user.uname}
session.setAttribute("se", "se");
return "hello";
}
@RequestMapping("/req")
public String req(@ModelAttribute("se") String name) { //@ModelAttribute session "se" name, , session ,
System.out.println(name);
return "hello";
}
//ModelAndView
// ModelAndView Model ,View 。 , Model , view
@RequestMapping(params="method=reg6")
public ModelAndView reg6(String uname)
{
ModelAndView mv = new ModelAndView();
mv.setViewName("hello");
// mv.setView(new RedirectView("index"));
User u = new User("abc");
mv.addObject(u); // , , 。 ” ”。 。
mv.addObject("a", "aaaa");
return mv;
}
}
Struts 1と 、SpringのControllerはSingletonのものです.これは、 の スレッドによって されることを する.そのため、コントローラを に しました.(struts 2とは います. のパラメータは ですので)
コア 1.ユーザがサーバに を する.url:user.do 2.サーバに があります.Displatch Servletは できることが かった.Displatch Servletを び します.3.Displatch Servlet は、このurlに するコントローラがあるかどうか、HandleMappingで します.もしあるなら、Controllerを び します.4.Controllerが を する.5 Controller が したら、 を すと、View Resoloverは を するビューオブジェクトに します.ModelAndViewオブジェクトに ると、そのオブジェクト にはビューオブジェクト が まれています.6.Displatch Servletは、ビューオブジェクト のデータをサーバに します.7.サーバはデータをクライアントに します.
spring 、リダイレクト
@RequestMapping(value="/add",method=RequestMethod.POST)
public String add(@Valid User user,BindingResult bind){
if(bind.hasErrors())
return "user/add";
users.put(user.getUsername(),user);
return InternalResourceViewResolver.REDIRECT_URL_PREFIX+"/user/users";//"forward:user.do"; // return "redirect:user.do";
}
springはrest で にアクセスし、 を きとする.@RequestMapping(value="/{username}/update",method=RequestMethod.GET)//************** {}
public String update(@PathVariable String username,Model model){//@PathVariable username :{}
model.addAttribute(users.get(username));
return "user/update";
}
はユーザー の です.
userクラス:public class User {
private String username;
private String password;
private String email;
public User() {
super();
}
public User(String username, String password, String email) {
super();
this.username = username;
this.password = password;
this.setEmail(email);
}
@NotEmpty(message=" ")
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
@NotEmpty(message=" ")
@Size(max=10,min=4)
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
@NotEmpty(message=" ")
@Email(message=" ")
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
}
user を うクラス:public class UserException extends RuntimeException{
public UserException() {
super();
}
public UserException(String message, Throwable cause) {
super(message, cause);
}
public UserException(String message) {
super(message);
}
public UserException(Throwable cause) {
super(cause);
}
}
controller :@Controller
@RequestMapping("/user")
public class UserController {
private final static Map<String,User> users=new HashMap<String, User>();
public UserController(){
users.put("ldh",new User("ldh", "123", "123123"));
users.put("zxy",new User("zxy", "123", "123123"));
users.put("gfc",new User("gfc", "123", "123123"));
users.put("lm",new User("lm", "123", "123123"));
}
@RequestMapping(value={"users","/"})
public String list(Model model){
model.addAttribute("users", users);
return "user/list";
}
@RequestMapping(value="/add",method=RequestMethod.GET) //method get
public String add(Model model){
model.addAttribute(new User());// , new User("a","b","c"), user
return "user/add";
}
/* :springMVC JSR-303 Validator(java ) , JSR 303 - Bean Validation , bean-validator.jar
, @Valid model, BindingResult , spring form
*/
@RequestMapping(value="/add",method=RequestMethod.POST)
public String add(@Valid User user,BindingResult bind){
if(bind.hasErrors())
return "user/add";
users.put(user.getUsername(),user);
return InternalResourceViewResolver.REDIRECT_URL_PREFIX+"/user/users";//"forward:user.do"; // return "redirect:user.do";
}
@RequestMapping(value="{username}",method=RequestMethod.GET)
public String show(@PathVariable String username,Model model){
model.addAttribute(users.get(username));
return "user/show";
}
/**spring rest , **/
@RequestMapping(value="/{username}/update",method=RequestMethod.GET)//************** {}
public String update(@PathVariable String username,Model model){//@PathVariable username :{}
model.addAttribute(users.get(username));
return "user/update";
}
@RequestMapping(value="/{username}/update",method=RequestMethod.POST)
public String update(@PathVariable String username,@Valid User user,BindingResult bind){//bind User
if(bind.hasErrors())
return "user/update";
users.put(username, user);
return "redirect:/user/users";
}
@RequestMapping("ex")
public String ex(){ //
if(true)
throw new UserException(" !");
return "user/users";
}
//
@ExceptionHandler(value={Exception.class}) // Exception.class,
public String handlerException(Exception ex,HttpServletRequest req){
req.setAttribute("ex", ex);
return "user/error"; // error.jsp,${error.message}
}
}
add.jsp:<%@ page language="java" pageEncoding="UTF-8"%>
<%@ taglib prefix="sf" uri="http://www.springframework.org/tags/form" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>title</title> <link rel="stylesheet" href="/springMVC2/resource/css/main.css" type="text/css"/> <!-- mapping -->
</head>
<body>
<sf:form method="post" modelAttribute="user" >
username:<sf:input path="username"/> <sf:errors path="username"/><br>
password:<sf:password path="password"/><sf:errors path="password"/><br>
email:<sf:input path="email"/><sf:errors path="email"/><br>
<input type="submit" value=" " />;
</sf:form>
</body>
</html>
ファイルアップロード:commons-fileupload.jarを して、commons-i o.jar@RequestMapping(value="/upload", method = RequestMethod.POST)// form post
public String handleUploadData(String name,@RequestParam("file") CommonsMultipartFile file){// MultipartFile[] file for
if (!file.isEmpty()) {
String path = this.servletContext.getRealPath("/tmp/"); // <mvc:resource />, D:\study\apache-tomcat-6.0.35\webapps\test\tmp
System.out.println(path);
String fileName = file.getOriginalFilename();//
String fileType = fileName.substring(fileName.lastIndexOf("."));
System.out.println(fileType);
File file2 = new File(path,new Date().getTime() + fileType); //
try {
file.getFileItem().write(file2); //
} catch (Exception e) {
e.printStackTrace();
}
return "redirect:upload_ok.jsp";
}else{
return "redirect:upload_error.jsp";
}
}