Java?Web開發(fā)常用框架Spring?MVC?Struts示例解析
引言
在Java Web開發(fā)中,通常使用Web框架簡化開發(fā)過程。以下是兩個(gè)常用的Java Web框架:Spring MVC和Apache Struts。
Spring MVC
Spring MVC是Spring框架的一部分,它是一個(gè)基于Java的企業(yè)級(jí)Web應(yīng)用程序開發(fā)框架。Spring MVC提供了一種基于MVC設(shè)計(jì)模式的簡化Web應(yīng)用程序開發(fā)的方法。它具有以下特點(diǎn):
- 靈活性:支持多種視圖技術(shù),包括JSP、Thymeleaf、FreeMarker等。
- 易于集成:與其他Spring模塊(如Spring Data、Spring Security等)無縫集成。
- 可擴(kuò)展性:提供了許多接口和抽象類,可以根據(jù)需求自定義功能。
一個(gè)簡單的Spring MVC示例
在這個(gè)例子中,我們將創(chuàng)建一個(gè)簡單的Spring MVC Web應(yīng)用程序,實(shí)現(xiàn)一個(gè)用戶登錄功能。
- 首先,創(chuàng)建一個(gè)Maven項(xiàng)目,并在
pom.xml
中添加Spring MVC依賴:
<dependencies> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>5.3.10</version> </dependency> </dependencies>
- 創(chuàng)建一個(gè)名為
LoginController
的控制器類:
import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestParam; @Controller public class LoginController { @GetMapping("/login") public String showLoginForm() { return "login"; } @PostMapping("/login") public String login(@RequestParam("username") String username, @RequestParam("password") String password, Model model) { if ("admin".equals(username) && "password".equals(password)) { model.addAttribute("username", username); return "welcome"; } else { model.addAttribute("errorMessage", "Invalid username or password"); return "login"; } } }
- 在
src/main/resources
目錄下創(chuàng)建一個(gè)名為application.properties
的配置文件,設(shè)置Spring MVC視圖解析器的前綴和后綴:
spring.mvc.view.prefix=/WEB-INF/views/ spring.mvc.view.suffix=.jsp
- 在
src/main/webapp/WEB-INF/views
目錄下創(chuàng)建login.jsp
和welcome.jsp
文件:
login.jsp
:
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>Login</title> </head> <body> <h1>Login</h1> <form action="login" method="post"> <label for="username">Username:</label> <input type="text" id="username" name="username" required> <label for="password">Password:</label> <input type="password" id="password" name="password" required> <input type="submit" value="Login"> </form> <p style="color:red;">${errorMessage}</p> </body> </html>
welcome.jsp
:
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>Welcome</title> </head> <body> <h1>Welcome, ${username}!</h1> </body> </html>
- 創(chuàng)建Spring MVC的配置類:
import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; import org.springframework.web.servlet.config.annotation.EnableWebMvc; import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; import org.springframework.web.servlet.view.InternalResourceViewResolver; @Configuration @EnableWebMvc @ComponentScan(basePackages = "com.example") public class WebConfig implements WebMvcConfigurer { @Bean public InternalResourceViewResolver viewResolver() { InternalResourceViewResolver resolver = new InternalResourceViewResolver(); resolver.setPrefix("/WEB-INF/views/"); resolver.setSuffix(".jsp"); return resolver; } }
- 創(chuàng)建Web應(yīng)用程序的初始化類:
import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer; public class AppInitializer extends AbstractAnnotationConfigDispatcherServletInitializer{ @Override protected Class<?>[] getRootConfigClasses() { return null; } @Override protected Class<?>[] getServletConfigClasses() { return new Class[]{WebConfig.class}; } @Override protected String[] getServletMappings() { return new String[]{"/"}; } }
現(xiàn)在,您可以運(yùn)行此Web應(yīng)用程序并訪問http://localhost:8080/login
,輸入正確的用戶名和密碼(如admin和password),然后看到歡迎頁面。
Apache Struts
Apache Struts是一個(gè)用于創(chuàng)建Java Web應(yīng)用程序的開源框架。Struts采用了MVC設(shè)計(jì)模式,具有以下特點(diǎn):
- 簡化開發(fā):提供了許多內(nèi)置功能,如表單驗(yàn)證、國際化等。
- 可擴(kuò)展性:支持?jǐn)r截器、插件等,可以根據(jù)需求擴(kuò)展功能。
- 社區(qū)支持:擁有龐大的用戶社區(qū)和豐富的文檔。
一個(gè)簡單的Struts示例
在這個(gè)例子中,我們將創(chuàng)建一個(gè)簡單的Struts Web應(yīng)用程序,實(shí)現(xiàn)一個(gè)用戶登錄功能。
- 創(chuàng)建一個(gè)Maven項(xiàng)目,并在
pom.xml
中添加Struts依賴:
<dependencies> <dependency> <groupId>org.apache.struts</groupId> <artifactId>struts2-core</artifactId> <version>2.5.26</version> </dependency> </dependencies>
- 創(chuàng)建一個(gè)名為
LoginAction
的Action類:
import com.opensymphony.xwork2.ActionSupport; public class LoginAction extends ActionSupport { private String username; private String password; // Getter and setter methods for username and password @Override public String execute() { if ("admin".equals(username) && "password".equals(password)) { return SUCCESS; } else { addActionError("Invalid username or password"); return INPUT; } } }
- 在
src/main/resources
目錄下創(chuàng)建一個(gè)名為struts.xml
的配置文件,定義Action和視圖:
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN" "http://struts.apache.org/dtds/struts-2.3.dtd"> <struts> <package name="default" extends="struts-default"> <action name="login" class="com.example.LoginAction"> <result name="input">/login.jsp</result> <result name="success">/welcome.jsp</result> </action> </package> </struts>
- 在
src/main/webapp
目錄下創(chuàng)建login.jsp
和welcome.jsp
文件:
login.jsp
:
<%@ taglib prefix="s" uri="/struts-tags" %> <%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>Login</title> </head> <body> <h1>Login</h1> <s:form action="login"> <s:textfield name="username" label="Username" required="true"/> <s:password name="password" label="Password" required="true"/> <s:submit value="Login"/> </s:form> <s:actionerror/> </body> </html>
welcome.jsp
:
<%@ taglib prefix="s" uri="/struts-tags" %> <%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>Welcome</title> </head> <body> <h1>Welcome, <s:property value="username"/>!</h1> </body> </html>
- 在
src/main/webapp/WEB-INF
目錄下創(chuàng)建一個(gè)名為web.xml
的配置文件,配置Struts Filter:
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" version="3.1"> <filter> <filter-name>struts2</filter-name> <filter-class>org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter</filter-class> </filter> <filter-mapping> <filter-name>struts2</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> </web-app>
現(xiàn)在,您可以運(yùn)行此Web應(yīng)用程序并訪問http://localhost:8080/login.jsp
,輸入正確的用戶名和密碼(如admin和password),然后看到歡迎頁面。
比較Spring MVC和Apache Struts
盡管Spring MVC和Apache Struts都是Java Web開發(fā)中常用的框架,但它們之間有一些區(qū)別:
- 集成:Spring MVC是Spring框架的一部分,與其他Spring模塊(如Spring Data、Spring Security等)無縫集成。而Struts是一個(gè)獨(dú)立的框架,需要與其他框架或庫一起使用。
- 靈活性:Spring MVC提供了更多的靈活性,支持多種視圖技術(shù),如JSP、Thymeleaf、FreeMarker等。而Struts主要支持JSP。
- 社區(qū)支持:Spring MVC由于其廣泛的應(yīng)用和強(qiáng)大的功能,擁有更大的社區(qū)支持和豐富的文檔。Struts框架的社區(qū)支持和文檔相對較少。
- 易用性:Spring MVC配置起來相對復(fù)雜一些,但提供了更多的自定義選項(xiàng)。Struts的配置相對簡單,但可能在某些情況下不夠靈活。
總之,根據(jù)項(xiàng)目需求和團(tuán)隊(duì)經(jīng)驗(yàn),選擇合適的框架是非常重要的。您可以根據(jù)以上比較,選擇最適合您的Java Web框架。在實(shí)際開發(fā)過程中,還可以嘗試其他Java Web框架,如JavaServer Faces(JSF)、Play Framework等。
在學(xué)習(xí)Spring MVC或Apache Struts時(shí),請務(wù)必參考官方文檔和示例項(xiàng)目,以便更好地理解框架的原理和用法?,F(xiàn)在,您已經(jīng)對兩個(gè)常用的Java Web框架有了一定的了解,可以開始進(jìn)行實(shí)際的項(xiàng)目開發(fā)了。祝您學(xué)習(xí)順利!
以上就是Java Web開發(fā)常用框架Spring MVC Struts示例解析的詳細(xì)內(nèi)容,更多關(guān)于Java Web框架SpringMVC Struts的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
IDEA下lombok安裝及找不到get,set的問題的解決方法
這篇文章主要介紹了IDEA下lombok安裝及找不到get,set的問題的解決方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-04-04JVM解密之解構(gòu)類加載與GC垃圾回收機(jī)制詳解
本文主要介紹了Java虛擬機(jī)(JVM)的內(nèi)存劃分、類加載機(jī)制以及垃圾回收機(jī)制,JVM的內(nèi)存劃分為程序計(jì)數(shù)器、棧、堆和方法區(qū),類加載機(jī)制包括類加載過程、加載器模型和雙親委派模型,垃圾回收機(jī)制主要包括標(biāo)記-清除、標(biāo)記-復(fù)制、標(biāo)記-整理和分代回收算法2025-02-02使用stream的Collectors.toMap()方法常見的問題及解決
這篇文章主要介紹了使用stream的Collectors.toMap()方法常見的問題及解決方案,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-03-03一文讀懂a(chǎn)va中的Volatile關(guān)鍵字使用
volatile關(guān)鍵字的作用保證了變量的可見性(visibility)。被volatile關(guān)鍵字修飾的變量,如果值發(fā)生了變更,其他線程立馬可見,避免出現(xiàn)臟讀的現(xiàn)象。這篇文章主要介紹了ava中的Volatile關(guān)鍵字使用,需要的朋友可以參考下2020-03-03java對象轉(zhuǎn)成byte數(shù)組的3種方法
這篇文章主要為大家詳細(xì)介紹了java對象轉(zhuǎn)成byte數(shù)組的3種方法,具有一定的參考價(jià)值,感興趣的朋友可以參考一下2018-06-06J2EE Servlet上傳文件到服務(wù)器并相應(yīng)顯示功能的實(shí)現(xiàn)代碼
這篇文章主要介紹了J2EE Servlet上傳文件到服務(wù)器,并相應(yīng)顯示,在文中上傳方式使用的是post不能使用get,具體實(shí)例代碼大家參考下本文2018-07-07