مرحبًا بك في مثال Spring MVC. قبل فترة من الزمن في دليل Spring MVC، شرحت كيفية إنشاء تطبيق Spring MVC باستخدام Spring Tool Suite. ولكن اليوم، سأقوم بإنشاء تطبيق Spring MVC للعالم مرحبًا باستخدام مافن وإكليبس.
مثال Spring MVC
يستند Spring MVC إلى نموذج العرض-الموديل-التحكم. توضح الصورة أدناه معمارية 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. لنبدأ ونقوم بإنشاء مشروعنا من البداية.
إعداد مشروع مثال Spring MVC Eclipse
منذ أنها تطبيق ويب ونريد استخدام مافن لإدارة التبعيات، أولاً يجب علينا إنشاء تطبيق ويب ديناميكي ثم تحويله إلى مشروع مافن. تُظهر الصور أدناه كيفية القيام بذلك والحصول على هيكل مشروعنا الأساسي جاهزًا. انقر بزر الماوس الأيمن على نافذة مستكشف المشروع وانقر على “جديد -> مشروع ويب ديناميكي” كما هو موضح في الصورة أدناه. قم بتوفير الاسم كـ “spring-mvc-example” في الصفحة التالية للعنصر المنبثق، لا يجب تغيير بقية الأشياء.
في الصفحة التالية، قم بتوفير مجلد المصدر كـ “src/main/java”. قد تحتاج إلى إزالة مجلد “src” من القائمة قبل إضافة هذا.
المرحلة التالية هي صفحة الوحدة الويب، قم بتوفير جذر السياق للتطبيق كـ “spring-mvc-example” وتأكد من تحديد خيار “توليد وصف نشر web.xml”.
انقر على الانتهاء وسوف تحصل على مشروع ويب ديناميكي جديد في مستكشف المشروع الخاص بك في Eclipse.
تحويل مشروع الويب الديناميكي إلى مشروع Maven
نريد استخدام مافن لإدارة تبعياتنا لـ Spring MVC بسهولة. لذا دعونا نحول مشروعنا الويب إلى مافن. انقر بزر الماوس الأيمن على المشروع وحدد “تكوين -> تحويل إلى مشروع Maven”. ثم قدم تكوينات pom.xml كما هو موضح أدناه.
تم إعداد شيفرة هيكل مشروعنا التطبيقي على الويب باستخدام مافن. الآن يمكننا أن نبدأ في إجراء التغييرات عليه وإنشاء تطبيق مثال 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، ستلاحظ أن جميع الملفات تظهر في قسم تبعيات Maven.
Spring MVC DispatcherServlet كمتحكم أمامي
يجب أن نضيف إطار 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.
ملف تكوين الفول الخاص بمثال Spring MVC
الخطوة التالية هي إنشاء ملف تكوين فول 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
التعليق. - يخبر
context:component-scan
DispatcherServlet أين يبحث عن فئات المتحكم. InternalResourceViewResolver
تكوين حبة لتحديد موقع صفحات العرض واللاحقة المستخدمة. تعود طرق فئة المراقبة بالاسم بالصفحة العرض ثم يتم إضافة اللاحقة لمعرفة الصفحة العرض المستخدمة لتقديم الاستجابة.
فئة تحكم Spring MVC
لدينا فئة تحكم واحدة للرد على اثنين من عناوين URI – “/” لصفحة البداية و “/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 جاهز للنشر والاختبار.
نشر مشروع Eclipse لـ Spring MVC
يمكننا استخدام خيار تصدير Eclipse كملف WAR لننشره مباشرة إلى دليل webapps على أي خادم tomcat تعمل. ومع ذلك، يمكنك أيضًا استخدام سطر الأوامر لبناء المشروع ثم نسخه إلى دليل نشر سيرفلت المفضل لديك.
اختبار مثال Spring MVC
بمجرد نشر مشروع spring mvc، يمكننا الوصول إلى الصفحة الرئيسية على https://localhost:8080/spring-mvc-example/
. قم بتغيير منفذ تومكات وجذر السياق وفقًا لذلك.
هذا كل شيء بالنسبة لمثال Spring MVC، حاولت أن أبقيه بسيطًا قدر الإمكان. ولكن إذا واجهت أي مشاكل فلا تتردد في إخباري من خلال التعليقات وسأحاول مساعدتك. يمكنك تنزيل مشروع مثال Spring MVC النهائي من الرابط أدناه.
المراجع: الصفحة الرسمية
Source:
https://www.digitalocean.com/community/tutorials/spring-mvc-example