ברוך הבא לדוגמה של Spring MVC. לפני זמן ביקשתי ב־מדריך Spring MVC, הסברתי כיצד ליצור יישום Spring MVC באמצעות Spring Tool Suite. אך היום, אני איצור יישום פשוט של "שלום עולם" באמצעות Maven ו־Eclipse.
דוגמת Spring MVC
Spring MVC מבוססת על ארכיטקטורת Model-View-Controller. התמונה למטה מציגה את ארכיטקטורת Spring MVC ברמה גבוהה.
DispatcherServlet
הוא מחלקת הבקרה הקדמית שמקבלת את כל הבקשות ומתחילה לעבד אותן. עלינו להגדיר אותה בקובץ web.xml. המשימה שלה היא להעביר את הבקשה למחלקת הבקרה המתאימה ולשלוח את התגובה כאשר דפי התצוגה כבר עברו עיבוד. HomeController.java
תהיה המחלקת בקרה היחידה במערכת הדוגמה שלנו של Spring MVC. home.jsp
, user.jsp
הם דפי התצוגה בדוגמת השלום עולם של Spring MVC שלנו. User.java
תהיה המחלקה היחידה של המודל ביישום האינטרנט של דוגמת Spring MVC שלנו.
דוגמה ל־Spring MVC העולם שלום פרויקט Eclipse
התמונה למטה מציגה את פרויקט ה־Spring MVC שלנו ב־Eclipse. בואו נתחיל וניצור את הפרויקט שלנו מאפס.
הגדרת פרויקט Eclipse לדוגמה של Spring MVC
מכיוון שזה אפליקציית רשת ורוצים להשתמש במיוון עבור ניהול התלויות, נצטרך ליצור תחילה אפליקציה רשת דינמית ואז להמיר אותה לפרוייקט מיוון. בתמונות למטה מוצג כיצד לעשות זאת ולהכין את מבנה הפרוייקט שלנו. לחץ ימינה על חלון סיור הפרוייקט ולחץ על "חדש -> פרוייקט רשת דינמי" כפי שמוצג בתמונה למטה. ציין את השם כ "spring-mvc-example" בדף הפופ-אפ הבא, שאר הדברים לא יידרשו לשינוי.
בדף הבא, ציין את תיקיית המקור כ "src/main/java". יתכן ותצטרך להסיר את התיקייה "src" מהרשימה לפני הוספתה.
הבא הוא דף המודול הרשת, ציין את שורש ההקשר של האפליקציה כ "spring-mvc-example" וודא שסומן "Generate web.xml deployment descriptor".
לחץ על "סיום" ותקבל פרוייקט רשת דינמי חדש בסיור הפרוייקט שלך באקליפס.
המרת פרוייקט רשת דינמי לפרוייקט Maven
רוצים להשתמש ב־Maven כדי לנהל בקלות את תלותי ה־Spring MVC שלנו. אז בואו נהפוך את הפרוייקט שלנו ל־Maven. לחצו על הפרוייקט ובחרו "הגדרות -> המר לפרוייקט Maven". לאחר מכן נספק את ההגדרות של pom.xml כפי שמוצג למטה.
קוד תבנית פרוייקט האפליקציה הרשת Maven שלנו מוכן. עכשיו אנחנו יכולים להתחיל לבצע שינויים בו וליצור את אפליקציית ה־hello world שלנו של Spring MVC.
הוספת תלותי Spring MVC ל־pom.xml
עלינו להוסיף את תלותי spring-web ו־spring-webmvc ב־pom.xml, וגם להוסיף את תלותי servlet-api, jsp-api ו־jstl. הקובץ הסופי שלנו pom.xml יראה כך:
<project xmlns="https://maven.apache.org/POM/4.0.0" xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="https://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.journaldev.spring.mvc</groupId>
<artifactId>spring-mvc-example</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>war</packaging>
<name>Spring MVC Example</name>
<description>Spring MVC Hello World Example</description>
<!-- Add Spring Web and MVC dependencies -->
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>4.3.9.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>4.3.9.RELEASE</version>
</dependency>
<!-- Servlet -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.5</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>jsp-api</artifactId>
<version>2.1</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.6.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
<plugin>
<artifactId>maven-war-plugin</artifactId>
<version>3.0.0</version>
<configuration>
<warSourceDirectory>WebContent</warSourceDirectory>
</configuration>
</plugin>
</plugins>
<finalName>${project.artifactId}</finalName> <!-- added to remove Version from WAR file -->
</build>
</project>
שים לב להגדרת ה־finalName
בבניית הפרויקט, כך ששם קובץ ה־WAR שלנו לא יכיל פרטי גרסה. כאשר הפרויקט נבנה על ידי Eclipse, תשים לב שכל ה־JARs מופיעים בקטע התלויות Maven.
ה־DispatcherServlet של Spring MVC כקונטרולר קדמי
עלינו להוסיף את מסגרת ה־Spring MVC לאפליקציה האינטרנטית שלנו, לכן עלינו להגדיר את ה־DispatcherServlet
בקובץ ה־web.xml כפי שמוצג למטה.
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance" xmlns="https://java.sun.com/xml/ns/javaee" xsi:schemaLocation="https://java.sun.com/xml/ns/javaee https://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
<display-name>spring-mvc-example</display-name>
<!-- Add Spring MVC DispatcherServlet as front controller -->
<servlet>
<servlet-name>spring</servlet-name>
<servlet-class>
org.springframework.web.servlet.DispatcherServlet
</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/spring-servlet.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>spring</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>
ה־init-param של contextConfigLocation
משמש לספק את המיקום של קובץ התצורה של פעולות ה־spring bean.
דוגמא לקובץ התצורה של Bean ב־Spring MVC
השלב הבא הוא ליצור קובץ תצורה של Bean ב־Spring בשם spring-servlet.xml
כפי שמוצג למטה.
<?xml version="1.0" encoding="UTF-8"?>
<beans:beans xmlns="https://www.springframework.org/schema/mvc"
xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance" xmlns:beans="https://www.springframework.org/schema/beans"
xmlns:context="https://www.springframework.org/schema/context"
xsi:schemaLocation="https://www.springframework.org/schema/mvc https://www.springframework.org/schema/mvc/spring-mvc.xsd
https://www.springframework.org/schema/beans https://www.springframework.org/schema/beans/spring-beans.xsd
https://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd">
<!-- DispatcherServlet Context: defines this servlet's request-processing
infrastructure -->
<!-- Enables the Spring MVC @Controller programming model -->
<annotation-driven />
<context:component-scan base-package="com.journaldev.spring" />
<!-- Resolves views selected for rendering by @Controllers to .jsp resources
in the /WEB-INF/views directory -->
<beans:bean
class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<beans:property name="prefix" value="/WEB-INF/views/" />
<beans:property name="suffix" value=".jsp" />
</beans:bean>
</beans:beans>
יש שלוש הגדרות חשובות.
annotation-driven
אומר ל־DispatcherServlet לחפש אחרי קבצי קוד בעזרת ההסוואה@Controller
annotation.context:component-scan
אומר ל־DispatcherServlet איפה לחפש אחרי קבצי הקוד של הקונטרולר.InternalResourceViewResolver
הגדרת פעולת התצוגה של הפורים כדי לציין מיקום של דפי תצוגה וסיומת בשימוש. שיטות הפעולה של מחלקת הבקר מחזירות את שם דף התצוגה ואז סיומת מתווספת כדי לקבוע את דף התצוגה שיש להשתמש בו לתגובה.
מחלקת בקר Spring MVC
יש לנו מחלקת בקר יחידה להגיב לשני URIs – "/" לדף הבית ו"/user" לדף המשתמש.
package com.journaldev.spring.controller;
import java.text.DateFormat;
import java.util.Date;
import java.util.Locale;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import com.journaldev.spring.model.User;
@Controller
public class HomeController {
/**
* Simply selects the home view to render by returning its name.
*/
@RequestMapping(value = "/", method = RequestMethod.GET)
public String home(Locale locale, Model model) {
System.out.println("Home Page Requested, locale = " + locale);
Date date = new Date();
DateFormat dateFormat = DateFormat.getDateTimeInstance(DateFormat.LONG, DateFormat.LONG, locale);
String formattedDate = dateFormat.format(date);
model.addAttribute("serverTime", formattedDate);
return "home";
}
@RequestMapping(value = "/user", method = RequestMethod.POST)
public String user(@Validated User user, Model model) {
System.out.println("User Page Requested");
model.addAttribute("userName", user.getUserName());
return "user";
}
}
שים לב שמסיבות פשטות, לא השתמשתי במסגרת יומולוג כמו log4j.
מחלקת מודל Spring MVC
יש לנו מחלקת מודל פשוטה עם משתנה יחיד ושיטות getter-setter שלו. זו מחלקת POJO פשוטה.
package com.journaldev.spring.model;
public class User {
private String userName;
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
}
דפי תצוגה Spring MVC
יש לנו שני דפי תצוגה כפי שמוגדר למטה. home.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib uri="https://java.sun.com/jsp/jstl/core" prefix="c"%>
<%@ page session="false"%>
<html>
<head>
<title>Home</title>
</head>
<body>
<h1>Hello world!</h1>
<P>The time on the server is ${serverTime}.</p>
<form action="user" method="post">
<input type="text" name="userName"><br> <input
type="submit" value="Login">
</form>
</body>
</html>
user.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "https://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>User Home Page</title>
</head>
<body>
<h3>Hi ${userName}</h3>
</body>
</html>
שימו לב ש- Spring MVC טופלת את המיפוי של משתני טופס למשתני מודל, זה מדוע יש לנו את אותו שם משתנה בשני המקומות. זהו, דוגמת הפרוייקט שלנו ב- spring mvc מוכנה להיות מיושמת ולבדוק.
הפרוייקט פיתוח Spring MVC ב- Eclipse
ניתן להשתמש באפשרות ייצוא כקובץ WAR של Eclipse כדי להמשיך ולפרסם אותו ישירות לתיקיית ה- webapps של שרת tomcat שפעיל. עם זאת, תוכלו גם להשתמש בשורת פקודה כדי לבנות את הפרוייקט ואז להעתיק אותו אל תיקיית הפרסום של המתג שאתם מעדיפים.
דוגמת הבדיקה של Spring MVC
פעם שהפרויקט של Spring MVC מופעל, אנו יכולים לגשת לדף הבית בקישור הבא: https://localhost:8080/spring-mvc-example/
. יש לשנות את פורט הפורט של Tomcat וה- context-root להתאם.
וזהו, זה הכול לדוגמה של Spring MVC. ניסיתי לשמור על זה כפשוט ככל האפשר. אם יש בעיה, אנא הודיע לי דרך תגובות ואנסה לעזור. ניתן להוריד את פרויקט הדוגמה של Spring MVC הסופי מהקישור למטה.
הורד פרויקט דוגמה של Spring MVC
הסברים: עמוד רשמי
Source:
https://www.digitalocean.com/community/tutorials/spring-mvc-example