Java?Web開(kāi)發(fā)常用框架Spring?MVC?Struts示例解析
引言
在Java Web開(kāi)發(fā)中,通常使用Web框架簡(jiǎn)化開(kāi)發(fā)過(guò)程。以下是兩個(gè)常用的Java Web框架:Spring MVC和Apache Struts。
Spring MVC
Spring MVC是Spring框架的一部分,它是一個(gè)基于Java的企業(yè)級(jí)Web應(yīng)用程序開(kāi)發(fā)框架。Spring MVC提供了一種基于MVC設(shè)計(jì)模式的簡(jiǎn)化Web應(yīng)用程序開(kāi)發(fā)的方法。它具有以下特點(diǎn):
- 靈活性:支持多種視圖技術(shù),包括JSP、Thymeleaf、FreeMarker等。
- 易于集成:與其他Spring模塊(如Spring Data、Spring Security等)無(wú)縫集成。
- 可擴(kuò)展性:提供了許多接口和抽象類(lèi),可以根據(jù)需求自定義功能。
一個(gè)簡(jiǎn)單的Spring MVC示例
在這個(gè)例子中,我們將創(chuàng)建一個(gè)簡(jiǎn)單的Spring MVC Web應(yīng)用程序,實(shí)現(xiàn)一個(gè)用戶(hù)登錄功能。
- 首先,創(chuàng)建一個(gè)Maven項(xiàng)目,并在
pom.xml中添加Spring MVC依賴(lài):
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.3.10</version>
</dependency>
</dependencies>- 創(chuàng)建一個(gè)名為
LoginController的控制器類(lèi):
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的配置類(lèi):
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)用程序的初始化類(lèi):
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)用程序并訪問(wèn)http://localhost:8080/login,輸入正確的用戶(hù)名和密碼(如admin和password),然后看到歡迎頁(yè)面。
Apache Struts
Apache Struts是一個(gè)用于創(chuàng)建Java Web應(yīng)用程序的開(kāi)源框架。Struts采用了MVC設(shè)計(jì)模式,具有以下特點(diǎn):
- 簡(jiǎn)化開(kāi)發(fā):提供了許多內(nèi)置功能,如表單驗(yàn)證、國(guó)際化等。
- 可擴(kuò)展性:支持?jǐn)r截器、插件等,可以根據(jù)需求擴(kuò)展功能。
- 社區(qū)支持:擁有龐大的用戶(hù)社區(qū)和豐富的文檔。
一個(gè)簡(jiǎn)單的Struts示例
在這個(gè)例子中,我們將創(chuàng)建一個(gè)簡(jiǎn)單的Struts Web應(yīng)用程序,實(shí)現(xiàn)一個(gè)用戶(hù)登錄功能。
- 創(chuàng)建一個(gè)Maven項(xiàng)目,并在
pom.xml中添加Struts依賴(lài):
<dependencies>
<dependency>
<groupId>org.apache.struts</groupId>
<artifactId>struts2-core</artifactId>
<version>2.5.26</version>
</dependency>
</dependencies>- 創(chuàng)建一個(gè)名為
LoginAction的Action類(lèi):
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)用程序并訪問(wèn)http://localhost:8080/login.jsp,輸入正確的用戶(hù)名和密碼(如admin和password),然后看到歡迎頁(yè)面。
比較Spring MVC和Apache Struts
盡管Spring MVC和Apache Struts都是Java Web開(kāi)發(fā)中常用的框架,但它們之間有一些區(qū)別:
- 集成:Spring MVC是Spring框架的一部分,與其他Spring模塊(如Spring Data、Spring Security等)無(wú)縫集成。而Struts是一個(gè)獨(dú)立的框架,需要與其他框架或庫(kù)一起使用。
- 靈活性:Spring MVC提供了更多的靈活性,支持多種視圖技術(shù),如JSP、Thymeleaf、FreeMarker等。而Struts主要支持JSP。
- 社區(qū)支持:Spring MVC由于其廣泛的應(yīng)用和強(qiáng)大的功能,擁有更大的社區(qū)支持和豐富的文檔。Struts框架的社區(qū)支持和文檔相對(duì)較少。
- 易用性:Spring MVC配置起來(lái)相對(duì)復(fù)雜一些,但提供了更多的自定義選項(xiàng)。Struts的配置相對(duì)簡(jiǎn)單,但可能在某些情況下不夠靈活。
總之,根據(jù)項(xiàng)目需求和團(tuán)隊(duì)經(jīng)驗(yàn),選擇合適的框架是非常重要的。您可以根據(jù)以上比較,選擇最適合您的Java Web框架。在實(shí)際開(kāi)發(fā)過(guò)程中,還可以嘗試其他Java Web框架,如JavaServer Faces(JSF)、Play Framework等。
在學(xué)習(xí)Spring MVC或Apache Struts時(shí),請(qǐng)務(wù)必參考官方文檔和示例項(xiàng)目,以便更好地理解框架的原理和用法?,F(xiàn)在,您已經(jīng)對(duì)兩個(gè)常用的Java Web框架有了一定的了解,可以開(kāi)始進(jìn)行實(shí)際的項(xiàng)目開(kāi)發(fā)了。祝您學(xué)習(xí)順利!
以上就是Java Web開(kāi)發(fā)常用框架Spring MVC Struts示例解析的詳細(xì)內(nèi)容,更多關(guān)于Java Web框架SpringMVC Struts的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
詳解Spring事件發(fā)布與監(jiān)聽(tīng)機(jī)制
Spring提供了ApplicationContext事件機(jī)制,可以發(fā)布和監(jiān)聽(tīng)事件,這個(gè)特性非常有用。Spring內(nèi)置了一些事件和監(jiān)聽(tīng)器,例如在Spring容器啟動(dòng)前,Spring容器啟動(dòng)后,應(yīng)用啟動(dòng)失敗后等事件發(fā)生后,監(jiān)聽(tīng)在這些事件上的監(jiān)聽(tīng)器會(huì)做出相應(yīng)的響應(yīng)處理2021-06-06
簡(jiǎn)單講解java中throws與throw的區(qū)別
這篇文章主要介紹了簡(jiǎn)單講解java中throws與throw的區(qū)別,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-07-07
Java通過(guò)接口實(shí)現(xiàn)匿名類(lèi)的實(shí)例代碼
這篇文章介紹了Java通過(guò)接口實(shí)現(xiàn)匿名類(lèi)的實(shí)例代碼,有需要的朋友可以參考一下2013-10-10
java中獲取xml文件的某個(gè)配置節(jié)點(diǎn)內(nèi)容方式
這篇文章主要介紹了java中獲取xml文件的某個(gè)配置節(jié)點(diǎn)內(nèi)容方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-06-06
深入解析Java類(lèi)加載的案例與實(shí)戰(zhàn)教程
本篇文章主要介紹Tomcat類(lèi)加載器架構(gòu),以及基于類(lèi)加載和字節(jié)碼相關(guān)知識(shí),去分析動(dòng)態(tài)代理的原理,對(duì)Java類(lèi)加載相關(guān)知識(shí)感興趣的朋友一起看看吧2022-05-05
springcloud如何使用Feign后臺(tái)內(nèi)部傳遞MultipartFile

