{"id":544,"date":"2023-03-23T21:19:42","date_gmt":"2023-03-23T13:19:42","guid":{"rendered":""},"modified":"2023-03-23T21:19:42","modified_gmt":"2023-03-23T13:19:42","slug":"Spring MVC\u9a8c\u8bc1","status":"publish","type":"post","link":"https:\/\/bianchenghao6.com\/544.html","title":{"rendered":"Spring MVC\u9a8c\u8bc1"},"content":{"rendered":"


\n <\/head>
\n <\/p>\n

\n

Spring MVC\u9a8c\u8bc1<\/h1>\n<\/p><\/div>\n
\n Spring MVC\u9a8c\u8bc1\u7528\u4e8e\u9650\u5236\u7528\u6237\u63d0\u4f9b\u7684\u8f93\u5165\u3002\u4e3a\u4e86\u9a8c\u8bc1\u7528\u6237\u7684\u8f93\u5165\uff0cSpring 4\u6216\u66f4\u9ad8\u7248\u672c\u652f\u6301\u5e76\u4f7f\u7528Bean\u9a8c\u8bc1API\u3002\u5b83\u53ef\u4ee5\u540c\u65f6\u9a8c\u8bc1\u670d\u52a1\u5668\u7aef\u548c\u5ba2\u6237\u7aef\u5e94\u7528\u7a0b\u5e8f\u3002\n <\/div>\n

Bean\u9a8c\u8bc1API <\/h2>\n
\n Bean\u9a8c\u8bc1API\u662f\u4e00\u79cdJava\u89c4\u8303\uff0c\u53ef\u7528\u4e8e\u5e94\u7528\u901a\u8fc7\u6ce8\u91ca\u5bf9\u5bf9\u8c61\u6a21\u578b\u7684\u7ea6\u675f\u3002\u5728\u8fd9\u91cc\uff0c\u6211\u4eec\u53ef\u4ee5\u9a8c\u8bc1\u957f\u5ea6\uff0c\u6570\u5b57\uff0c\u6b63\u5219\u8868\u8fbe\u5f0f\u7b49\u3002\u9664\u6b64\u4e4b\u5916\uff0c\u6211\u4eec\u8fd8\u53ef\u4ee5\u63d0\u4f9b\u81ea\u5b9a\u4e49\u9a8c\u8bc1\u3002\n <\/div>\n
\n \u7531\u4e8eBean\u9a8c\u8bc1API\u53ea\u662f\u4e00\u4e2a\u89c4\u8303\uff0c\u56e0\u6b64\u9700\u8981\u5b9e\u73b0\u3002\u56e0\u6b64\uff0c\u4e3a\u6b64\uff0c\u5b83\u4f7f\u7528\u4e86Hibernate Validator\u3002 Hibernate Validator\u662f\u5b8c\u5168\u517c\u5bb9\u7684JSR-303\/309\u5b9e\u73b0\uff0c\u5141\u8bb8\u8868\u8fbe\u548c\u9a8c\u8bc1\u5e94\u7528\u7a0b\u5e8f\u7ea6\u675f\u3002\n <\/div>\n

\u9a8c\u8bc1\u6ce8\u91ca<\/h2>\n
\n \u8ba9\u6211\u4eec\u770b\u770b\u4e00\u4e9b\u5e38\u7528\u7684\u9a8c\u8bc1\u6ce8\u91ca\u3002\n <\/div>\n\n\n\n\n\n\n\n\n
\u6ce8\u91ca<\/td>\n\u8bf4\u660e<\/td>\n<\/tr>\n
@NotNull <\/td>\n\u5b83\u786e\u5b9a\u8be5\u503c\u4e0d\u80fd\u4e3a\u7a7a\u3002<\/td>\n<\/tr>\n
@Min <\/td>\n\u786e\u5b9a\u8be5\u6570\u5b57\u5fc5\u987b\u7b49\u4e8e\u6216\u5927\u4e8e\u6307\u5b9a\u7684\u503c\u3002<\/td>\n<\/tr>\n
@Max <\/td>\n\u786e\u5b9a\u8be5\u6570\u5b57\u5fc5\u987b\u7b49\u4e8e\u6216\u5c0f\u4e8e\u6307\u5b9a\u7684\u503c\u3002<\/td>\n<\/tr>\n
@Size <\/td>\n\u786e\u5b9a\u5927\u5c0f\u5fc5\u987b\u7b49\u4e8e\u6307\u5b9a\u7684\u503c\u3002<\/td>\n<\/tr>\n
@Pattern<\/td>\n\u5b83\u786e\u5b9a\u5e8f\u5217\u9075\u5faa\u6307\u5b9a\u7684\u6b63\u5219\u8868\u8fbe\u5f0f\u3002<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n
\n

Spring MVC\u9a8c\u8bc1\u793a\u4f8b<\/h2>\n
\n \u5728\u6b64\u793a\u4f8b\u4e2d\uff0c\u6211\u4eec\u521b\u5efa\u4e86\u4e00\u4e2a\u5305\u542b\u8f93\u5165\u5b57\u6bb5\u7684\u7b80\u5355\u8868\u5355\u3002\u5728\u6b64\uff0c(*)\u8868\u793a\u5fc5\u987b\u8f93\u5165\u76f8\u5e94\u7684\u5b57\u6bb5\u3002\u5426\u5219\uff0c\u8868\u683c\u4f1a\u4ea7\u751f\u9519\u8bef\u3002\n <\/div>\n

1\u3001\u5c06\u4f9d\u8d56\u9879\u6dfb\u52a0\u5230pom.xml\u6587\u4ef6\u3002<\/h3>\n
\n pom.xml <\/strong>\n <\/div>\n
\n
\r\n<!-- https:\/\/mvnrepository.com\/artifact\/org.springframework\/spring-webmvc -->\r\n<dependency>\r\n    <groupId>org.springframework<\/groupId>\r\n    <artifactId>spring-webmvc<\/artifactId>\r\n    <version>5.1.1.RELEASE<\/version>\r\n<\/dependency>\r\n<!-- https:\/\/mvnrepository.com\/artifact\/org.apache.tomcat\/tomcat-jasper -->\r\n<dependency>\r\n    <groupId>org.apache.tomcat<\/groupId>\r\n    <artifactId>tomcat-jasper<\/artifactId>\r\n    <version>9.0.12<\/version>\r\n<\/dependency>\r\n    <!-- https:\/\/mvnrepository.com\/artifact\/javax.servlet\/javax.servlet-api -->\r\n<dependency>  \r\n    <groupId>javax.servlet<\/groupId>  \r\n    <artifactId>servlet-api<\/artifactId>  \r\n    <version>3.0-alpha-1<\/version>  \r\n<\/dependency>\r\n<!-- https:\/\/mvnrepository.com\/artifact\/javax.servlet\/jstl -->\r\n<dependency>\r\n    <groupId>javax.servlet<\/groupId>\r\n    <artifactId>jstl<\/artifactId>\r\n    <version>1.2<\/version>\r\n<\/dependency>\r\n <!-- https:\/\/mvnrepository.com\/artifact\/org.hibernate.validator\/hibernate-validator -->\r\n<dependency>\r\n    <groupId>org.hibernate.validator<\/groupId>\r\n    <artifactId>hibernate-validator<\/artifactId>\r\n    <version>6.0.13.Final<\/version>\r\n<\/dependency>\r\n<\/pre>\n

<\/code>\n <\/div>\n

2\u3001\u521b\u5efabean\u7c7b<\/h3>\n
\n Employee.java <\/strong>\n <\/div>\n
\n
\r\npackage <\/span>com.lidihuo;\r\nimport javax.validation.constraints.Size;\r\npublic <\/span>class <\/span>Employee {\r\n  private <\/span>String name;\r\n  @Size(min=1,message=\"required\"<\/span>)\r\n  private <\/span>String pass;\r\n  \r\n  public <\/span>String getName() {\r\n    return <\/span>name;\r\n  }\r\n  public void <\/span>setName(String name) {\r\n    this<\/span>.name = name;\r\n  }\r\n  public <\/span>String getPass() {\r\n    return <\/span>pass;\r\n  }\r\n  public void <\/span>setPass(String pass) {\r\n    this<\/span>.pass = pass;\r\n  } \r\n}\r\n<\/pre>\n

<\/code>\n <\/div>\n

3\u3001\u521b\u5efa\u63a7\u5236\u5668\u7c7b<\/h3>\n
\n \u5728\u63a7\u5236\u5668\u7c7b\u4e2d: <\/strong>\n <\/div>\n

@\u6709\u6548<\/strong>\u6ce8\u91ca\u5c06\u9a8c\u8bc1\u89c4\u5219\u5e94\u7528\u4e8e\u6240\u63d0\u4f9b\u7684\u5bf9\u8c61\u3002<\/span>
\n BindingResult <\/strong>\u63a5\u53e3\u5305\u542b\u9a8c\u8bc1\u7ed3\u679c\u3002<\/span> <\/p>\n

\n
\r\npackage <\/span>com.lidihuo;\r\nimport javax.validation.Valid;\r\nimport org.springframework.stereotype.Controller;\r\nimport org.springframework.ui.Model;\r\nimport org.springframework.validation.BindingResult;\r\nimport org.springframework.web.bind.annotation.ModelAttribute;\r\nimport org.springframework.web.bind.annotation.RequestMapping;\r\n@Controller\r\npublic <\/span>class <\/span>EmployeeController {\r\n  @RequestMapping(\"\/hello\"<\/span>)\r\n  public <\/span>String display(Model m)\r\n  {\r\n    m.addAttribute<\/span>(\"emp\"<\/span><\/span>, new <\/span>Employee());\r\n    return <\/span>\"viewpage\"<\/span><\/span>;\r\n  }\r\n  @RequestMapping(\"\/helloagain\"<\/span>)\r\n  public <\/span>String submitForm( @Valid @ModelAttribute(\"emp\") Employee e, BindingResult br)\r\n  {\r\n    if(br.hasErrors<\/span>())\r\n    {\r\n      return <\/span>\"viewpage\";\r\n    }\r\n    else\r\n    {\r\n    return <\/span>\"final\"<\/span>;\r\n    }\r\n  }\r\n}\r\n<\/pre>\n

<\/code>\n <\/div>\n

4\u3001\u5728web.xml\u6587\u4ef6\u4e2d\u63d0\u4f9b\u63a7\u5236\u5668\u7684\u6761\u76ee<\/h3>\n
\n web.xml <\/strong>\n <\/div>\n
\n
\r\n<?xml version=\"1.0\"<\/span> encoding=\"UTF-8\"<\/span>?>\r\n<web-app xmlns:xsi=\"http:\/\/www.w3.org\/2001\/XMLSchema-instance\"<\/span> xmlns=\"http:\/\/java.sun.com\/xml\/ns\/javaee\"<\/span> xsi:schemaLocation=\"http:\/\/java.sun.com\/xml\/ns\/javaee http:\/\/java.sun.com\/xml\/ns\/javaee\/web-app_3_0.xsd\"<\/span> id=\"WebApp_ID\"<\/span> version=\"3.0\"<\/span>>\r\n  <display-name>SpringMVC<\/display-name>\r\n   <servlet>  \r\n    <servlet-name>spring<\/servlet-name>  \r\n    <servlet-class>org.springframework.web.servlet.DispatcherServlet<\/servlet-class>  \r\n    <load-on-startup>1<\/load-on-startup>    \r\n<\/servlet>  \r\n<servlet-mapping>  \r\n    <servlet-name>spring<\/servlet-name>  \r\n    <url-pattern>\/<\/url-pattern>  \r\n<\/servlet-mapping>  \r\n<\/web-app>\r\n<\/pre>\n

<\/code>\n <\/div>\n

5\u3001\u5728xml\u6587\u4ef6\u4e2d\u5b9a\u4e49Bean <\/h3>\n
\n spring-servlet.xml <\/strong>\n <\/div>\n
\n
\r\n<?xml version=\"1.0\"<\/span> encoding=\"UTF-8\"<\/span>?>\r\n<beans xmlns=\"http:\/\/www.springframework.org\/schema\/beans\"<\/span>\r\n  xmlns:xsi=\"http:\/\/www.w3.org\/2001\/XMLSchema-instance\"<\/span> \r\n  xmlns:context=\"http:\/\/www.springframework.org\/schema\/context\"<\/span>\r\n  xmlns:mvc=\"http:\/\/www.springframework.org\/schema\/mvc\"<\/span>\r\n  xsi:schemaLocation=\"\r\n    http:\/\/www.springframework.org\/schema\/beans\r\n      http:\/\/www.springframework.org\/schema\/beans\/spring-beans.xsd\r\n      http:\/\/www.springframework.org\/schema\/context\r\n      http:\/\/www.springframework.org\/schema\/context\/spring-context.xsd\r\n      http:\/\/www.springframework.org\/schema\/mvc\r\n        http:\/\/www.springframework.org\/schema\/mvc\/spring-mvc.xsd\">\r\n  <!-- Provide support for <\/span>component scanning -->\r\n  <context:component-scan base-package=\"com.lidihuo\"<\/span> \/>\r\n  <!--Provide support for <\/span>conversion, formatting and validation -->\r\n  <mvc:annotation-driven\/>\r\n  <!-- Define Spring MVC view resolver -->\r\n     <bean id=\"viewResolver\"<\/span> class=\"org.springframework.web.servlet.view.InternalResourceViewResolver\"<\/span>>\r\n        <property name=\"prefix\"<\/span> value=\"\/WEB-INF\/jsp\/\"<\/span>><\/property>\r\n        <property name=\"suffix\"<\/span> value=\".jsp\"<\/span>><\/property>     \r\n     <\/bean>\r\n<\/beans>\r\n<\/pre>\n

<\/code>\n <\/div>\n

6\u3001\u521b\u5efa\u8bf7\u6c42\u7684\u9875\u9762<\/h3>\n
\n index.jsp <\/strong>\n <\/div>\n
\n
\r\n<%@ taglib prefix=\"form\"<\/span> uri=\"http:\/\/www.springframework.org\/tags\/form\"<\/span> %>\r\n<html>\r\n<body>\r\n<a href=\"hello\"<\/span>>Click here...<\/a>\r\n<\/body>\r\n<\/html>\r\n<\/pre>\n

<\/code>\n <\/div>\n

7\u3001\u521b\u5efa\u5176\u4ed6\u89c6\u56fe\u7ec4\u4ef6<\/h3>\n
\n viewpage.jsp <\/strong>\n <\/div>\n
\n
\r\n<%@ taglib prefix=\"form\"<\/span> uri=\"http:\/\/www.springframework.org\/tags\/form\"<\/span> %>\r\n<html>\r\n<head>\r\n<style>\r\n.error{color:red}\r\n<\/style>\r\n<\/head>\r\n<body>\r\n<form:form action=\"helloagain\"<\/span> modelAttribute=\"emp\"<\/span>>\r\nUsername: <form:input path=\"name\"<\/span>\/> <br><br>\r\nPassword(*): <form:password path=\"pass\"<\/span><\/span>\/>  \r\n<form:errors path=\"pass\" cssClass=\"error\"<\/span>\/><br><br>\r\n<input type=\"submit\"<\/span><\/span> value=\"submit\">\r\n<\/form:form>\r\n<\/body>\r\n<\/html>\r\n<\/pre>\n

<\/code>\n <\/div>\n

\n final.jsp <\/strong>\n <\/div>\n
\n
\r\n<html>\r\n<body>\r\nUsername: ${emp.name} <br><br>\r\nPassword: ${emp.pass}\r\n<\/body>\r\n<\/html>\r\n<\/pre>\n

<\/code>\n <\/div>\n

\n \u8f93\u51fa: <\/strong>\n <\/div>\n

Spring MVC\u9a8c\u8bc1_https:\/\/bianchenghao6.com_\u3010Spring \u6559\u7a0b\u3011_\u7b2c1\u5f20
\n <\/p>\n

\n \u8ba9\u6211\u4eec\u63d0\u4ea4\u8868\u5355\u800c\u4e0d\u8f93\u5165\u5bc6\u7801\u3002\n <\/div>\n

Spring MVC\u9a8c\u8bc1_https:\/\/bianchenghao6.com_\u3010Spring \u6559\u7a0b\u3011_\u7b2c2\u5f20
\n <\/p>\n

\n \u73b0\u5728\uff0c\u6211\u4eec\u8f93\u5165\u5bc6\u7801\uff0c\u7136\u540e\u63d0\u4ea4\u8868\u683c\u3002\n <\/div>\n

Spring MVC\u9a8c\u8bc1_https:\/\/bianchenghao6.com_\u3010Spring \u6559\u7a0b\u3011_\u7b2c3\u5f20
\n

\n Spring MVC\u9a8c\u8bc1_https:\/\/bianchenghao6.com_\u3010Spring \u6559\u7a0b\u3011_\u7b2c4\u5f20
\n
\n <\/body>
\n<\/html><\/p>\n","protected":false},"excerpt":{"rendered":"Spring MVC\u9a8c\u8bc1zh-cn","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[105],"tags":[],"class_list":["post-544","post","type-post","status-publish","format-standard","hentry","category-bc_spring_jc"],"_links":{"self":[{"href":"https:\/\/bianchenghao6.com\/wp-json\/wp\/v2\/posts\/544"}],"collection":[{"href":"https:\/\/bianchenghao6.com\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/bianchenghao6.com\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/bianchenghao6.com\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/bianchenghao6.com\/wp-json\/wp\/v2\/comments?post=544"}],"version-history":[{"count":0,"href":"https:\/\/bianchenghao6.com\/wp-json\/wp\/v2\/posts\/544\/revisions"}],"wp:attachment":[{"href":"https:\/\/bianchenghao6.com\/wp-json\/wp\/v2\/media?parent=544"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/bianchenghao6.com\/wp-json\/wp\/v2\/categories?post=544"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/bianchenghao6.com\/wp-json\/wp\/v2\/tags?post=544"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}