Spring MVC学习指南(第2版)
Spring MVC学习指南(第2版)
IBM 2004
IBM
Spring MVC Spring Web Spring MVC MVC
Model-View-Controller
Web Swing JavaFX
HTTP Web
W3C HTTP HTTP HTTP 0.9
HTTP 1.0 HTTP 1.1 HTTP 1.1 RFC 2616 HTTP 1.1
HTTP 2015 5 HTTP/2 1.1
HTTP HTTP HTTP/2 HTTP2
1.1 HTTP
URL
HTTP URL
http://google.com http://173.194.46.35
ping IP
IP
IP example.com example.org
HTTP 80 80 Web
Web 80 Tomcat
8080
2
localhost
context
key/value
& value value
/
HTTP
HTTP
HTTP 3
1 URI /
HTTP
3
POST URI /examples/default.jsp / HTTP/1.1
URI /
URL URI http://www.ietf.org/rfc/rfc2396.txt
HTTP
header / CRLF
HTTP HTTP
CRLF HTTP 4
lastName=Blanks&firstName=Mike
HTTP
HTTP
HTTP HTTP 3
HTTP
4
HTTP HTTP HTTP 1.1
200
HTTP HTTP
HTTP HTML HTTP
CRLF
200 Web
Web 401
405 HTTP http://www.w3.
org/Protocols/rfc2616/rfc2616-sec10.html
Servlet Web
Web
Servlet
JavaServer Pages JSP Servlet
Spring MVC Struct 2 JSF Servlet JSP
Servlet Servlet Java Servlet
Servlet Web
Servlet 3.1 JSR Java Specification Request 340
http://jcp.org/en/jsr/detail?id=340 Java 6 JSP 2.3 JSR
245 http://jcp.org/en/jsr/detail?id=245 Java
Java Java 7 A Beginner s Tutorial fourth Edition
5
Servlet
1 Servlet/JSP
6
Servlet/JSP Tomcat Jetty Java
EJB JMS
Maven
Gradle
Java
Maven Gradle Spring
Maven Maven/Gradle
Maven/Gradle
4.2.5 zip
7
x.y.z Spring
zip Java
libs Spring jar
Spring
Spring Git Spring
8
1 Spring
4 MVC
Spring MVC 2.5
5 Spring MVC
8 JSP 2.0
JSP JSP
EL Java Bean
9 JSTL JSP
map XML
10 Spring MVC
11
12
A Tomcat Tomcat
E Spring MVC
2
2.6 ......................................31
...............................1
2.7 ..............................................38
1
4.3.2 ...........................56 5.3.4 Service ..........................84
5.2 ..................................72
.....................................104
5.2.1 ...........................73
2
8.2.3 ......................... 119 8.9.7 count ................................131
8.3 JavaBean ............................120 8.9.8 min ...................................131
8.4 EL ..............................121 8.9.9 max ..................................131
8.4.1 pageContext .....................121 8.9.10 map ................................131
8.4.2 initParam ..........................123 8.9.11 filter ................................132
8.4.3 param ...............................123 8.9.12 forEach...........................132
8.4.4 paramValues .....................123 8.10 ..............................132
8.4.5 header...............................123 8.10.1 HTML ..........132
8.4.6 headerValues ....................124 8.10.2 String.join() ...........134
8.4.7 cookie...............................124 8.11 ..............................134
8.4.8 applicationScope 8.12 ..............................134
3
9.5.1 forEach ....................148 10.2 Spring MVC ...173
4
.............................. 211 ....................................242
13.3.3
.... 246
...........215
5
C.10 HTML .................... 271 E.1.1 .........................305
6
2.3 2 Servlet
import javax.servlet.http.HttpServletResponse;
import appdesign1.action.SaveProductAction;
import appdesign1.form.Product Form;
import appdesign1.model.Product;
import java.math.BigDecimal;
@Override
public void doGet(HttpServletRequest request,
HttpServletResponse response)
throws IOException, ServletException {
process(request, response);
}
@Override
public void doPost(HttpServletRequest request,
HttpServletResponse response)
throws IOException, ServletException {
process(request, response);
}
17
2 2 MVC
// create model
Product product = new Product();
product.setName(productForm.getName());
product.setDescription(productForm.getDescription());
try {
product.setPrice(new Bigdecimal(productForm.getPrice()));
} catch (NumberFormatException e) {
}
// execute action method
SaveProductAction saveProductAction =
new SaveProductAction();
saveProductAction.save(product);
if (dispatchUrl != null) {
RequestDispatcher rd =
request.getRequestDispatcher(dispatchUrl);
rd.forward(request, response);
}
}
}
process
1 save-product 3 name
description price
18
2.3 2 Servlet
3 JSP
process action if
// execute an action
if ("input-product".eauals(action))) {
// no action class, just forward
dispatchUrl = "/jsp/ProductForm.jsp";
} else if ("save-product".eauals(action)) {
// instantiate action class
// create model
Product product = new Product();
product.setName(productForm.getName());
product.setDescription(productForm.getDescription());
try {
product.setPrice(new BigDecimal(productForm.getPrice()));
} catch (NumberFormatException e) {
}
// execute action method
SaveProductAction saveProductAction =
new SaveProductAction();
saveProductAction.save(product);
Product HttpServletRequest
// store action in a scope variable for the view
request.setAttribute("product", product);
19
3.4 Spring MVC
<servlet>
<servlet-name>springmvc</servlet-name>
<servlet-class>
org.springframework.web.servlet.DispatcherServlet
</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<!-- map all requests to the DispatcherServlet -->
<url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>
<bean name="/input-produrt"
class="controller.InputProductController"/>
<bean name="/save-product"
class="controller.SaveProductController"/>
</beans>
43
6
<bean id="viewResolver"
class="org.springframework.web.servlet.view.
InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/jsp/" />
<property name="suffix" value=".jsp" />
</bean>
<bean id="conversionService"
class="org.springframework.format.support.
FormattingConversionServiceFactoryBean">
<property name="formatterRegistrars">
<set>
<bean class="formatter.MyFormatterRegistrar">
<constructor-arg type="java.lang.String"
value="MM-dd-yyyy" />
</bean>
</set>
</property>
</bean>
</beans>
102