docs/Spring全家桶/SpringMVC/SpringMVC基本介绍与快速入门.md
Java Web ĿУͳһʾ㡢Ʋ㡢ݲIJȫ JSP JavaBean дdz֮Ϊ Model1
ΪֱˣԺַܿʽͱ Servlet + JSP + Java Bean ˣڵ MVC ģModel2ͼ
ûᵽ ServletȻӦ Java Beanеʾ JSP ȥɣģʽǾͳΪ MVC ģʽ
չĶWebģʽ
Ϊ־òһֱδõݿı̣Ϊӭ NoSQL ǿSpring MVC ˷
ͳģͲ㱻Ϊҵ(Service)ݷʲ㣨DAO,Data Access Object Service ¿ͨ Spring ʽݷʲ㣬ҵϻǷ NoSQL ܹͻ NoSQL ʹˣԴϵͳܡ
дһǵĵһ Spring MVC
ȡΪ HelloSpringMVCFinish
IDEA ԶغñҪ jar ΪǴһЩĬϵĿ¼ļԺĿṹ£
Ǵ web.xml ͼģ
<url-pattern>ԪصֵΪ / ʾҪеSpring MVCĺ̨֮
<servlet-mapping>
<servlet-name>dispatcher</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
ļĿͷ dispatcher web.xml е <servlet-name> Ԫõ dispatcher Ӧ Spring MVC ӳļxxx-servlet.xmlDZ༭£
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="simpleUrlHandlerMapping"
class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
<property name="mappings">
<props>
<!-- /hello · id Ϊ helloController Ŀ-->
<prop key="/hello">helloController</prop>
</props>
</property>
</bean>
<bean id="helloController" class="controller.HelloController"></bean>
</beans>
Packagecontroller´ HelloController࣬ʵ org.springframework.web.servlet.mvc.Controller ӿڣ
package controller;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.Controller;
public class HelloController implements Controller{
@Override
public ModelAndView handleRequest(javax.servlet.http.HttpServletRequest httpServletRequest, javax.servlet.http.HttpServletResponse httpServletResponse) throws Exception {
return null;
}
}
Spring MVC ͨ ModelAndView ģͺͼһ
ModelAndView mav = new ModelAndView("index.jsp");
mav.addObject("message", "Hello Spring MVC");
ʾͼindex.jsp ģݵ message Hello Spring MVC
package controller;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.Controller;
public class HelloController implements Controller {
public ModelAndView handleRequest(javax.servlet.http.HttpServletRequest httpServletRequest, javax.servlet.http.HttpServletResponse httpServletResponse) throws Exception {
ModelAndView mav = new ModelAndView("index.jsp");
mav.addObject("message", "Hello Spring MVC");
return mav;
}
}
index.jsp Ϊ
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" isELIgnored="false"%>
<h1>${message}</h1>
ݺܼElʽʾ message ݡ
ڡRun˵ҵEdit Configurations
Tomcat
ѡñص Tomcat ĺ֣
Deployment ǩҳ²
OK ͺˣǵϽǵν Tomcat
ַlocalhost/hello
ÿû Web еӻύʱͿʼˣʵԱһ뿪ʼȡӦأᾭܶվ㣬ÿһվ㶼һЩϢͬʱҲϢͼΪ Spring MVC ̣
뿪Ժһվľ DispatcherServletһ Servletͨ J2EE ѧϰ֪ Servlet ز HTTP DispatcherServlet еҽЩ Spring MVC
<servlet>
<servlet-name>dispatcher</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>dispatcher</servlet-name>
<!-- е -->
<url-pattern>/</url-pattern>
</servlet-mapping>
DispatcherServlet ѯһӳȷһվӳЯ URL ϢоУͨ simpleUrlHandlerMapping /hello ַ helloController
<bean id="simpleUrlHandlerMapping"
class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
<property name="mappings">
<props>
<!-- /hello · id Ϊ helloController Ŀ-->
<prop key="/hello">helloController</prop>
</props>
</property>
</bean>
<bean id="helloController" class="controller.HelloController"></bean>
һѡ˺ʵĿ DispatcherServlet ὫѡеĿ˿ж为أûύȴЩϢ
public ModelAndView handleRequest(javax.servlet.http.HttpServletRequest httpServletRequest, javax.servlet.http.HttpServletResponse httpServletResponse) throws Exception {
//
....
}
ͨһЩϢЩϢҪظûʾϢDZΪģͣModelԭʼϢʱġЩϢҪûѺõķʽиʽһ HTMLԣϢҪһͼviewͨ JSP
һ¾ǽģݴұʾȾͼͼὫͬģͺͼͻ DispatcherServlet
public ModelAndView handleRequest(javax.servlet.http.HttpServletRequest httpServletRequest, javax.servlet.http.HttpServletResponse httpServletResponse) throws Exception {
//
....
// ظ DispatcherServlet
return mav;
}
Ͳضͼϣݸ DispatcherServlet ͼֱӱʾijض JSPʵϣȷͼ JSP෴ݵĽһƣƽҲͼ
DispatcherServlet ʹͼview resolverͼƥΪһضͼʵ֣Ҳܲ JSP
ֱӰ index.jsp ͼ
Ȼ DispatcherServlet Ѿ֪ĸͼȾˣҲˡ
һվͼʵ֣ģݣҲˡͼʹģȾͨӦݸͻˡ
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" isELIgnored="false"%>
<h1>${message}</h1>
Ѿ Spring MVC һ˽⣬ͨ XML õķʽ˵һ Spring MVC עӦôã
package controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;
@Controller
public class HelloController{
@RequestMapping("/hello")
public ModelAndView handleRequest(javax.servlet.http.HttpServletRequest httpServletRequest, javax.servlet.http.HttpServletResponse httpServletResponse) throws Exception {
ModelAndView mav = new ModelAndView("index.jsp");
mav.addObject("message", "Hello Spring MVC");
return mav;
}
}
ʵֵĽӿҲȥ
@Controller ע⣺
ԣעģʵע Spring MVC Ӱ첢Spring ʵս˵Ǹʵɨ裬 @Component ע棬Լһ²УΪû JSP ͼһԼһûгɹ...@RequestMapping ע⣺
Ȼͱʾ· /hello ӳ䵽÷dispatcher-servlet.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"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
<!--<bean id="simpleUrlHandlerMapping"-->
<!-->-->
<!--<property name="mappings">-->
<!--<props>-->
<!--<!– /hello · id Ϊ helloController Ŀ–>-->
<!--<prop key="/hello">helloController</prop>-->
<!--</props>-->
<!--</property>-->
<!--</bean>-->
<!--<bean id="helloController" ></bean>-->
<!-- ɨcontrollerµ -->
<context:component-scan base-package="controller"/>
</beans>
ɣ localhost/hello ַȻܿЧ
@RequestMapping ϣô൱Ǹõӳַǰһַ磺
@Controller
@RequestMapping("/wmyskxz")
public class HelloController {
@RequestMapping("/hello")
public ModelAndView handleRequest(....) throws Exception {
....
}
}
localhost/wmyskxz/helloǵ Spring MVC ͼλͼһ DispaterServlet ݹͼƥһضͼ
localhost/test.jsp ֱܹӷʵˣй¶...
ǿֱ localhost/index.jsp ԣijһհҳ棬Ϊûлȡ ${message} ֱӷˣӰûǽǵ JSP ļڡWEB-INFļеġpageļ£WEB-INF Java Web ĬϵİȫĿ¼Dzûֱӷʵ_Ҳ˵ͨ localhost/WEB-INF/ ķʽԶʲģ_
Ҫ߸ͼ dispatcher-servlet.xml ļã
<bean id="viewResolver"
class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/page/" />
<property name="suffix" value=".jsp" />
</bean>
һ Spring MVC õһͼýѭһԼͼǰͺȷһ Web ӦͼԴ·ġʵЧ
ǽһ£
ãɣ
<?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"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
<!--<bean id="simpleUrlHandlerMapping"-->
<!-->-->
<!--<property name="mappings">-->
<!--<props>-->
<!--<!– /hello · id Ϊ helloController Ŀ–>-->
<!--<prop key="/hello">helloController</prop>-->
<!--</props>-->
<!--</property>-->
<!--</bean>-->
<!--<bean id="helloController" ></bean>-->
<!-- ɨcontrollerµ -->
<context:component-scan base-package="controller"/>
<bean id="viewResolver"
class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/page/" />
<property name="suffix" value=".jsp" />
</bean>
</beans>
ڡWEB-INFļ½һpageļУindex.jspļ棺
localhost/hello ·ȷЧ
ǴͼΪ index ټ /WEB-INF/page/ ǰ .jsp ȷͼ·ˣԺͿԽеͼ롾pageļˣ
ʹÿղ Spring MVC ҵĵһΪ̽ Spring MVC ĴηʽΪһıύݣ
<!DOCTYPE html>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" import="java.util.*" isELIgnored="false"%>
<html>
<head>
<meta charset="utf-8">
<title>Spring MVC ηʽ</title>
</head>
<body>
<form action="/param" role="form">
û
룺
</form>
</body>
</html>
ͳɣǾһ£
Ǻ֪ύ /param Ŀ¼ʹ Servlet ԭ API ܻܲȡݣ
@RequestMapping("/param")
public ModelAndView getParam(HttpServletRequest request,
HttpServletResponse response) {
String userName = request.getParameter("userName");
String password = request.getParameter("password");
System.out.println(userName);
System.out.println(password);
return null;
}
Գɹ
ǿѷβóɺǰ̨һķȡݣͬƥ
@RequestMapping("/param")
public ModelAndView getParam(String userName,
String password) {
System.out.println(userName);
System.out.println(password);
return null;
}
Գɹ
@RequestParam("ǰ̨") ע룺@RequestParam עϸڣ
עvalue``required``defaultvaluevalue ָ name Եʲôvalue ԶĬϲдrequired ǷҪиòΪtrueߡfalsedefaultvalue ĬֵΪǵıһ User ģͣ
package pojo;
public class User {
String userName;
String password;
/* getter and setter */
}
ȻȻɹ
ǿͨ Spring MVC ַɣ web.xml ӣ
<filter>
<filter-name>CharacterEncodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<!-- ñʽ -->
<param-value>utf-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>CharacterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
ͨ棬֪ôݣܽ POST ⣬ôôأΪڡpage´һtest2.jsp
<!DOCTYPE html>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" import="java.util.*" isELIgnored="false" %>
<html>
<head>
<title>Spring MVC ݻ</title>
</head>
<body>
<h1>ݣ${message}</h1>
</body>
</html>
һ Servlet ԭ API Ƿ
@RequestMapping("/value")
public ModelAndView handleRequest(HttpServletRequest request,
HttpServletResponse response) {
request.setAttribute("message","ɹ");
return new ModelAndView("test1");
}
ַ룺localhost/value
Spring MVC Уͨʹķʽݣ
@ModelAttribute ע⣺@ModelAttribute
public void model(Model model) {
model.addAttribute("message", "עɹ");
}
@RequestMapping("/value")
public String handleRequest() {
return "test1";
}
дͻڷʿ handleRequest() ʱȵ model() message ӽҳȥͼпֱӵãдᵼ¸ÿеķȵ model() ͬҲܷ㣬ΪԼָݡ
ǰ治ǵַ /hello ת index.jsp /test ת test.jspЩǷ˵תҲ request.getRequestDispatcher("ַ").forward(request, response);
νпͻתأǼ HelloController бд
@RequestMapping("/hello")
public ModelAndView handleRequest(javax.servlet.http.HttpServletRequest httpServletRequest, javax.servlet.http.HttpServletResponse httpServletResponse) throws Exception {
ModelAndView mav = new ModelAndView("index");
mav.addObject("message", "Hello Spring MVC");
return mav;
}
@RequestMapping("/jump")
public ModelAndView jump() {
ModelAndView mav = new ModelAndView("redirect:/hello");
return mav;
}
ʹ redirect:/hello ͱʾҪת /hello ·ڵַ룺localhost/jump Զת /hello ·£
Ҳã
@RequestMapping("/jump")
public String jump() {
return "redirect: ./hello";
}
һ Spring MVC ʵļϴ
commons-io-1.3.2.jar commons-fileupload-1.2.1.jardispatcher-servlet.xml һ䣺
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"/>
ϴ֧ܵ
ļΪ upload.jspԴڡpage£
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>ļϴ</title>
</head>
<body>
<form action="/upload" method="post" enctype="multipart/form-data">
</form>
</body>
</html>
Packagecontroller½UploadControllerࣺ
package controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.servlet.ModelAndView;
@Controller
public class UploadController {
@RequestMapping("/upload")
public void upload(@RequestParam("picture") MultipartFile picture) throws Exception {
System.out.println(picture.getOriginalFilename());
}
@RequestMapping("/test2")
public ModelAndView upload() {
return new ModelAndView("upload");
}
}
ַ룺localhost/test2 ѡļϴԳɹ
ӭתأתע ID@û githubwmyskxz ӭעźţwmyskxz Լѧϰ & ѧϰ & ҪҲԼqqȺ3382693
ߣû ӣhttps://www.jianshu.com/p/91a2d0a1e45a Դ ȨСҵתϵȨҵתע