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
<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";
			}
	}