Heim >Java >javaLernprogramm >Eine kurze Einführung in Spring MVC
Spring MVC ist ein Nachfolgeprodukt von SpringFrameWork und wurde in Spring Web Flow integriert. Heute beginnen wir mit dem Schreiben einer Spring MVC HelloWorld. Lassen Sie uns sehen, wie man eine Spring MVC-Umgebung einrichtet und das Programm ausführt.
Was ist Spring MVC
Spring MVC ist ein Nachfolgeprodukt von SpringFrameWork und wurde in Spring Web Flow integriert. Das Spring-Framework bietet voll funktionsfähige MVC-Module zum Erstellen von Webanwendungen. Wenn Sie die steckbare MVC-Architektur von Spring verwenden und Spring für die WEB-Entwicklung verwenden, können Sie das SpringMVC-Framework von Spring verwenden oder andere MVC-Entwicklungsframeworks wie Struts1, Struts2 usw. integrieren.
Heute beginnen wir mit dem Schreiben einer Spring MVC HelloWorld. Lassen Sie uns sehen, wie man eine Spring MVC-Umgebung einrichtet und das Programm ausführt.
Softwareparameter
Eclipse: Mars.1 Release (4.5.1)
Tomcat: 8.0.36
JDK: 1.8.0_60
Spring-Framework: 4.0.4.RELEASE
Neues Projekt
Datei-Neu -Andere, wählen Sie Dynamisches Webprojekt
Nachdem das Projekt erstellt wurde, sieht die Verzeichnisstruktur wie folgt aus:
JAR-Paket importieren
Wir entwickeln basierend auf dem Spring MVC-Framework und müssen uns auf das folgende Spring-JAR-Paket verlassen:
spring-aop-4.0.4.RELEASE.jar spring-beans-4.0.4.RELEASE.jar spring-context-4.0.4.RELEASE.jar spring-core-4.0.4.RELEASE.jar spring-expression-4.0.4.RELEASE.jar spring-web-4.0.4.RELEASE.jar spring-webmvc-4.0.4.RELEASE.jar commons-logging-1.1.1.jar(用来打印log)
Erstellen Sie einen neuen lib-Ordner im WEB-INF-Verzeichnis und legen Sie das obige JAR-Paket darin ab.
Konfigurationsdateien und Code schreiben
web.xml(WEB-INF下) <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5"> <!-- 配置DispatchcerServlet --> <servlet> <servlet-name>springDispatcherServlet</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <!-- 配置Spring mvc下的配置文件的位置和名称 --> <init-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:springmvc.xml</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>springDispatcherServlet</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping> </web-app>
Hinweis: 1. Zeile 12- 15. Der Speicherort und der Name der Konfigurationsdatei, die zum Konfigurieren von spring mvc verwendet wird. Hier wird eine neue Konfigurationsdatei von springmvc.xml erstellt
2. Wir können auch keine neue springmvc.xml erstellen, sondern verwenden das Standardformat. Das Konfigurationsdateiformat ist /WEB-INF/[servlet-name]-servlet.xml, was springDispatcherServlet-servlet.xml
3 entspricht. Die Servlet-Zuordnung stellt hier den Abfangmodus dar, Hier ist „/“, was darauf hinweist, dass alle Anforderungen abgefangen werden, einschließlich statischer Ressourcen wie HTML, JS, JPG usw. Zu diesem Zeitpunkt wird beim Zugriff auf statische Ressourcen ein 404-Fehler gemeldet. Wie man das Problem löst, wird später vorgestellt
Springmvc.xml (unter scr)
Erstellen Sie eine neue springmvc.xml im src-Verzeichnis
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xmlns:mvc="http://www.springframework.org/schema/mvc" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd"> <!-- 配置自动扫描的包 --> <context:component-scan base-package="com.jackie.springmvc"></context:component-scan> <!-- 配置视图解析器 如何把handler 方法返回值解析为实际的物理视图 --> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name = "prefix" value="/WEB-INF/views/"></property> <property name = "suffix" value = ".jsp"></property> </bean> </beans>
Hinweis: 1. Zeile12 stellt den Bereich der Federüberwachung dar, der sich unter com.jackie.springmvc befindet
2. Zeile15-18 fügt einen Ansichtsparser zum Platzieren im Controller hinzu Die Struktur des Handlers wird in die tatsächliche physische Ansicht geparst. Dies muss mit der Controller-Klasse geparst werden. Weitere Informationen finden Sie weiter unten.
HelloWorld.java(com.jackie.springmvc.handlers下) package com.jackie.springmvc.handlers; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; @Controller public class HelloWorld { /** * 1. 使用RequestMapping注解来映射请求的URL * 2. 返回值会通过视图解析器解析为实际的物理视图, 对于InternalResourceViewResolver视图解析器,会做如下解析 * 通过prefix+returnVal+suffix 这样的方式得到实际的物理视图,然后会转发操作 * "/WEB-INF/views/success.jsp" * @return */ @RequestMapping("/helloworld") public String hello(){ System.out.println("hello world"); return "result"; } }
Hinweis:
1. Zuerst vor der Klasse hinzufügen Die Annotation „Controller“ gibt an, dass es sich um einen Spring-Controller handelt. Hier wird eine Methode hello()
geschrieben. Über der hello-Methode befindet sich eine @RequestMapping, die zum Abgleichen des Pfads verwendet wird Die Anforderung lautet beispielsweise „http://localhost:8080/springTest/springmvc/helloworld“, wenn der Tomcat-Dienst gestartet und diese URL in den Browser eingegeben wird, sofern vorhanden Wenn Sie einen Haltepunkt in dieser Methode haben, wird in diese Methode gesprungen.
3. Das Ergebnis dieser Rückgabe ist nicht zufällig. Die zurückgegebene Zeichenfolge stimmt mit Zeile 15-18 in springmvc.xml überein. Das Präfix und das Suffix werden in springmvc.xml deklariert und hier eingeklemmt Zwischen den beiden befindet sich die hier zurückgegebene Zeichenfolge, sodass wir nach der Ausführung dieser Methode den Anforderungsressourcenpfad „/WEB-INF/views/success.jsp“ erhalten können. Diese success.jsp muss von uns erstellt werden
Index.jsp (unter WebContent)
Bevor wir eine neue success.jsp erstellen, müssen wir einen Eingang haben, der hier index.jsp ist
<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> <title>Insert title here</title> </head> <body> <a href="helloworld" rel="external nofollow" >hello world</a> </body> </html>
Beim Zugriff auf index.jsp wird ein Hyperlink auf der Seite angezeigt. Nach dem Klicken auf den Hyperlink springt die Adresse in der URL zu „http://localhost:8080/springTest“ /index.jsp „springt zu „http://localhost:8080/springTest/helloworld“ und diese URL-Anfrage wird in die Hello-Methode in HelloWorld eingegeben, da sie mit „/helloworld“ in dieser Methode übereinstimmt.
Success.jsp (unter WEB-INF/views)
Diese Seite ist die entsprechende Seite, nachdem die Anfrage erfolgreich war
<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> <title>Insert title here</title> </head> <body> <h4>Success Page</h4> </body> </html>
Zu diesem Zeitpunkt haben wir die Entwicklung des HelloWorld-Programms basierend auf dem Spring MVC-Framework abgeschlossen, einschließlich der abhängigen JAR-Pakete, Konfigurationsdateien, Schreiben von Controller-Code und Schreiben von Anzeigeseiten usw.
除此以外,再介绍下整个配置过程中遇到的一些小问题:
1. tomcat服务器的添加
从前面的介绍可以看出,我们的程序是通过浏览器发请求来获取想要的页面,那么这里就免不了要有一个web服务器,这里就是tomcat。
首先你需要下载个tomcat,然后在eclipse->windows->preference->servers中绑定这个tomcat服务器;
其次你需要在你新建的spring mvc项目中添加tomcat的支持,否则在新建的jsp文件中会提示报错“The superclass javax.servlet.http.HttpServlet was not found on the Java Build Path”
右键项目->build path->configure build path->add library->server runtime, 选择你的tomcat即可
有了tomcat服务器,你就可以在index.jsp上右键run on server,选择你的tomcat服务器,这样就可以启动tomcat服务,帮助你完成网页的请求和响应操作。
2. spring mvc如何访问静态资源
关于使用spring mvc处理静态资源,比如html(发现之前的springmvc.xml中16244cc5c17ada7705a50328620bea5adde4123f2ed5a21d0bae333af89830f9定义为jsp结尾就可以成功跳转,但是如果改为html并在web-inf下面新建了html文件后,并将suffix这里的".jsp"改为".html",无法跳转到想要的html页面,并且给出404错误,同时console给出错误信息为:No mapping found for HTTP request with URI [/springTest/WEB-INF/views/result.html] in DispatcherServlet)
最后发现是需要让spring明确要处理静态资源,原来的web.xml中只有
<servlet-mapping> <servlet-name>springDispatcherServlet</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping>
其匹配的都是controller中类似@RequestMapping("/springmvc/helloworld")这样的注解配置的请求,而对于类似html/css/jpg等资源的访问就会得不到,所以需要在web.xml中加入以下类型的支持
<servlet-mapping> <servlet-name>default</servlet-name> <url-pattern>*.css</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>default</servlet-name> <url-pattern>*.gif</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>default</servlet-name> <url-pattern>*.jpg</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>default</servlet-name> <url-pattern>*.js</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>default</servlet-name> <url-pattern>*.html</url-pattern> </servlet-mapping>
这样就可以保证spring 能够拦截并处理静态资源
这里将HelloWorld.java中的hello方法改为:
@RequestMapping("/helloworld") public String hello(){ System.out.println("hello world"); return "Jackie"; }
Springmvc.xml改为:
class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name = "prefix" value="/WEB-INF/views/"></property> <property name = "suffix" value = ".jpg"></property> </bean>
Das obige ist der detaillierte Inhalt vonEine kurze Einführung in Spring MVC. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!