{"id":1952,"date":"2017-02-28T20:29:14","date_gmt":"2017-02-28T12:29:14","guid":{"rendered":"https:\/\/ai.zhousir.top\/?p=1952"},"modified":"2026-08-18T11:21:56","modified_gmt":"2026-08-18T03:21:56","slug":"springmvc%e8%af%a6%e7%bb%86%e7%a4%ba%e4%be%8b%e5%ae%9e%e6%88%98%e6%95%99%e7%a8%8b","status":"publish","type":"post","link":"https:\/\/ai.zhousir.top\/?p=1952","title":{"rendered":"SpringMVC\u8be6\u7ec6\u793a\u4f8b\u5b9e\u6218\u6559\u7a0b"},"content":{"rendered":"<section id=\"wenyan\" style=\"font-family: system-ui, 'Apple Color Emoji', 'Segoe UI', 'Segoe UI Symbol', 'Noto Sans', Roboto, sans-serif; line-height: 1.75; font-size: 16px; color: #000000; caret-color: #000000;\" data-provider=\"WenYan\">\n<p style=\"margin: 1em 0px;\">\u8fd9\u7bc7\u6559\u7a0b\u4ece <strong style=\"color: #4870ac;\">HelloWorld<\/strong> \u8d77\u6b65\uff0c\u628a <strong style=\"color: #4870ac;\">SpringMVC<\/strong> \u7684 DispatcherServlet\u3001springmvc-servlet.xml \u548c\u5e38\u7528\u6ce8\u89e3\u4e00\u8def\u8bb2\u5230\u53c2\u6570\u7ed1\u5b9a\u3001\u6587\u4ef6\u4e0a\u4f20\u3001REST\u3001Ajax\u3001\u62e6\u622a\u5668\u3001\u8868\u5355\u6821\u9a8c\uff0c\u4ee5\u53ca\u548c Spring IOC \u7684\u6574\u5408\u3002<\/p>\n<p style=\"margin: 1em 0px;\">\u5148\u5bfc\u5165 jar\u3001\u5728 web.xml \u91cc\u914d\u7f6e DispatcherServlet\uff0c\u518d\u5199 Controller \u8fd4\u56de\u89c6\u56fe\uff1b\u540e\u9762\u6bcf\u4e00\u8282\u90fd\u914d\u6709\u53ef\u5bf9\u7167\u7684\u914d\u7f6e\u548c\u4ee3\u7801\u793a\u4f8b\uff0c\u9002\u5408\u6309\u7ae0\u8282\u8ddf\u7740\u505a\u4e00\u904d\u3002<\/p>\n<h2 style=\"padding: 1px 12.5px; color: #ffffff; margin: 1.2em 0px 1em; border-radius: 4px; display: inline-block; background-color: #4870ac; font-size: 1.3em;\">\u4e00\u3001SpringMVC\u57fa\u7840\u5165\u95e8\uff0c\u521b\u5efa\u4e00\u4e2aHelloWorld\u7a0b\u5e8f<\/h2>\n<p style=\"margin: 1em 0px;\">1.\u9996\u5148\uff0c\u5bfc\u5165SpringMVC\u9700\u8981\u7684jar\u5305\u3002<\/p>\n<p><img decoding=\"async\" src=\"file:\/\/\/C:\/Users\/Jay%20Jay\/AppData\/Roaming\/Tencent\/Users\/449387122\/QQ\/WinTemp\/RichOle\/80HS[GZ02HK7R]0OPKUVZ%7DN.png\" alt=\"\" \/><br \/>\n<img decoding=\"async\" src=\"http:\/\/images0.cnblogs.com\/blog2015\/694841\/201506\/032131066955378.png\" alt=\"\" \/><\/p>\n<p style=\"margin: 1em 0px;\">2.\u6dfb\u52a0Web.xml\u914d\u7f6e\u6587\u4ef6\u4e2d\u5173\u4e8eSpringMVC\u7684\u914d\u7f6e<\/p>\n<pre style=\"overflow: auto hidden; word-break: normal; white-space: pre; tab-size: 2; border-radius: 5px; line-height: 2; margin: 1em 0.5em; padding: 0.5em; box-shadow: rgba(0, 0, 0, 0.55) 0px 1px 5px; font-size: 12px; background: #002b36; max-width: 100%; overflow-wrap: normal;\"><code class=\"hljs\" style=\"word-break: normal; white-space: nowrap; tab-size: 2; font-size: 12px; font-family: Menlo, Monaco, Consolas, 'Liberation Mono', 'Roboto Mono', 'Courier New', 'Microsoft YaHei', monospace; display: block; overflow-x: auto; margin: 0.5em; padding: 3px 5px; color: #93a1a1; background: #002b36; overflow-wrap: normal;\">&lt;!--configure the setting of springmvcDispatcherServlet and configure the mapping--&gt;\n\u00a0\u00a0&lt;servlet&gt;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;servlet-name&gt;springmvc&lt;\/servlet-name&gt;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;servlet-class&gt;org.springframework.web.servlet.DispatcherServlet&lt;\/servlet-class&gt;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;init-param&gt;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;param-name&gt;contextConfigLocation&lt;\/param-name&gt;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;param-value&gt;classpath:springmvc-servlet.xml&lt;\/param-value&gt;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;\/init-param&gt;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;!-- &lt;load-on-startup&gt;1&lt;\/load-on-startup&gt; --&gt;\n\u00a0\u00a0&lt;\/servlet&gt;\n\n\u00a0\u00a0&lt;servlet-mapping&gt;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;servlet-name&gt;springmvc&lt;\/servlet-name&gt;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;url-pattern&gt;\/&lt;\/url-pattern&gt;\n\u00a0\u00a0&lt;\/servlet-mapping&gt;<\/code><\/pre>\n<p style=\"margin: 1em 0px;\">3.\u5728src\u4e0b\u6dfb\u52a0springmvc-servlet.xml\u914d\u7f6e\u6587\u4ef6<\/p>\n<pre style=\"overflow: auto hidden; word-break: normal; white-space: pre; tab-size: 2; border-radius: 5px; line-height: 2; margin: 1em 0.5em; padding: 0.5em; box-shadow: rgba(0, 0, 0, 0.55) 0px 1px 5px; font-size: 12px; background: #002b36; max-width: 100%; overflow-wrap: normal;\"><code class=\"hljs\" style=\"word-break: normal; white-space: nowrap; tab-size: 2; font-size: 12px; font-family: Menlo, Monaco, Consolas, 'Liberation Mono', 'Roboto Mono', 'Courier New', 'Microsoft YaHei', monospace; display: block; overflow-x: auto; margin: 0.5em; padding: 3px 5px; color: #93a1a1; background: #002b36; overflow-wrap: normal;\">&lt;?xml version=\"1.0\" encoding=\"UTF-8\"?&gt;\n&lt;beans xmlns=\"http:\/\/www.springframework.org\/schema\/beans\"\n\u00a0\u00a0\u00a0\u00a0xmlns:xsi=\"http:\/\/www.w3.org\/2001\/XMLSchema-instance\"\n\u00a0\u00a0\u00a0\u00a0xmlns:context=\"http:\/\/www.springframework.org\/schema\/context\"\n\u00a0\u00a0\u00a0\u00a0xmlns:mvc=\"http:\/\/www.springframework.org\/schema\/mvc\"\n\u00a0\u00a0\u00a0\u00a0xsi:schemaLocation=\"http:\/\/www.springframework.org\/schema\/beans http:\/\/www.springframework.org\/schema\/beans\/spring-beans.xsd\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0http:\/\/www.springframework.org\/schema\/context http:\/\/www.springframework.org\/schema\/context\/spring-context-4.1.xsd\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0http:\/\/www.springframework.org\/schema\/mvc http:\/\/www.springframework.org\/schema\/mvc\/spring-mvc-4.1.xsd\"&gt;\n\n\u00a0\u00a0\u00a0\u00a0&lt;!-- scan the package and the sub package --&gt;\n\u00a0\u00a0\u00a0\u00a0&lt;context:component-scan base-package=\"test.SpringMVC\"\/&gt;\n\n\u00a0\u00a0\u00a0\u00a0&lt;!-- don't handle the static resource --&gt;\n\u00a0\u00a0\u00a0\u00a0&lt;mvc:default-servlet-handler \/&gt;\n\n\u00a0\u00a0\u00a0\u00a0&lt;!-- if you use annotation you must configure following setting --&gt;\n\u00a0\u00a0\u00a0\u00a0&lt;mvc:annotation-driven \/&gt;\n\n\u00a0\u00a0\u00a0\u00a0&lt;!-- configure the InternalResourceViewResolver --&gt;\n\u00a0\u00a0\u00a0\u00a0&lt;bean class=\"org.springframework.web.servlet.view.InternalResourceViewResolver\"\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0id=\"internalResourceViewResolver\"&gt;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;!-- \u524d\u7f00 --&gt;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;property name=\"prefix\" value=\"\/WEB-INF\/jsp\/\" \/&gt;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;!-- \u540e\u7f00 --&gt;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;property name=\"suffix\" value=\".jsp\" \/&gt;\n\u00a0\u00a0\u00a0\u00a0&lt;\/bean&gt;\n&lt;\/beans&gt;<\/code><\/pre>\n<p style=\"margin: 1em 0px;\">4.\u5728WEB-INF\u6587\u4ef6\u5939\u4e0b\u521b\u5efa\u540d\u4e3ajsp\u7684\u6587\u4ef6\u5939\uff0c\u7528\u6765\u5b58\u653ejsp\u89c6\u56fe\u3002\u521b\u5efa\u4e00\u4e2ahello.jsp\uff0c\u5728body\u4e2d\u6dfb\u52a0\u201cHello World\u201d\u3002<\/p>\n<p style=\"margin: 1em 0px;\">5.\u5efa\u7acb\u5305\u53caController\uff0c\u5982\u4e0b\u6240\u793a<\/p>\n<p><img decoding=\"async\" src=\"http:\/\/images0.cnblogs.com\/blog2015\/694841\/201506\/032227247897004.png\" alt=\"\" \/><\/p>\n<p style=\"margin: 1em 0px;\">6.\u7f16\u5199Controller\u4ee3\u7801<\/p>\n<pre style=\"overflow: auto hidden; word-break: normal; white-space: pre; tab-size: 2; border-radius: 5px; line-height: 2; margin: 1em 0.5em; padding: 0.5em; box-shadow: rgba(0, 0, 0, 0.55) 0px 1px 5px; font-size: 12px; background: #002b36; max-width: 100%; overflow-wrap: normal;\"><code class=\"hljs\" style=\"word-break: normal; white-space: nowrap; tab-size: 2; font-size: 12px; font-family: Menlo, Monaco, Consolas, 'Liberation Mono', 'Roboto Mono', 'Courier New', 'Microsoft YaHei', monospace; display: block; overflow-x: auto; margin: 0.5em; padding: 3px 5px; color: #93a1a1; background: #002b36; overflow-wrap: normal;\">@Controller\n@RequestMapping(\"\/mvc\")\npublic class mvcController {\n\n\u00a0\u00a0\u00a0\u00a0@RequestMapping(\"\/hello\")\n\u00a0\u00a0\u00a0\u00a0public String hello(){\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0return \"hello\";\n\u00a0\u00a0\u00a0\u00a0}\n}<\/code><\/pre>\n<p style=\"margin: 1em 0px;\">7.\u542f\u52a8\u670d\u52a1\u5668\uff0c\u952e\u5165\u00a0http:\/\/localhost:8080\/\u9879\u76ee\u540d\/mvc\/hello<\/p>\n<h2 style=\"padding: 1px 12.5px; color: #ffffff; margin: 1.2em 0px 1em; border-radius: 4px; display: inline-block; background-color: #4870ac; font-size: 1.3em;\">\u4e8c\u3001\u914d\u7f6e\u89e3\u6790<\/h2>\n<p style=\"margin: 1em 0px;\">1.Dispatcherservlet<\/p>\n<p style=\"margin: 1em 0px;\">DispatcherServlet\u662f\u524d\u7f6e\u63a7\u5236\u5668\uff0c\u914d\u7f6e\u5728web.xml\u6587\u4ef6\u4e2d\u7684\u3002\u62e6\u622a\u5339\u914d\u7684\u8bf7\u6c42\uff0cServlet\u62e6\u622a\u5339\u914d\u89c4\u5219\u8981\u81ea\u5df2\u5b9a\u4e49\uff0c\u628a\u62e6\u622a\u4e0b\u6765\u7684\u8bf7\u6c42\uff0c\u4f9d\u636e\u76f8\u5e94\u7684\u89c4\u5219\u5206\u53d1\u5230\u76ee\u6807Controller\u6765\u5904\u7406\uff0c\u662f\u914d\u7f6espring MVC\u7684\u7b2c\u4e00\u6b65\u3002<\/p>\n<p style=\"margin: 1em 0px;\">2.InternalResourceViewResolver<\/p>\n<p style=\"margin: 1em 0px;\">\u89c6\u56fe\u540d\u79f0\u89e3\u6790\u5668<\/p>\n<p style=\"margin: 1em 0px;\">3.\u4ee5\u4e0a\u51fa\u73b0\u7684\u6ce8\u89e3<\/p>\n<p style=\"margin: 1em 0px;\">@Controller\u00a0\u8d1f\u8d23\u6ce8\u518c\u4e00\u4e2abean \u5230spring \u4e0a\u4e0b\u6587\u4e2d<\/p>\n<p style=\"margin: 1em 0px;\">@RequestMapping\u00a0\u6ce8\u89e3\u4e3a\u63a7\u5236\u5668\u6307\u5b9a\u53ef\u4ee5\u5904\u7406\u54ea\u4e9b URL \u8bf7\u6c42<\/p>\n<h2 style=\"padding: 1px 12.5px; color: #ffffff; margin: 1.2em 0px 1em; border-radius: 4px; display: inline-block; background-color: #4870ac; font-size: 1.3em;\">\u4e09\u3001SpringMVC\u5e38\u7528\u6ce8\u89e3<\/h2>\n<p style=\"margin: 1em 0px;\">@Controller<\/p>\n<p style=\"margin: 1em 0px;\">\u8d1f\u8d23\u6ce8\u518c\u4e00\u4e2abean \u5230spring \u4e0a\u4e0b\u6587\u4e2d<\/p>\n<p style=\"margin: 1em 0px;\">@RequestMapping<\/p>\n<p style=\"margin: 1em 0px;\">\u6ce8\u89e3\u4e3a\u63a7\u5236\u5668\u6307\u5b9a\u53ef\u4ee5\u5904\u7406\u54ea\u4e9b URL \u8bf7\u6c42<\/p>\n<p style=\"margin: 1em 0px;\">@RequestBody<\/p>\n<p style=\"margin: 1em 0px;\">\u8be5\u6ce8\u89e3\u7528\u4e8e\u8bfb\u53d6Request\u8bf7\u6c42\u7684body\u90e8\u5206\u6570\u636e\uff0c\u4f7f\u7528\u7cfb\u7edf\u9ed8\u8ba4\u914d\u7f6e\u7684HttpMessageConverter\u8fdb\u884c\u89e3\u6790\uff0c\u7136\u540e\u628a\u76f8\u5e94\u7684\u6570\u636e\u7ed1\u5b9a\u5230\u8981\u8fd4\u56de\u7684\u5bf9\u8c61\u4e0a\u00a0,\u518d\u628aHttpMessageConverter\u8fd4\u56de\u7684\u5bf9\u8c61\u6570\u636e\u7ed1\u5b9a\u5230 controller\u4e2d\u65b9\u6cd5\u7684\u53c2\u6570\u4e0a<\/p>\n<p style=\"margin: 1em 0px;\">@ResponseBody<\/p>\n<p style=\"margin: 1em 0px;\">\u8be5\u6ce8\u89e3\u7528\u4e8e\u5c06Controller\u7684\u65b9\u6cd5\u8fd4\u56de\u7684\u5bf9\u8c61\uff0c\u901a\u8fc7\u9002\u5f53\u7684HttpMessageConverter\u8f6c\u6362\u4e3a\u6307\u5b9a\u683c\u5f0f\u540e\uff0c\u5199\u5165\u5230Response\u5bf9\u8c61\u7684body\u6570\u636e\u533a<\/p>\n<p style=\"margin: 1em 0px;\">@ModelAttribute<\/p>\n<p style=\"margin: 1em 0px;\">\u5728\u65b9\u6cd5\u5b9a\u4e49\u4e0a\u4f7f\u7528 @ModelAttribute \u6ce8\u89e3\uff1aSpring MVC \u5728\u8c03\u7528\u76ee\u6807\u5904\u7406\u65b9\u6cd5\u524d\uff0c\u4f1a\u5148\u9010\u4e2a\u8c03\u7528\u5728\u65b9\u6cd5\u7ea7\u4e0a\u6807\u6ce8\u4e86@ModelAttribute \u7684\u65b9\u6cd5<\/p>\n<p style=\"margin: 1em 0px;\">\u5728\u65b9\u6cd5\u7684\u5165\u53c2\u524d\u4f7f\u7528 @ModelAttribute \u6ce8\u89e3\uff1a\u53ef\u4ee5\u4ece\u9690\u542b\u5bf9\u8c61\u4e2d\u83b7\u53d6\u9690\u542b\u7684\u6a21\u578b\u6570\u636e\u4e2d\u83b7\u53d6\u5bf9\u8c61\uff0c\u518d\u5c06\u8bf7\u6c42\u53c2\u6570 \u2013\u7ed1\u5b9a\u5230\u5bf9\u8c61\u4e2d\uff0c\u518d\u4f20\u5165\u5165\u53c2\u5c06\u65b9\u6cd5\u5165\u53c2\u5bf9\u8c61\u6dfb\u52a0\u5230\u6a21\u578b\u4e2d<\/p>\n<p style=\"margin: 1em 0px;\">@RequestParam<\/p>\n<p style=\"margin: 1em 0px;\">\u5728\u5904\u7406\u65b9\u6cd5\u5165\u53c2\u5904\u4f7f\u7528 @RequestParam \u53ef\u4ee5\u628a\u8bf7\u6c42\u53c2 \u6570\u4f20\u9012\u7ed9\u8bf7\u6c42\u65b9\u6cd5<\/p>\n<p style=\"margin: 1em 0px;\">@PathVariable<\/p>\n<p style=\"margin: 1em 0px;\">\u7ed1\u5b9a URL \u5360\u4f4d\u7b26\u5230\u5165\u53c2<\/p>\n<p style=\"margin: 1em 0px;\">@ExceptionHandler<\/p>\n<p style=\"margin: 1em 0px;\">\u6ce8\u89e3\u5230\u65b9\u6cd5\u4e0a\uff0c\u51fa\u73b0\u5f02\u5e38\u65f6\u4f1a\u6267\u884c\u8be5\u65b9\u6cd5<\/p>\n<p style=\"margin: 1em 0px;\">@ControllerAdvice<\/p>\n<p style=\"margin: 1em 0px;\">\u4f7f\u4e00\u4e2aContoller\u6210\u4e3a\u5168\u5c40\u7684\u5f02\u5e38\u5904\u7406\u7c7b\uff0c\u7c7b\u4e2d\u7528@ExceptionHandler\u65b9\u6cd5\u6ce8\u89e3\u7684\u65b9\u6cd5\u53ef\u4ee5\u5904\u7406\u6240\u6709Controller\u53d1\u751f\u7684\u5f02\u5e38<\/p>\n<h2 style=\"padding: 1px 12.5px; color: #ffffff; margin: 1.2em 0px 1em; border-radius: 4px; display: inline-block; background-color: #4870ac; font-size: 1.3em;\">\u56db\u3001\u81ea\u52a8\u5339\u914d\u53c2\u6570<\/h2>\n<pre style=\"overflow: auto hidden; word-break: normal; white-space: pre; tab-size: 2; border-radius: 5px; line-height: 2; margin: 1em 0.5em; padding: 0.5em; box-shadow: rgba(0, 0, 0, 0.55) 0px 1px 5px; font-size: 12px; background: #002b36; max-width: 100%; overflow-wrap: normal;\"><code class=\"hljs\" style=\"word-break: normal; white-space: nowrap; tab-size: 2; font-size: 12px; font-family: Menlo, Monaco, Consolas, 'Liberation Mono', 'Roboto Mono', 'Courier New', 'Microsoft YaHei', monospace; display: block; overflow-x: auto; margin: 0.5em; padding: 3px 5px; color: #93a1a1; background: #002b36; overflow-wrap: normal;\">\/\/match automatically\n\u00a0\u00a0\u00a0\u00a0@RequestMapping(\"\/person\")\n\u00a0\u00a0\u00a0\u00a0public String toPerson(String name,double age){\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0System.out.println(name+\" \"+age);\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0return \"hello\";\n\u00a0\u00a0\u00a0\u00a0}<\/code><\/pre>\n<h2 style=\"padding: 1px 12.5px; color: #ffffff; margin: 1.2em 0px 1em; border-radius: 4px; display: inline-block; background-color: #4870ac; font-size: 1.3em;\">\u4e94\u3001\u81ea\u52a8\u88c5\u7bb1<\/h2>\n<p style=\"margin: 1em 0px;\">1.\u7f16\u5199\u4e00\u4e2aPerson\u5b9e\u4f53\u7c7b<\/p>\n<pre style=\"overflow: auto hidden; word-break: normal; white-space: pre; tab-size: 2; border-radius: 5px; line-height: 2; margin: 1em 0.5em; padding: 0.5em; box-shadow: rgba(0, 0, 0, 0.55) 0px 1px 5px; font-size: 12px; background: #002b36; max-width: 100%; overflow-wrap: normal;\"><code class=\"hljs\" style=\"word-break: normal; white-space: nowrap; tab-size: 2; font-size: 12px; font-family: Menlo, Monaco, Consolas, 'Liberation Mono', 'Roboto Mono', 'Courier New', 'Microsoft YaHei', monospace; display: block; overflow-x: auto; margin: 0.5em; padding: 3px 5px; color: #93a1a1; background: #002b36; overflow-wrap: normal;\">package test.SpringMVC.model;\n\npublic class Person {\n\u00a0\u00a0\u00a0\u00a0public String getName() {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0return name;\n\u00a0\u00a0\u00a0\u00a0}\n\u00a0\u00a0\u00a0\u00a0public void setName(String name) {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0this.name = name;\n\u00a0\u00a0\u00a0\u00a0}\n\u00a0\u00a0\u00a0\u00a0public int getAge() {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0return age;\n\u00a0\u00a0\u00a0\u00a0}\n\u00a0\u00a0\u00a0\u00a0public void setAge(int age) {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0this.age = age;\n\u00a0\u00a0\u00a0\u00a0}\n\u00a0\u00a0\u00a0\u00a0private String name;\n\u00a0\u00a0\u00a0\u00a0private int age;\n\n}<\/code><\/pre>\n<p style=\"margin: 1em 0px;\">2.\u5728Controller\u91cc\u7f16\u5199\u65b9\u6cd5<\/p>\n<pre style=\"overflow: auto hidden; word-break: normal; white-space: pre; tab-size: 2; border-radius: 5px; line-height: 2; margin: 1em 0.5em; padding: 0.5em; box-shadow: rgba(0, 0, 0, 0.55) 0px 1px 5px; font-size: 12px; background: #002b36; max-width: 100%; overflow-wrap: normal;\"><code class=\"hljs\" style=\"word-break: normal; white-space: nowrap; tab-size: 2; font-size: 12px; font-family: Menlo, Monaco, Consolas, 'Liberation Mono', 'Roboto Mono', 'Courier New', 'Microsoft YaHei', monospace; display: block; overflow-x: auto; margin: 0.5em; padding: 3px 5px; color: #93a1a1; background: #002b36; overflow-wrap: normal;\">\/\/boxing automatically\n\u00a0\u00a0\u00a0\u00a0@RequestMapping(\"\/person1\")\n\u00a0\u00a0\u00a0\u00a0public String toPerson(Person p){\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0System.out.println(p.getName()+\" \"+p.getAge());\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0return \"hello\";\n\u00a0\u00a0\u00a0\u00a0}<\/code><\/pre>\n<h2 style=\"padding: 1px 12.5px; color: #ffffff; margin: 1.2em 0px 1em; border-radius: 4px; display: inline-block; background-color: #4870ac; font-size: 1.3em;\">\u516d\u3001\u4f7f\u7528InitBinder\u6765\u5904\u7406Date\u7c7b\u578b\u7684\u53c2\u6570<\/h2>\n<pre style=\"overflow: auto hidden; word-break: normal; white-space: pre; tab-size: 2; border-radius: 5px; line-height: 2; margin: 1em 0.5em; padding: 0.5em; box-shadow: rgba(0, 0, 0, 0.55) 0px 1px 5px; font-size: 12px; background: #002b36; max-width: 100%; overflow-wrap: normal;\"><code class=\"hljs\" style=\"word-break: normal; white-space: nowrap; tab-size: 2; font-size: 12px; font-family: Menlo, Monaco, Consolas, 'Liberation Mono', 'Roboto Mono', 'Courier New', 'Microsoft YaHei', monospace; display: block; overflow-x: auto; margin: 0.5em; padding: 3px 5px; color: #93a1a1; background: #002b36; overflow-wrap: normal;\">\/\/the parameter was converted in initBinder\n\u00a0\u00a0\u00a0\u00a0@RequestMapping(\"\/date\")\n\u00a0\u00a0\u00a0\u00a0public String date(Date date){\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0System.out.println(date);\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0return \"hello\";\n\u00a0\u00a0\u00a0\u00a0}\n\n\u00a0\u00a0\u00a0\u00a0\/\/At the time of initialization,convert the type \"String\" to type \"date\"\n\u00a0\u00a0\u00a0\u00a0@InitBinder\n\u00a0\u00a0\u00a0\u00a0public void initBinder(ServletRequestDataBinder binder){\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0binder.registerCustomEditor(Date.class, new CustomDateEditor(new SimpleDateFormat(\"yyyy-MM-dd\"),\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0true));\n\u00a0\u00a0\u00a0\u00a0}<\/code><\/pre>\n<h2 style=\"padding: 1px 12.5px; color: #ffffff; margin: 1.2em 0px 1em; border-radius: 4px; display: inline-block; background-color: #4870ac; font-size: 1.3em;\">\u4e03\u3001\u5411\u524d\u53f0\u4f20\u9012\u53c2\u6570<\/h2>\n<pre style=\"overflow: auto hidden; word-break: normal; white-space: pre; tab-size: 2; border-radius: 5px; line-height: 2; margin: 1em 0.5em; padding: 0.5em; box-shadow: rgba(0, 0, 0, 0.55) 0px 1px 5px; font-size: 12px; background: #002b36; max-width: 100%; overflow-wrap: normal;\"><code class=\"hljs\" style=\"word-break: normal; white-space: nowrap; tab-size: 2; font-size: 12px; font-family: Menlo, Monaco, Consolas, 'Liberation Mono', 'Roboto Mono', 'Courier New', 'Microsoft YaHei', monospace; display: block; overflow-x: auto; margin: 0.5em; padding: 3px 5px; color: #93a1a1; background: #002b36; overflow-wrap: normal;\">\/\/pass the parameters to front-end\n\u00a0\u00a0\u00a0\u00a0@RequestMapping(\"\/show\")\n\u00a0\u00a0\u00a0\u00a0public String showPerson(Map&lt;String,Object&gt; map){\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0Person p =new Person();\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0map.put(\"p\", p);\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0p.setAge(20);\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0p.setName(\"jayjay\");\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0return \"show\";\n\u00a0\u00a0\u00a0\u00a0}<\/code><\/pre>\n<p style=\"margin: 1em 0px;\">\u524d\u53f0\u53ef\u5728Request\u57df\u4e2d\u53d6\u5230\u201dp\u201d<\/p>\n<h2 style=\"padding: 1px 12.5px; color: #ffffff; margin: 1.2em 0px 1em; border-radius: 4px; display: inline-block; background-color: #4870ac; font-size: 1.3em;\">\u516b\u3001\u4f7f\u7528Ajax\u8c03\u7528<\/h2>\n<pre style=\"overflow: auto hidden; word-break: normal; white-space: pre; tab-size: 2; border-radius: 5px; line-height: 2; margin: 1em 0.5em; padding: 0.5em; box-shadow: rgba(0, 0, 0, 0.55) 0px 1px 5px; font-size: 12px; background: #002b36; max-width: 100%; overflow-wrap: normal;\"><code class=\"hljs\" style=\"word-break: normal; white-space: nowrap; tab-size: 2; font-size: 12px; font-family: Menlo, Monaco, Consolas, 'Liberation Mono', 'Roboto Mono', 'Courier New', 'Microsoft YaHei', monospace; display: block; overflow-x: auto; margin: 0.5em; padding: 3px 5px; color: #93a1a1; background: #002b36; overflow-wrap: normal;\">\/\/pass the parameters to front-end using ajax\n\u00a0\u00a0\u00a0\u00a0@RequestMapping(\"\/getPerson\")\n\u00a0\u00a0\u00a0\u00a0public void getPerson(String name,PrintWriter pw){\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0pw.write(\"hello,\"+name);\n\u00a0\u00a0\u00a0\u00a0}\n\u00a0\u00a0\u00a0\u00a0@RequestMapping(\"\/name\")\n\u00a0\u00a0\u00a0\u00a0public String sayHello(){\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0return \"name\";\n\u00a0\u00a0\u00a0\u00a0}<\/code><\/pre>\n<p style=\"margin: 1em 0px;\">\u524d\u53f0\u7528\u4e0b\u9762\u7684Jquery\u4ee3\u7801\u8c03\u7528<\/p>\n<pre style=\"overflow: auto hidden; word-break: normal; white-space: pre; tab-size: 2; border-radius: 5px; line-height: 2; margin: 1em 0.5em; padding: 0.5em; box-shadow: rgba(0, 0, 0, 0.55) 0px 1px 5px; font-size: 12px; background: #002b36; max-width: 100%; overflow-wrap: normal;\"><code class=\"hljs\" style=\"word-break: normal; white-space: nowrap; tab-size: 2; font-size: 12px; font-family: Menlo, Monaco, Consolas, 'Liberation Mono', 'Roboto Mono', 'Courier New', 'Microsoft YaHei', monospace; display: block; overflow-x: auto; margin: 0.5em; padding: 3px 5px; color: #93a1a1; background: #002b36; overflow-wrap: normal;\">$(function(){\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$(\"#btn\").click(function(){\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$.post(\"mvc\/getPerson\",{name:$(\"#name\").val()},function(data){\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0alert(data);\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0});\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0});\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0});<\/code><\/pre>\n<h2 style=\"padding: 1px 12.5px; color: #ffffff; margin: 1.2em 0px 1em; border-radius: 4px; display: inline-block; background-color: #4870ac; font-size: 1.3em;\">\u4e5d\u3001\u5728Controller\u4e2d\u4f7f\u7528redirect\u65b9\u5f0f\u5904\u7406\u8bf7\u6c42<\/h2>\n<pre style=\"overflow: auto hidden; word-break: normal; white-space: pre; tab-size: 2; border-radius: 5px; line-height: 2; margin: 1em 0.5em; padding: 0.5em; box-shadow: rgba(0, 0, 0, 0.55) 0px 1px 5px; font-size: 12px; background: #002b36; max-width: 100%; overflow-wrap: normal;\"><code class=\"hljs\" style=\"word-break: normal; white-space: nowrap; tab-size: 2; font-size: 12px; font-family: Menlo, Monaco, Consolas, 'Liberation Mono', 'Roboto Mono', 'Courier New', 'Microsoft YaHei', monospace; display: block; overflow-x: auto; margin: 0.5em; padding: 3px 5px; color: #93a1a1; background: #002b36; overflow-wrap: normal;\">\/\/redirect\n\u00a0\u00a0\u00a0\u00a0@RequestMapping(\"\/redirect\")\n\u00a0\u00a0\u00a0\u00a0public String redirect(){\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0return \"redirect:hello\";\n\u00a0\u00a0\u00a0\u00a0}<\/code><\/pre>\n<h2 style=\"padding: 1px 12.5px; color: #ffffff; margin: 1.2em 0px 1em; border-radius: 4px; display: inline-block; background-color: #4870ac; font-size: 1.3em;\">\u5341\u3001\u6587\u4ef6\u4e0a\u4f20<\/h2>\n<p style=\"margin: 1em 0px;\">1.\u9700\u8981\u5bfc\u5165\u4e24\u4e2ajar\u5305<\/p>\n<p><img decoding=\"async\" src=\"http:\/\/images0.cnblogs.com\/blog2015\/694841\/201506\/052005184887879.png\" alt=\"\" \/><\/p>\n<p style=\"margin: 1em 0px;\">2.\u5728SpringMVC\u914d\u7f6e\u6587\u4ef6\u4e2d\u52a0\u5165<\/p>\n<pre style=\"overflow: auto hidden; word-break: normal; white-space: pre; tab-size: 2; border-radius: 5px; line-height: 2; margin: 1em 0.5em; padding: 0.5em; box-shadow: rgba(0, 0, 0, 0.55) 0px 1px 5px; font-size: 12px; background: #002b36; max-width: 100%; overflow-wrap: normal;\"><code class=\"hljs\" style=\"word-break: normal; white-space: nowrap; tab-size: 2; font-size: 12px; font-family: Menlo, Monaco, Consolas, 'Liberation Mono', 'Roboto Mono', 'Courier New', 'Microsoft YaHei', monospace; display: block; overflow-x: auto; margin: 0.5em; padding: 3px 5px; color: #93a1a1; background: #002b36; overflow-wrap: normal;\">&lt;!-- upload settings --&gt;\n\u00a0\u00a0\u00a0\u00a0&lt;bean id=\"multipartResolver\"\u00a0 class=\"org.springframework.web.multipart.commons.CommonsMultipartResolver\"&gt;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;property name=\"maxUploadSize\" value=\"102400000\"&gt;&lt;\/property&gt;\n\u00a0\u00a0\u00a0\u00a0&lt;\/bean&gt;<\/code><\/pre>\n<p style=\"margin: 1em 0px;\">3.\u65b9\u6cd5\u4ee3\u7801<\/p>\n<pre style=\"overflow: auto hidden; word-break: normal; white-space: pre; tab-size: 2; border-radius: 5px; line-height: 2; margin: 1em 0.5em; padding: 0.5em; box-shadow: rgba(0, 0, 0, 0.55) 0px 1px 5px; font-size: 12px; background: #002b36; max-width: 100%; overflow-wrap: normal;\"><code class=\"hljs\" style=\"word-break: normal; white-space: nowrap; tab-size: 2; font-size: 12px; font-family: Menlo, Monaco, Consolas, 'Liberation Mono', 'Roboto Mono', 'Courier New', 'Microsoft YaHei', monospace; display: block; overflow-x: auto; margin: 0.5em; padding: 3px 5px; color: #93a1a1; background: #002b36; overflow-wrap: normal;\">@RequestMapping(value=\"\/upload\",method=RequestMethod.POST)\n\u00a0\u00a0\u00a0\u00a0public String upload(HttpServletRequest req) throws Exception{\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0MultipartHttpServletRequest mreq = (MultipartHttpServletRequest)req;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0MultipartFile file = mreq.getFile(\"file\");\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0String fileName = file.getOriginalFilename();\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0SimpleDateFormat sdf = new SimpleDateFormat(\"yyyyMMddHHmmss\");\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0FileOutputStream fos = new FileOutputStream(req.getSession().getServletContext().getRealPath(\"\/\")+\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"upload\/\"+sdf.format(new Date())+fileName.substring(fileName.lastIndexOf('.')));\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0fos.write(file.getBytes());\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0fos.flush();\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0fos.close();\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0return \"hello\";\n\u00a0\u00a0\u00a0\u00a0}<\/code><\/pre>\n<p style=\"margin: 1em 0px;\">4.\u524d\u53f0form\u8868\u5355<\/p>\n<pre style=\"overflow: auto hidden; word-break: normal; white-space: pre; tab-size: 2; border-radius: 5px; line-height: 2; margin: 1em 0.5em; padding: 0.5em; box-shadow: rgba(0, 0, 0, 0.55) 0px 1px 5px; font-size: 12px; background: #002b36; max-width: 100%; overflow-wrap: normal;\"><code class=\"hljs\" style=\"word-break: normal; white-space: nowrap; tab-size: 2; font-size: 12px; font-family: Menlo, Monaco, Consolas, 'Liberation Mono', 'Roboto Mono', 'Courier New', 'Microsoft YaHei', monospace; display: block; overflow-x: auto; margin: 0.5em; padding: 3px 5px; color: #93a1a1; background: #002b36; overflow-wrap: normal;\">&lt;form action=\"mvc\/upload\" method=\"post\" enctype=\"multipart\/form-data\"&gt;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;input type=\"file\" name=\"file\"&gt;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;input type=\"submit\" value=\"submit\"&gt;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;\/form&gt;<\/code><\/pre>\n<h2 style=\"padding: 1px 12.5px; color: #ffffff; margin: 1.2em 0px 1em; border-radius: 4px; display: inline-block; background-color: #4870ac; font-size: 1.3em;\">\u5341\u4e00\u3001\u4f7f\u7528@RequestParam\u6ce8\u89e3\u6307\u5b9a\u53c2\u6570\u7684name<\/h2>\n<pre style=\"overflow: auto hidden; word-break: normal; white-space: pre; tab-size: 2; border-radius: 5px; line-height: 2; margin: 1em 0.5em; padding: 0.5em; box-shadow: rgba(0, 0, 0, 0.55) 0px 1px 5px; font-size: 12px; background: #002b36; max-width: 100%; overflow-wrap: normal;\"><code class=\"hljs\" style=\"word-break: normal; white-space: nowrap; tab-size: 2; font-size: 12px; font-family: Menlo, Monaco, Consolas, 'Liberation Mono', 'Roboto Mono', 'Courier New', 'Microsoft YaHei', monospace; display: block; overflow-x: auto; margin: 0.5em; padding: 3px 5px; color: #93a1a1; background: #002b36; overflow-wrap: normal;\">@Controller\n@RequestMapping(\"\/test\")\npublic class mvcController1 {\n\u00a0\u00a0\u00a0\u00a0@RequestMapping(value=\"\/param\")\n\u00a0\u00a0\u00a0\u00a0public String testRequestParam(@RequestParam(value=\"id\") Integer id,\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0@RequestParam(value=\"name\")String name){\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0System.out.println(id+\" \"+name);\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0return \"\/hello\";\n\u00a0\u00a0\u00a0\u00a0}\n}<\/code><\/pre>\n<h2 style=\"padding: 1px 12.5px; color: #ffffff; margin: 1.2em 0px 1em; border-radius: 4px; display: inline-block; background-color: #4870ac; font-size: 1.3em;\">\u5341\u4e8c\u3001RESTFul\u98ce\u683c\u7684SringMVC<\/h2>\n<p style=\"margin: 1em 0px;\">1.RestController<\/p>\n<pre style=\"overflow: auto hidden; word-break: normal; white-space: pre; tab-size: 2; border-radius: 5px; line-height: 2; margin: 1em 0.5em; padding: 0.5em; box-shadow: rgba(0, 0, 0, 0.55) 0px 1px 5px; font-size: 12px; background: #002b36; max-width: 100%; overflow-wrap: normal;\"><code class=\"hljs\" style=\"word-break: normal; white-space: nowrap; tab-size: 2; font-size: 12px; font-family: Menlo, Monaco, Consolas, 'Liberation Mono', 'Roboto Mono', 'Courier New', 'Microsoft YaHei', monospace; display: block; overflow-x: auto; margin: 0.5em; padding: 3px 5px; color: #93a1a1; background: #002b36; overflow-wrap: normal;\">@Controller\n@RequestMapping(\"\/rest\")\npublic class RestController {\n\u00a0\u00a0\u00a0\u00a0@RequestMapping(value=\"\/user\/{id}\",method=RequestMethod.GET)\n\u00a0\u00a0\u00a0\u00a0public String get(@PathVariable(\"id\") Integer id){\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0System.out.println(\"get\"+id);\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0return \"\/hello\";\n\u00a0\u00a0\u00a0\u00a0}\n\n\u00a0\u00a0\u00a0\u00a0@RequestMapping(value=\"\/user\/{id}\",method=RequestMethod.POST)\n\u00a0\u00a0\u00a0\u00a0public String post(@PathVariable(\"id\") Integer id){\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0System.out.println(\"post\"+id);\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0return \"\/hello\";\n\u00a0\u00a0\u00a0\u00a0}\n\n\u00a0\u00a0\u00a0\u00a0@RequestMapping(value=\"\/user\/{id}\",method=RequestMethod.PUT)\n\u00a0\u00a0\u00a0\u00a0public String put(@PathVariable(\"id\") Integer id){\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0System.out.println(\"put\"+id);\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0return \"\/hello\";\n\u00a0\u00a0\u00a0\u00a0}\n\n\u00a0\u00a0\u00a0\u00a0@RequestMapping(value=\"\/user\/{id}\",method=RequestMethod.DELETE)\n\u00a0\u00a0\u00a0\u00a0public String delete(@PathVariable(\"id\") Integer id){\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0System.out.println(\"delete\"+id);\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0return \"\/hello\";\n\u00a0\u00a0\u00a0\u00a0}\n\n}<\/code><\/pre>\n<p style=\"margin: 1em 0px;\">2.form\u8868\u5355\u53d1\u9001put\u548cdelete\u8bf7\u6c42<\/p>\n<p style=\"margin: 1em 0px;\">\u5728web.xml\u4e2d\u914d\u7f6e<\/p>\n<pre style=\"overflow: auto hidden; word-break: normal; white-space: pre; tab-size: 2; border-radius: 5px; line-height: 2; margin: 1em 0.5em; padding: 0.5em; box-shadow: rgba(0, 0, 0, 0.55) 0px 1px 5px; font-size: 12px; background: #002b36; max-width: 100%; overflow-wrap: normal;\"><code class=\"hljs\" style=\"word-break: normal; white-space: nowrap; tab-size: 2; font-size: 12px; font-family: Menlo, Monaco, Consolas, 'Liberation Mono', 'Roboto Mono', 'Courier New', 'Microsoft YaHei', monospace; display: block; overflow-x: auto; margin: 0.5em; padding: 3px 5px; color: #93a1a1; background: #002b36; overflow-wrap: normal;\">&lt;!-- configure the HiddenHttpMethodFilter,convert the post method to put or delete --&gt;\n\u00a0\u00a0&lt;filter&gt;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;filter-name&gt;HiddenHttpMethodFilter&lt;\/filter-name&gt;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;filter-class&gt;org.springframework.web.filter.HiddenHttpMethodFilter&lt;\/filter-class&gt;\n\u00a0\u00a0&lt;\/filter&gt;\n\u00a0\u00a0&lt;filter-mapping&gt;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;filter-name&gt;HiddenHttpMethodFilter&lt;\/filter-name&gt;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;url-pattern&gt;\/*&lt;\/url-pattern&gt;\n\u00a0\u00a0&lt;\/filter-mapping&gt;<\/code><\/pre>\n<p style=\"margin: 1em 0px;\">\u5728\u524d\u53f0\u53ef\u4ee5\u7528\u4ee5\u4e0b\u4ee3\u7801\u4ea7\u751f\u8bf7\u6c42<\/p>\n<pre style=\"overflow: auto hidden; word-break: normal; white-space: pre; tab-size: 2; border-radius: 5px; line-height: 2; margin: 1em 0.5em; padding: 0.5em; box-shadow: rgba(0, 0, 0, 0.55) 0px 1px 5px; font-size: 12px; background: #002b36; max-width: 100%; overflow-wrap: normal;\"><code class=\"hljs\" style=\"word-break: normal; white-space: nowrap; tab-size: 2; font-size: 12px; font-family: Menlo, Monaco, Consolas, 'Liberation Mono', 'Roboto Mono', 'Courier New', 'Microsoft YaHei', monospace; display: block; overflow-x: auto; margin: 0.5em; padding: 3px 5px; color: #93a1a1; background: #002b36; overflow-wrap: normal;\">&lt;form action=\"rest\/user\/1\" method=\"post\"&gt;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;input type=\"hidden\" name=\"_method\" value=\"PUT\"&gt;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;input type=\"submit\" value=\"put\"&gt;\n\u00a0\u00a0\u00a0\u00a0&lt;\/form&gt;\n\n\u00a0\u00a0\u00a0\u00a0&lt;form action=\"rest\/user\/1\" method=\"post\"&gt;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;input type=\"submit\" value=\"post\"&gt;\n\u00a0\u00a0\u00a0\u00a0&lt;\/form&gt;\n\n\u00a0\u00a0\u00a0\u00a0&lt;form action=\"rest\/user\/1\" method=\"get\"&gt;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;input type=\"submit\" value=\"get\"&gt;\n\u00a0\u00a0\u00a0\u00a0&lt;\/form&gt;\n\n\u00a0\u00a0\u00a0\u00a0&lt;form action=\"rest\/user\/1\" method=\"post\"&gt;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;input type=\"hidden\" name=\"_method\" value=\"DELETE\"&gt;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;input type=\"submit\" value=\"delete\"&gt;\n\u00a0\u00a0\u00a0\u00a0&lt;\/form&gt;<\/code><\/pre>\n<h2 style=\"padding: 1px 12.5px; color: #ffffff; margin: 1.2em 0px 1em; border-radius: 4px; display: inline-block; background-color: #4870ac; font-size: 1.3em;\">\u5341\u4e09\u3001\u8fd4\u56dejson\u683c\u5f0f\u7684\u5b57\u7b26\u4e32<\/h2>\n<p style=\"margin: 1em 0px;\">1.\u5bfc\u5165\u4ee5\u4e0bjar\u5305<\/p>\n<p><img decoding=\"async\" src=\"http:\/\/images0.cnblogs.com\/blog2015\/694841\/201506\/052029372696778.png\" alt=\"\" \/><\/p>\n<p style=\"margin: 1em 0px;\">2.\u65b9\u6cd5\u4ee3\u7801<\/p>\n<pre style=\"overflow: auto hidden; word-break: normal; white-space: pre; tab-size: 2; border-radius: 5px; line-height: 2; margin: 1em 0.5em; padding: 0.5em; box-shadow: rgba(0, 0, 0, 0.55) 0px 1px 5px; font-size: 12px; background: #002b36; max-width: 100%; overflow-wrap: normal;\"><code class=\"hljs\" style=\"word-break: normal; white-space: nowrap; tab-size: 2; font-size: 12px; font-family: Menlo, Monaco, Consolas, 'Liberation Mono', 'Roboto Mono', 'Courier New', 'Microsoft YaHei', monospace; display: block; overflow-x: auto; margin: 0.5em; padding: 3px 5px; color: #93a1a1; background: #002b36; overflow-wrap: normal;\">@Controller\n@RequestMapping(\"\/json\")\npublic class jsonController {\n\n\u00a0\u00a0\u00a0\u00a0@ResponseBody\n\u00a0\u00a0\u00a0\u00a0@RequestMapping(\"\/user\")\n\u00a0\u00a0\u00a0\u00a0public\u00a0 User get(){\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0User u = new User();\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0u.setId(1);\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0u.setName(\"jayjay\");\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0u.setBirth(new Date());\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0return u;\n\u00a0\u00a0\u00a0\u00a0}\n}<\/code><\/pre>\n<h2 style=\"padding: 1px 12.5px; color: #ffffff; margin: 1.2em 0px 1em; border-radius: 4px; display: inline-block; background-color: #4870ac; font-size: 1.3em;\">\u5341\u56db\u3001\u5f02\u5e38\u7684\u5904\u7406<\/h2>\n<p style=\"margin: 1em 0px;\">1.\u5904\u7406\u5c40\u90e8\u5f02\u5e38\uff08Controller\u5185\uff09<\/p>\n<pre style=\"overflow: auto hidden; word-break: normal; white-space: pre; tab-size: 2; border-radius: 5px; line-height: 2; margin: 1em 0.5em; padding: 0.5em; box-shadow: rgba(0, 0, 0, 0.55) 0px 1px 5px; font-size: 12px; background: #002b36; max-width: 100%; overflow-wrap: normal;\"><code class=\"hljs\" style=\"word-break: normal; white-space: nowrap; tab-size: 2; font-size: 12px; font-family: Menlo, Monaco, Consolas, 'Liberation Mono', 'Roboto Mono', 'Courier New', 'Microsoft YaHei', monospace; display: block; overflow-x: auto; margin: 0.5em; padding: 3px 5px; color: #93a1a1; background: #002b36; overflow-wrap: normal;\">@ExceptionHandler\n\u00a0\u00a0\u00a0\u00a0public ModelAndView exceptionHandler(Exception ex){\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0ModelAndView mv = new ModelAndView(\"error\");\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0mv.addObject(\"exception\", ex);\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0System.out.println(\"in testExceptionHandler\");\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0return mv;\n\u00a0\u00a0\u00a0\u00a0}\n\n\u00a0\u00a0\u00a0\u00a0@RequestMapping(\"\/error\")\n\u00a0\u00a0\u00a0\u00a0public String error(){\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0int i = 5\/0;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0return \"hello\";\n\u00a0\u00a0\u00a0\u00a0}<\/code><\/pre>\n<p style=\"margin: 1em 0px;\">2.\u5904\u7406\u5168\u5c40\u5f02\u5e38\uff08\u6240\u6709Controller\uff09<\/p>\n<pre style=\"overflow: auto hidden; word-break: normal; white-space: pre; tab-size: 2; border-radius: 5px; line-height: 2; margin: 1em 0.5em; padding: 0.5em; box-shadow: rgba(0, 0, 0, 0.55) 0px 1px 5px; font-size: 12px; background: #002b36; max-width: 100%; overflow-wrap: normal;\"><code class=\"hljs\" style=\"word-break: normal; white-space: nowrap; tab-size: 2; font-size: 12px; font-family: Menlo, Monaco, Consolas, 'Liberation Mono', 'Roboto Mono', 'Courier New', 'Microsoft YaHei', monospace; display: block; overflow-x: auto; margin: 0.5em; padding: 3px 5px; color: #93a1a1; background: #002b36; overflow-wrap: normal;\">@ControllerAdvice\npublic class testControllerAdvice {\n\u00a0\u00a0\u00a0\u00a0@ExceptionHandler\n\u00a0\u00a0\u00a0\u00a0public ModelAndView exceptionHandler(Exception ex){\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0ModelAndView mv = new ModelAndView(\"error\");\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0mv.addObject(\"exception\", ex);\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0System.out.println(\"in testControllerAdvice\");\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0return mv;\n\u00a0\u00a0\u00a0\u00a0}\n}<\/code><\/pre>\n<p style=\"margin: 1em 0px;\">3.\u53e6\u4e00\u79cd\u5904\u7406\u5168\u5c40\u5f02\u5e38\u7684\u65b9\u6cd5<\/p>\n<p style=\"margin: 1em 0px;\">\u5728SpringMVC\u914d\u7f6e\u6587\u4ef6\u4e2d\u914d\u7f6e<\/p>\n<pre style=\"overflow: auto hidden; word-break: normal; white-space: pre; tab-size: 2; border-radius: 5px; line-height: 2; margin: 1em 0.5em; padding: 0.5em; box-shadow: rgba(0, 0, 0, 0.55) 0px 1px 5px; font-size: 12px; background: #002b36; max-width: 100%; overflow-wrap: normal;\"><code class=\"hljs\" style=\"word-break: normal; white-space: nowrap; tab-size: 2; font-size: 12px; font-family: Menlo, Monaco, Consolas, 'Liberation Mono', 'Roboto Mono', 'Courier New', 'Microsoft YaHei', monospace; display: block; overflow-x: auto; margin: 0.5em; padding: 3px 5px; color: #93a1a1; background: #002b36; overflow-wrap: normal;\">&lt;!-- configure SimpleMappingExceptionResolver --&gt;\n\u00a0\u00a0\u00a0\u00a0&lt;bean class=\"org.springframework.web.servlet.handler.SimpleMappingExceptionResolver\"&gt;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;property name=\"exceptionMappings\"&gt;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;props&gt;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;prop key=\"java.lang.ArithmeticException\"&gt;error&lt;\/prop&gt;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;\/props&gt;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;\/property&gt;\n\u00a0\u00a0\u00a0\u00a0&lt;\/bean&gt;<\/code><\/pre>\n<p style=\"margin: 1em 0px;\">error\u662f\u51fa\u9519\u9875\u9762<\/p>\n<h2 style=\"padding: 1px 12.5px; color: #ffffff; margin: 1.2em 0px 1em; border-radius: 4px; display: inline-block; background-color: #4870ac; font-size: 1.3em;\">\u5341\u4e94\u3001\u8bbe\u7f6e\u4e00\u4e2a\u81ea\u5b9a\u4e49\u62e6\u622a\u5668<\/h2>\n<p style=\"margin: 1em 0px;\">1.\u521b\u5efa\u4e00\u4e2aMyInterceptor\u7c7b\uff0c\u5e76\u5b9e\u73b0HandlerInterceptor\u63a5\u53e3<\/p>\n<pre style=\"overflow: auto hidden; word-break: normal; white-space: pre; tab-size: 2; border-radius: 5px; line-height: 2; margin: 1em 0.5em; padding: 0.5em; box-shadow: rgba(0, 0, 0, 0.55) 0px 1px 5px; font-size: 12px; background: #002b36; max-width: 100%; overflow-wrap: normal;\"><code class=\"hljs\" style=\"word-break: normal; white-space: nowrap; tab-size: 2; font-size: 12px; font-family: Menlo, Monaco, Consolas, 'Liberation Mono', 'Roboto Mono', 'Courier New', 'Microsoft YaHei', monospace; display: block; overflow-x: auto; margin: 0.5em; padding: 3px 5px; color: #93a1a1; background: #002b36; overflow-wrap: normal;\">public class MyInterceptor implements HandlerInterceptor {\n\n\u00a0\u00a0\u00a0\u00a0@Override\n\u00a0\u00a0\u00a0\u00a0public void afterCompletion(HttpServletRequest arg0,\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0HttpServletResponse arg1, Object arg2, Exception arg3)\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0throws Exception {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0System.out.println(\"afterCompletion\");\n\u00a0\u00a0\u00a0\u00a0}\n\n\u00a0\u00a0\u00a0\u00a0@Override\n\u00a0\u00a0\u00a0\u00a0public void postHandle(HttpServletRequest arg0, HttpServletResponse arg1,\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0Object arg2, ModelAndView arg3) throws Exception {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0System.out.println(\"postHandle\");\n\u00a0\u00a0\u00a0\u00a0}\n\n\u00a0\u00a0\u00a0\u00a0@Override\n\u00a0\u00a0\u00a0\u00a0public boolean preHandle(HttpServletRequest arg0, HttpServletResponse arg1,\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0Object arg2) throws Exception {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0System.out.println(\"preHandle\");\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0return true;\n\u00a0\u00a0\u00a0\u00a0}\n\n}<\/code><\/pre>\n<p style=\"margin: 1em 0px;\">2.\u5728SpringMVC\u7684\u914d\u7f6e\u6587\u4ef6\u4e2d\u914d\u7f6e<\/p>\n<pre style=\"overflow: auto hidden; word-break: normal; white-space: pre; tab-size: 2; border-radius: 5px; line-height: 2; margin: 1em 0.5em; padding: 0.5em; box-shadow: rgba(0, 0, 0, 0.55) 0px 1px 5px; font-size: 12px; background: #002b36; max-width: 100%; overflow-wrap: normal;\"><code class=\"hljs\" style=\"word-break: normal; white-space: nowrap; tab-size: 2; font-size: 12px; font-family: Menlo, Monaco, Consolas, 'Liberation Mono', 'Roboto Mono', 'Courier New', 'Microsoft YaHei', monospace; display: block; overflow-x: auto; margin: 0.5em; padding: 3px 5px; color: #93a1a1; background: #002b36; overflow-wrap: normal;\">&lt;!-- interceptor setting --&gt;\n\u00a0\u00a0\u00a0\u00a0&lt;mvc:interceptors&gt;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;mvc:interceptor&gt;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;mvc:mapping path=\"\/mvc\/**\"\/&gt;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;bean class=\"test.SpringMVC.Interceptor.MyInterceptor\"&gt;&lt;\/bean&gt;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;\/mvc:interceptor&gt;\n\u00a0\u00a0\u00a0\u00a0&lt;\/mvc:interceptors&gt;<\/code><\/pre>\n<p style=\"margin: 1em 0px;\">3.\u62e6\u622a\u5668\u6267\u884c\u987a\u5e8f<\/p>\n<p><img decoding=\"async\" src=\"http:\/\/images0.cnblogs.com\/blog2015\/694841\/201506\/052112090047146.png\" alt=\"\" \/><\/p>\n<h2 style=\"padding: 1px 12.5px; color: #ffffff; margin: 1.2em 0px 1em; border-radius: 4px; display: inline-block; background-color: #4870ac; font-size: 1.3em;\">\u5341\u516d\u3001\u8868\u5355\u7684\u9a8c\u8bc1\uff08\u4f7f\u7528Hibernate-validate\uff09\u53ca\u56fd\u9645\u5316<\/h2>\n<p style=\"margin: 1em 0px;\">1.\u5bfc\u5165Hibernate-validate\u9700\u8981\u7684jar\u5305<\/p>\n<p><img decoding=\"async\" src=\"http:\/\/images0.cnblogs.com\/blog2015\/694841\/201506\/052116271296839.png\" alt=\"\" \/><\/p>\n<p style=\"margin: 1em 0px;\">(\u672a\u9009\u4e2d\u4e0d\u7528\u5bfc\u5165)<\/p>\n<p><img decoding=\"async\" src=\"http:\/\/images0.cnblogs.com\/blog2015\/694841\/201506\/052116407233893.png\" alt=\"\" \/><\/p>\n<p style=\"margin: 1em 0px;\">2.\u7f16\u5199\u5b9e\u4f53\u7c7bUser\u5e76\u52a0\u4e0a\u9a8c\u8bc1\u6ce8\u89e3<\/p>\n<pre style=\"overflow: auto hidden; word-break: normal; white-space: pre; tab-size: 2; border-radius: 5px; line-height: 2; margin: 1em 0.5em; padding: 0.5em; box-shadow: rgba(0, 0, 0, 0.55) 0px 1px 5px; font-size: 12px; background: #002b36; max-width: 100%; overflow-wrap: normal;\"><code class=\"hljs\" style=\"word-break: normal; white-space: nowrap; tab-size: 2; font-size: 12px; font-family: Menlo, Monaco, Consolas, 'Liberation Mono', 'Roboto Mono', 'Courier New', 'Microsoft YaHei', monospace; display: block; overflow-x: auto; margin: 0.5em; padding: 3px 5px; color: #93a1a1; background: #002b36; overflow-wrap: normal;\">public class User {\n\u00a0\u00a0\u00a0\u00a0public int getId() {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0return id;\n\u00a0\u00a0\u00a0\u00a0}\n\u00a0\u00a0\u00a0\u00a0public void setId(int id) {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0this.id = id;\n\u00a0\u00a0\u00a0\u00a0}\n\u00a0\u00a0\u00a0\u00a0public String getName() {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0return name;\n\u00a0\u00a0\u00a0\u00a0}\n\u00a0\u00a0\u00a0\u00a0public void setName(String name) {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0this.name = name;\n\u00a0\u00a0\u00a0\u00a0}\n\u00a0\u00a0\u00a0\u00a0public Date getBirth() {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0return birth;\n\u00a0\u00a0\u00a0\u00a0}\n\u00a0\u00a0\u00a0\u00a0public void setBirth(Date birth) {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0this.birth = birth;\n\u00a0\u00a0\u00a0\u00a0}\n\u00a0\u00a0\u00a0\u00a0@Override\n\u00a0\u00a0\u00a0\u00a0public String toString() {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0return \"User [id=\" + id + \", name=\" + name + \", birth=\" + birth + \"]\";\n\u00a0\u00a0\u00a0\u00a0}\n\u00a0\u00a0\u00a0\u00a0private int id;\n\u00a0\u00a0\u00a0\u00a0@NotEmpty\n\u00a0\u00a0\u00a0\u00a0private String name;\n\n\u00a0\u00a0\u00a0\u00a0@Past\n\u00a0\u00a0\u00a0\u00a0@DateTimeFormat(pattern=\"yyyy-MM-dd\")\n\u00a0\u00a0\u00a0\u00a0private Date birth;\n}<\/code><\/pre>\n<p style=\"margin: 1em 0px;\">ps:@Past\u8868\u793a\u65f6\u95f4\u5fc5\u987b\u662f\u4e00\u4e2a\u8fc7\u53bb\u503c<\/p>\n<p style=\"margin: 1em 0px;\">3.\u5728jsp\u4e2d\u4f7f\u7528SpringMVC\u7684form\u8868\u5355<\/p>\n<pre style=\"overflow: auto hidden; word-break: normal; white-space: pre; tab-size: 2; border-radius: 5px; line-height: 2; margin: 1em 0.5em; padding: 0.5em; box-shadow: rgba(0, 0, 0, 0.55) 0px 1px 5px; font-size: 12px; background: #002b36; max-width: 100%; overflow-wrap: normal;\"><code class=\"hljs\" style=\"word-break: normal; white-space: nowrap; tab-size: 2; font-size: 12px; font-family: Menlo, Monaco, Consolas, 'Liberation Mono', 'Roboto Mono', 'Courier New', 'Microsoft YaHei', monospace; display: block; overflow-x: auto; margin: 0.5em; padding: 3px 5px; color: #93a1a1; background: #002b36; overflow-wrap: normal;\">&lt;form:form action=\"form\/add\" method=\"post\" modelAttribute=\"user\"&gt;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0id:&lt;form:input path=\"id\"\/&gt;&lt;form:errors path=\"id\"\/&gt;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0name:&lt;form:input path=\"name\"\/&gt;&lt;form:errors path=\"name\"\/&gt;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0birth:&lt;form:input path=\"birth\"\/&gt;&lt;form:errors path=\"birth\"\/&gt;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;input type=\"submit\" value=\"submit\"&gt;\n\u00a0\u00a0\u00a0&lt;\/form:form&gt;<\/code><\/pre>\n<p style=\"margin: 1em 0px;\">ps:path\u5bf9\u5e94name<\/p>\n<p style=\"margin: 1em 0px;\">4.Controller\u4e2d\u4ee3\u7801<\/p>\n<pre style=\"overflow: auto hidden; word-break: normal; white-space: pre; tab-size: 2; border-radius: 5px; line-height: 2; margin: 1em 0.5em; padding: 0.5em; box-shadow: rgba(0, 0, 0, 0.55) 0px 1px 5px; font-size: 12px; background: #002b36; max-width: 100%; overflow-wrap: normal;\"><code class=\"hljs\" style=\"word-break: normal; white-space: nowrap; tab-size: 2; font-size: 12px; font-family: Menlo, Monaco, Consolas, 'Liberation Mono', 'Roboto Mono', 'Courier New', 'Microsoft YaHei', monospace; display: block; overflow-x: auto; margin: 0.5em; padding: 3px 5px; color: #93a1a1; background: #002b36; overflow-wrap: normal;\">@Controller\n@RequestMapping(\"\/form\")\npublic class formController {\n\u00a0\u00a0\u00a0\u00a0@RequestMapping(value=\"\/add\",method=RequestMethod.POST)\n\u00a0\u00a0\u00a0\u00a0public String add(@Valid User u,BindingResult br){\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0if(br.getErrorCount()&gt;0){\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0return \"addUser\";\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0return \"showUser\";\n\u00a0\u00a0\u00a0\u00a0}\n\n\u00a0\u00a0\u00a0\u00a0@RequestMapping(value=\"\/add\",method=RequestMethod.GET)\n\u00a0\u00a0\u00a0\u00a0public String add(Map&lt;String,Object&gt; map){\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0map.put(\"user\",new User());\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0return \"addUser\";\n\u00a0\u00a0\u00a0\u00a0}\n}<\/code><\/pre>\n<p style=\"margin: 1em 0px;\">ps:<\/p>\n<p style=\"margin: 1em 0px;\">1.\u56e0\u4e3ajsp\u4e2d\u4f7f\u7528\u4e86modelAttribute\u5c5e\u6027\uff0c\u6240\u4ee5\u5fc5\u987b\u5728request\u57df\u4e2d\u6709\u4e00\u4e2a\u201duser\u201d.<\/p>\n<p style=\"margin: 1em 0px;\">2.@Valid \u8868\u793a\u6309\u7167\u5728\u5b9e\u4f53\u4e0a\u6807\u8bb0\u7684\u6ce8\u89e3\u9a8c\u8bc1\u53c2\u6570<\/p>\n<p style=\"margin: 1em 0px;\">3.\u8fd4\u56de\u5230\u539f\u9875\u9762\u9519\u8bef\u4fe1\u606f\u56de\u56de\u663e\uff0c\u8868\u5355\u4e5f\u4f1a\u56de\u663e<\/p>\n<p style=\"margin: 1em 0px;\">5.\u9519\u8bef\u4fe1\u606f\u81ea\u5b9a\u4e49<\/p>\n<p style=\"margin: 1em 0px;\">\u5728src\u76ee\u5f55\u4e0b\u6dfb\u52a0locale.properties<\/p>\n<pre style=\"overflow: auto hidden; word-break: normal; white-space: pre; tab-size: 2; border-radius: 5px; line-height: 2; margin: 1em 0.5em; padding: 0.5em; box-shadow: rgba(0, 0, 0, 0.55) 0px 1px 5px; font-size: 12px; background: #002b36; max-width: 100%; overflow-wrap: normal;\"><code class=\"hljs\" style=\"word-break: normal; white-space: nowrap; tab-size: 2; font-size: 12px; font-family: Menlo, Monaco, Consolas, 'Liberation Mono', 'Roboto Mono', 'Courier New', 'Microsoft YaHei', monospace; display: block; overflow-x: auto; margin: 0.5em; padding: 3px 5px; color: #93a1a1; background: #002b36; overflow-wrap: normal;\">NotEmpty.user.name=name can't not be empty\nPast.user.birth=birth should be a past value\nDateTimeFormat.user.birth=the format of input is wrong\ntypeMismatch.user.birth=the format of input is wrong\ntypeMismatch.user.id=the format of input is wrong<\/code><\/pre>\n<p style=\"margin: 1em 0px;\">\u5728SpringMVC\u914d\u7f6e\u6587\u4ef6\u4e2d\u914d\u7f6e<\/p>\n<pre style=\"overflow: auto hidden; word-break: normal; white-space: pre; tab-size: 2; border-radius: 5px; line-height: 2; margin: 1em 0.5em; padding: 0.5em; box-shadow: rgba(0, 0, 0, 0.55) 0px 1px 5px; font-size: 12px; background: #002b36; max-width: 100%; overflow-wrap: normal;\"><code class=\"hljs\" style=\"word-break: normal; white-space: nowrap; tab-size: 2; font-size: 12px; font-family: Menlo, Monaco, Consolas, 'Liberation Mono', 'Roboto Mono', 'Courier New', 'Microsoft YaHei', monospace; display: block; overflow-x: auto; margin: 0.5em; padding: 3px 5px; color: #93a1a1; background: #002b36; overflow-wrap: normal;\">&lt;!-- configure the locale resource --&gt;\n\u00a0\u00a0\u00a0\u00a0&lt;bean id=\"messageSource\" class=\"org.springframework.context.support.ResourceBundleMessageSource\"&gt;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;property name=\"basename\" value=\"locale\"&gt;&lt;\/property&gt;\n\u00a0\u00a0\u00a0\u00a0&lt;\/bean&gt;<\/code><\/pre>\n<p style=\"margin: 1em 0px;\">6.\u56fd\u9645\u5316\u663e\u793a<\/p>\n<p style=\"margin: 1em 0px;\">\u5728src\u4e0b\u6dfb\u52a0locale_zh_CN.properties<\/p>\n<pre style=\"overflow: auto hidden; word-break: normal; white-space: pre; tab-size: 2; border-radius: 5px; line-height: 2; margin: 1em 0.5em; padding: 0.5em; box-shadow: rgba(0, 0, 0, 0.55) 0px 1px 5px; font-size: 12px; background: #002b36; max-width: 100%; overflow-wrap: normal;\"><code class=\"hljs\" style=\"word-break: normal; white-space: nowrap; tab-size: 2; font-size: 12px; font-family: Menlo, Monaco, Consolas, 'Liberation Mono', 'Roboto Mono', 'Courier New', 'Microsoft YaHei', monospace; display: block; overflow-x: auto; margin: 0.5em; padding: 3px 5px; color: #93a1a1; background: #002b36; overflow-wrap: normal;\">username=\u8d26\u53f7\npassword=\u5bc6\u7801<\/code><\/pre>\n<p style=\"margin: 1em 0px;\">locale.properties\u4e2d\u6dfb\u52a0<\/p>\n<pre style=\"overflow: auto hidden; word-break: normal; white-space: pre; tab-size: 2; border-radius: 5px; line-height: 2; margin: 1em 0.5em; padding: 0.5em; box-shadow: rgba(0, 0, 0, 0.55) 0px 1px 5px; font-size: 12px; background: #002b36; max-width: 100%; overflow-wrap: normal;\"><code class=\"hljs\" style=\"word-break: normal; white-space: nowrap; tab-size: 2; font-size: 12px; font-family: Menlo, Monaco, Consolas, 'Liberation Mono', 'Roboto Mono', 'Courier New', 'Microsoft YaHei', monospace; display: block; overflow-x: auto; margin: 0.5em; padding: 3px 5px; color: #93a1a1; background: #002b36; overflow-wrap: normal;\">username=user name\npassword=password<\/code><\/pre>\n<p style=\"margin: 1em 0px;\">\u521b\u5efa\u4e00\u4e2alocale.jsp<\/p>\n<pre style=\"overflow: auto hidden; word-break: normal; white-space: pre; tab-size: 2; border-radius: 5px; line-height: 2; margin: 1em 0.5em; padding: 0.5em; box-shadow: rgba(0, 0, 0, 0.55) 0px 1px 5px; font-size: 12px; background: #002b36; max-width: 100%; overflow-wrap: normal;\"><code class=\"hljs\" style=\"word-break: normal; white-space: nowrap; tab-size: 2; font-size: 12px; font-family: Menlo, Monaco, Consolas, 'Liberation Mono', 'Roboto Mono', 'Courier New', 'Microsoft YaHei', monospace; display: block; overflow-x: auto; margin: 0.5em; padding: 3px 5px; color: #93a1a1; background: #002b36; overflow-wrap: normal;\">&lt;body&gt;\n\u00a0\u00a0\u00a0\u00a0&lt;fmt:message key=\"username\"&gt;&lt;\/fmt:message&gt;\n\u00a0\u00a0\u00a0\u00a0&lt;fmt:message key=\"password\"&gt;&lt;\/fmt:message&gt;\n\u00a0\u00a0&lt;\/body&gt;<\/code><\/pre>\n<p style=\"margin: 1em 0px;\">\u5728SpringMVC\u4e2d\u914d\u7f6e<\/p>\n<pre style=\"overflow: auto hidden; word-break: normal; white-space: pre; tab-size: 2; border-radius: 5px; line-height: 2; margin: 1em 0.5em; padding: 0.5em; box-shadow: rgba(0, 0, 0, 0.55) 0px 1px 5px; font-size: 12px; background: #002b36; max-width: 100%; overflow-wrap: normal;\"><code class=\"hljs\" style=\"word-break: normal; white-space: nowrap; tab-size: 2; font-size: 12px; font-family: Menlo, Monaco, Consolas, 'Liberation Mono', 'Roboto Mono', 'Courier New', 'Microsoft YaHei', monospace; display: block; overflow-x: auto; margin: 0.5em; padding: 3px 5px; color: #93a1a1; background: #002b36; overflow-wrap: normal;\">&lt;!-- make the jsp page can be visited --&gt;\n\u00a0\u00a0\u00a0&lt;mvc:view-controller path=\"\/locale\" view-name=\"locale\"\/&gt;<\/code><\/pre>\n<p style=\"margin: 1em 0px;\">\u8ba9locale.jsp\u5728WEB-INF\u4e0b\u4e5f\u80fd\u76f4\u63a5\u8bbf\u95ee<\/p>\n<p style=\"margin: 1em 0px;\">\u6700\u540e\uff0c\u8bbf\u95eelocale.jsp\uff0c\u5207\u6362\u6d4f\u89c8\u5668\u8bed\u8a00\uff0c\u80fd\u770b\u5230\u8d26\u53f7\u548c\u5bc6\u7801\u7684\u8bed\u8a00\u4e5f\u5207\u6362\u4e86<\/p>\n<h2 style=\"padding: 1px 12.5px; color: #ffffff; margin: 1.2em 0px 1em; border-radius: 4px; display: inline-block; background-color: #4870ac; font-size: 1.3em;\">\u5341\u4e03\u3001\u538b\u8f74\u5927\u620f\u2013\u6574\u5408SpringIOC\u548cSpringMVC<\/h2>\n<p style=\"margin: 1em 0px;\">1.\u521b\u5efa\u4e00\u4e2atest.SpringMVC.integrate\u7684\u5305\u7528\u6765\u6f14\u793a\u6574\u5408\uff0c\u5e76\u521b\u5efa\u5404\u7c7b<\/p>\n<p><img decoding=\"async\" src=\"http:\/\/images0.cnblogs.com\/blog2015\/694841\/201506\/052306155821182.png\" alt=\"\" \/><\/p>\n<p style=\"margin: 1em 0px;\">2.User\u5b9e\u4f53\u7c7b<\/p>\n<pre style=\"overflow: auto hidden; word-break: normal; white-space: pre; tab-size: 2; border-radius: 5px; line-height: 2; margin: 1em 0.5em; padding: 0.5em; box-shadow: rgba(0, 0, 0, 0.55) 0px 1px 5px; font-size: 12px; background: #002b36; max-width: 100%; overflow-wrap: normal;\"><code class=\"hljs\" style=\"word-break: normal; white-space: nowrap; tab-size: 2; font-size: 12px; font-family: Menlo, Monaco, Consolas, 'Liberation Mono', 'Roboto Mono', 'Courier New', 'Microsoft YaHei', monospace; display: block; overflow-x: auto; margin: 0.5em; padding: 3px 5px; color: #93a1a1; background: #002b36; overflow-wrap: normal;\">public class User {\n\u00a0\u00a0\u00a0\u00a0public int getId() {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0return id;\n\u00a0\u00a0\u00a0\u00a0}\n\u00a0\u00a0\u00a0\u00a0public void setId(int id) {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0this.id = id;\n\u00a0\u00a0\u00a0\u00a0}\n\u00a0\u00a0\u00a0\u00a0public String getName() {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0return name;\n\u00a0\u00a0\u00a0\u00a0}\n\u00a0\u00a0\u00a0\u00a0public void setName(String name) {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0this.name = name;\n\u00a0\u00a0\u00a0\u00a0}\n\u00a0\u00a0\u00a0\u00a0public Date getBirth() {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0return birth;\n\u00a0\u00a0\u00a0\u00a0}\n\u00a0\u00a0\u00a0\u00a0public void setBirth(Date birth) {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0this.birth = birth;\n\u00a0\u00a0\u00a0\u00a0}\n\u00a0\u00a0\u00a0\u00a0@Override\n\u00a0\u00a0\u00a0\u00a0public String toString() {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0return \"User [id=\" + id + \", name=\" + name + \", birth=\" + birth + \"]\";\n\u00a0\u00a0\u00a0\u00a0}\n\u00a0\u00a0\u00a0\u00a0private int id;\n\u00a0\u00a0\u00a0\u00a0@NotEmpty\n\u00a0\u00a0\u00a0\u00a0private String name;\n\n\u00a0\u00a0\u00a0\u00a0@Past\n\u00a0\u00a0\u00a0\u00a0@DateTimeFormat(pattern=\"yyyy-MM-dd\")\n\u00a0\u00a0\u00a0\u00a0private Date birth;\n}<\/code><\/pre>\n<p style=\"margin: 1em 0px;\">3.UserService\u7c7b<\/p>\n<pre style=\"overflow: auto hidden; word-break: normal; white-space: pre; tab-size: 2; border-radius: 5px; line-height: 2; margin: 1em 0.5em; padding: 0.5em; box-shadow: rgba(0, 0, 0, 0.55) 0px 1px 5px; font-size: 12px; background: #002b36; max-width: 100%; overflow-wrap: normal;\"><code class=\"hljs\" style=\"word-break: normal; white-space: nowrap; tab-size: 2; font-size: 12px; font-family: Menlo, Monaco, Consolas, 'Liberation Mono', 'Roboto Mono', 'Courier New', 'Microsoft YaHei', monospace; display: block; overflow-x: auto; margin: 0.5em; padding: 3px 5px; color: #93a1a1; background: #002b36; overflow-wrap: normal;\">@Component\npublic class UserService {\n\u00a0\u00a0\u00a0\u00a0public UserService(){\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0System.out.println(\"UserService Constructor...\\n\\n\\n\\n\\n\\n\");\n\u00a0\u00a0\u00a0\u00a0}\n\n\u00a0\u00a0\u00a0\u00a0public void save(){\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0System.out.println(\"save\");\n\u00a0\u00a0\u00a0\u00a0}\n}<\/code><\/pre>\n<p style=\"margin: 1em 0px;\">4.UserController<\/p>\n<pre style=\"overflow: auto hidden; word-break: normal; white-space: pre; tab-size: 2; border-radius: 5px; line-height: 2; margin: 1em 0.5em; padding: 0.5em; box-shadow: rgba(0, 0, 0, 0.55) 0px 1px 5px; font-size: 12px; background: #002b36; max-width: 100%; overflow-wrap: normal;\"><code class=\"hljs\" style=\"word-break: normal; white-space: nowrap; tab-size: 2; font-size: 12px; font-family: Menlo, Monaco, Consolas, 'Liberation Mono', 'Roboto Mono', 'Courier New', 'Microsoft YaHei', monospace; display: block; overflow-x: auto; margin: 0.5em; padding: 3px 5px; color: #93a1a1; background: #002b36; overflow-wrap: normal;\">@Controller\n@RequestMapping(\"\/integrate\")\npublic class UserController {\n\u00a0\u00a0\u00a0\u00a0@Autowired\n\u00a0\u00a0\u00a0\u00a0private UserService userService;\n\n\u00a0\u00a0\u00a0\u00a0@RequestMapping(\"\/user\")\n\u00a0\u00a0\u00a0\u00a0public String saveUser(@RequestBody @ModelAttribute User u){\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0System.out.println(u);\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0userService.save();\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0return \"hello\";\n\u00a0\u00a0\u00a0\u00a0}\n}<\/code><\/pre>\n<p style=\"margin: 1em 0px;\">5.Spring\u914d\u7f6e\u6587\u4ef6<\/p>\n<p style=\"margin: 1em 0px;\">\u5728src\u76ee\u5f55\u4e0b\u521b\u5efaSpringIOC\u7684\u914d\u7f6e\u6587\u4ef6applicationContext.xml<\/p>\n<pre style=\"overflow: auto hidden; word-break: normal; white-space: pre; tab-size: 2; border-radius: 5px; line-height: 2; margin: 1em 0.5em; padding: 0.5em; box-shadow: rgba(0, 0, 0, 0.55) 0px 1px 5px; font-size: 12px; background: #002b36; max-width: 100%; overflow-wrap: normal;\"><code class=\"hljs\" style=\"word-break: normal; white-space: nowrap; tab-size: 2; font-size: 12px; font-family: Menlo, Monaco, Consolas, 'Liberation Mono', 'Roboto Mono', 'Courier New', 'Microsoft YaHei', monospace; display: block; overflow-x: auto; margin: 0.5em; padding: 3px 5px; color: #93a1a1; background: #002b36; overflow-wrap: normal;\">&lt;?xml version=\"1.0\" encoding=\"UTF-8\"?&gt;\n&lt;beans xmlns=\"http:\/\/www.springframework.org\/schema\/beans\"\n\u00a0\u00a0\u00a0\u00a0xmlns:xsi=\"http:\/\/www.w3.org\/2001\/XMLSchema-instance\"\n\u00a0\u00a0\u00a0\u00a0xsi:schemaLocation=\"http:\/\/www.springframework.org\/schema\/beans\n\nhttp:\/\/www.springframework.org\/schema\/beans\/spring-beans.xsd\n\n\nhttp:\/\/www.springframework.org\/schema\/util\n\n\nhttp:\/\/www.springframework.org\/schema\/util\/spring-util-4.0.xsd\n\n\nhttp:\/\/www.springframework.org\/schema\/context\n\n\nhttp:\/\/www.springframework.org\/schema\/context\/spring-context.xsd\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0xmlns:util=\"http:\/\/www.springframework.org\/schema\/util\"\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0xmlns:p=\"http:\/\/www.springframework.org\/schema\/p\"\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0xmlns:context=\"http:\/\/www.springframework.org\/schema\/context\"\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&gt;\n\u00a0\u00a0\u00a0\u00a0&lt;context:component-scan base-package=\"test.SpringMVC.integrate\"&gt;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;context:exclude-filter type=\"annotation\"\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0expression=\"org.springframework.stereotype.Controller\"\/&gt;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;context:exclude-filter type=\"annotation\"\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0expression=\"org.springframework.web.bind.annotation.ControllerAdvice\"\/&gt;\n\u00a0\u00a0\u00a0\u00a0&lt;\/context:component-scan&gt;\n\n&lt;\/beans&gt;<\/code><\/pre>\n<p style=\"margin: 1em 0px;\">\u5728Web.xml\u4e2d\u6dfb\u52a0\u914d\u7f6e<\/p>\n<pre style=\"overflow: auto hidden; word-break: normal; white-space: pre; tab-size: 2; border-radius: 5px; line-height: 2; margin: 1em 0.5em; padding: 0.5em; box-shadow: rgba(0, 0, 0, 0.55) 0px 1px 5px; font-size: 12px; background: #002b36; max-width: 100%; overflow-wrap: normal;\"><code class=\"hljs\" style=\"word-break: normal; white-space: nowrap; tab-size: 2; font-size: 12px; font-family: Menlo, Monaco, Consolas, 'Liberation Mono', 'Roboto Mono', 'Courier New', 'Microsoft YaHei', monospace; display: block; overflow-x: auto; margin: 0.5em; padding: 3px 5px; color: #93a1a1; background: #002b36; overflow-wrap: normal;\">&lt;!-- configure the springIOC --&gt;\n\u00a0\u00a0&lt;listener&gt;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;listener-class&gt;org.springframework.web.context.ContextLoaderListener&lt;\/listener-class&gt;\n\u00a0\u00a0&lt;\/listener&gt;\n\u00a0\u00a0&lt;context-param&gt;\n\u00a0\u00a0\u00a0\u00a0&lt;param-name&gt;contextConfigLocation&lt;\/param-name&gt;\n\u00a0\u00a0\u00a0\u00a0&lt;param-value&gt;classpath:applicationContext.xml&lt;\/param-value&gt;\n\u00a0\u00a0&lt;\/context-param&gt;<\/code><\/pre>\n<p style=\"margin: 1em 0px;\">6.\u5728SpringMVC\u4e2d\u8fdb\u884c\u4e00\u4e9b\u914d\u7f6e\uff0c\u9632\u6b62SpringMVC\u548cSpringIOC\u5bf9\u540c\u4e00\u4e2a\u5bf9\u8c61\u7684\u7ba1\u7406\u91cd\u5408<\/p>\n<pre style=\"overflow: auto hidden; word-break: normal; white-space: pre; tab-size: 2; border-radius: 5px; line-height: 2; margin: 1em 0.5em; padding: 0.5em; box-shadow: rgba(0, 0, 0, 0.55) 0px 1px 5px; font-size: 12px; background: #002b36; max-width: 100%; overflow-wrap: normal;\"><code class=\"hljs\" style=\"word-break: normal; white-space: nowrap; tab-size: 2; font-size: 12px; font-family: Menlo, Monaco, Consolas, 'Liberation Mono', 'Roboto Mono', 'Courier New', 'Microsoft YaHei', monospace; display: block; overflow-x: auto; margin: 0.5em; padding: 3px 5px; color: #93a1a1; background: #002b36; overflow-wrap: normal;\">&lt;!-- scan the package and the sub package --&gt;\n\u00a0\u00a0\u00a0\u00a0&lt;context:component-scan base-package=\"test.SpringMVC.integrate\"&gt;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;context:include-filter type=\"annotation\"\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0expression=\"org.springframework.stereotype.Controller\"\/&gt;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;context:include-filter type=\"annotation\"\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0expression=\"org.springframework.web.bind.annotation.ControllerAdvice\"\/&gt;\n\u00a0\u00a0\u00a0\u00a0&lt;\/context:component-scan&gt;<\/code><\/pre>\n<h2 style=\"padding: 1px 12.5px; color: #ffffff; margin: 1.2em 0px 1em; border-radius: 4px; display: inline-block; background-color: #4870ac; font-size: 1.3em;\">\u5341\u516b\u3001SpringMVC\u8be6\u7ec6\u8fd0\u884c\u6d41\u7a0b\u56fe<\/h2>\n<p><img decoding=\"async\" src=\"http:\/\/images0.cnblogs.com\/blog2015\/694841\/201506\/052340331602684.png\" alt=\"\" \/><\/p>\n<h2 style=\"padding: 1px 12.5px; color: #ffffff; margin: 1.2em 0px 1em; border-radius: 4px; display: inline-block; background-color: #4870ac; font-size: 1.3em;\">\u5341\u4e5d\u3001SpringMVC\u4e0estruts2\u7684\u533a\u522b<\/h2>\n<p style=\"margin: 1em 0px;\">1\u3001springmvc\u57fa\u4e8e\u65b9\u6cd5\u5f00\u53d1\u7684\uff0cstruts2\u57fa\u4e8e\u7c7b\u5f00\u53d1\u7684\u3002springmvc\u5c06url\u548ccontroller\u91cc\u7684\u65b9\u6cd5\u6620\u5c04\u3002\u6620\u5c04\u6210\u529f\u540espringmvc\u751f\u6210\u4e00\u4e2aHandler\u5bf9\u8c61\uff0c\u5bf9\u8c61\u4e2d\u53ea\u5305\u62ec\u4e86\u4e00\u4e2amethod\u3002\u65b9\u6cd5\u6267\u884c\u7ed3\u675f\uff0c\u5f62\u53c2\u6570\u636e\u9500\u6bc1\u3002springmvc\u7684controller\u5f00\u53d1\u7c7b\u4f3cweb service\u5f00\u53d1\u3002<\/p>\n<p style=\"margin: 1em 0px;\">2\u3001springmvc\u53ef\u4ee5\u8fdb\u884c\u5355\u4f8b\u5f00\u53d1\uff0c\u5e76\u4e14\u5efa\u8bae\u4f7f\u7528\u5355\u4f8b\u5f00\u53d1\uff0cstruts2\u901a\u8fc7\u7c7b\u7684\u6210\u5458\u53d8\u91cf\u63a5\u6536\u53c2\u6570\uff0c\u65e0\u6cd5\u4f7f\u7528\u5355\u4f8b\uff0c\u53ea\u80fd\u4f7f\u7528\u591a\u4f8b\u3002<\/p>\n<p style=\"margin: 1em 0px;\">3\u3001\u7ecf\u8fc7\u5b9e\u9645\u6d4b\u8bd5\uff0cstruts2\u901f\u5ea6\u6162\uff0c\u5728\u4e8e\u4f7f\u7528struts\u6807\u7b7e\uff0c\u5982\u679c\u4f7f\u7528struts\u5efa\u8bae\u4f7f\u7528jstl\u3002<\/p>\n<p style=\"margin: 1em 0px;\">\u539f\u6587\u51fa\u5904\uff1a <a href=\"http:\/\/www.cnblogs.com\/sunniest\/p\/4555801.html\" target=\"_blank\" rel=\"noopener\">cnblogs-Sunnier<\/a><\/p>\n<blockquote style=\"display: block; font-size: 0.9em; border-left: 3px solid #4870ac; padding: 0.5em 1em; margin: 0px; background: #f6f8fa; color: #40464f;\">\n<p style=\"margin: 1em 0px;\"><strong style=\"color: #4870ac;\">\u4e00\u53e5\u8bdd\u603b\u7ed3\uff1aSpringMVC \u7684\u6838\u5fc3\u662f DispatcherServlet \u628a\u8bf7\u6c42\u6620\u5c04\u5230 Controller \u65b9\u6cd5\uff0c\u518d\u914d\u5408\u6ce8\u89e3\u3001\u89c6\u56fe\u89e3\u6790\u3001\u62e6\u622a\u5668\u548c IOC \u5b8c\u6210\u4e00\u6b21\u5b8c\u6574\u7684 Web \u8bf7\u6c42\u3002<\/strong><\/p>\n<\/blockquote>\n<\/section>\n","protected":false},"excerpt":{"rendered":"<p>\u8fd9\u7bc7\u6559\u7a0b\u4ece HelloWorld \u8d77\u6b65\uff0c\u628a SpringMVC \u7684 DispatcherServlet\u3001spr [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":3498,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[91],"tags":[184,185],"_links":{"self":[{"href":"https:\/\/ai.zhousir.top\/index.php?rest_route=\/wp\/v2\/posts\/1952"}],"collection":[{"href":"https:\/\/ai.zhousir.top\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/ai.zhousir.top\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/ai.zhousir.top\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/ai.zhousir.top\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1952"}],"version-history":[{"count":2,"href":"https:\/\/ai.zhousir.top\/index.php?rest_route=\/wp\/v2\/posts\/1952\/revisions"}],"predecessor-version":[{"id":3827,"href":"https:\/\/ai.zhousir.top\/index.php?rest_route=\/wp\/v2\/posts\/1952\/revisions\/3827"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/ai.zhousir.top\/index.php?rest_route=\/wp\/v2\/media\/3498"}],"wp:attachment":[{"href":"https:\/\/ai.zhousir.top\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1952"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/ai.zhousir.top\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1952"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/ai.zhousir.top\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1952"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}