【Struts】:Struts1簡介及第一個程式碼示例
在介紹Struts框架之前,先來了解一下Web開發的兩種模式,這兩種模式自從JSP開發流行起來,就一直在業界,爭論不休,那就是我之前在部落格:《JSP技術中的Model1和Model2開發模式》中介紹的JSP
Model1和JSP Model2.因此這裡就不再對這塊內容進行贅述了。
通過了解JSP的Model1 和Model2,想必大家在心裡都有了自己的選擇,相比較而言,Model2比Model1更加的方便和和簡潔,這裡,我們不去說哪種架構更好,在不同的應用場景中,使用恰到好處的技術才是最好的選擇,並不是說框架本身有多麼好,脫離了應用場景,我們是無法清晰的認識到技術框架的優勢的。但是,通常意義上來說,Model2引入的MVC模式是一個有偉大思想意義的東西,這是眾所周知的。
而我們今天所要討論的Struts框架正是MVC思想最佳實踐的一個經典產品。雖然Struts1在現在已經逐漸退出業界舞臺,但是其中的思想精髓還是值得我們去學習和研究的,首先我們來看一下Struts的框架概覽圖,以便於大家對Struts有一個全域性的認識和了解:
接著我們來分析如何實現第一個Struts框架的示例程式碼,首先我們要明白Struts框架的執行流程,先畫個圖來捋捋我們都需要建立哪些檔案,以及各個檔案之間的關聯關係,如下圖所示:
搞清楚了怎麼弄我們就要開始動手了。
第一步:引入Struts框架,搭建開發環境
從分析來看,我們需要一個ActionForm,一個Action,三個JSP頁面,外加一個業務邏輯類UserManager類,用來處理登入使用者的資訊並且返回結果。
小結一下:
Struts1框架是對MVC模式的一個最佳實踐,自她出道以來,為廣大程式開發人員所鍾愛,並且為我們的程式開發工作帶來了非常多的便利,提高了開發效率,實在是一個非常經典的產品,但是之後出現的Struts2,讓其逐漸失寵,漸漸的淡出了我們的視線,雖然現在已經鮮有人用,但是她作為一個歷史悠久的MVC框架,影響了不計其數的開發者,某種意義上說,很多人就是通過Struts的學習而認識MVC的,感謝Struts1為程式開發做出的貢獻,一路走好!
通過了解JSP的Model1 和Model2,想必大家在心裡都有了自己的選擇,相比較而言,Model2比Model1更加的方便和和簡潔,這裡,我們不去說哪種架構更好,在不同的應用場景中,使用恰到好處的技術才是最好的選擇,並不是說框架本身有多麼好,脫離了應用場景,我們是無法清晰的認識到技術框架的優勢的。但是,通常意義上來說,Model2引入的MVC模式是一個有偉大思想意義的東西,這是眾所周知的。
而我們今天所要討論的Struts框架正是MVC思想最佳實踐的一個經典產品。雖然Struts1在現在已經逐漸退出業界舞臺,但是其中的思想精髓還是值得我們去學習和研究的,首先我們來看一下Struts的框架概覽圖,以便於大家對Struts有一個全域性的認識和了解:
![](https://i.iter01.com/images/f2e52a8400dfcb49e806ae206ee28274df174ff97aa967d12442230f76a4d00f.jpg)
![](https://i.iter01.com/images/2821bfd21f35d946006995240325cd17fadaed372c41214b2a237ca525b58c50.jpg)
第一步:引入Struts框架,搭建開發環境
開啟Myeclipse,新建一個Java Web Project,然後將Struts相關的jar包拷貝到Project的WEB-INF/lib目錄下;
然後在web.xml檔案裡面配置ActionServlet,並且複製一個struts-config.xml檔案,放到原始碼檔案src下或者是WEB-INF下(其實放在哪裡無所謂,只要在配置檔案中把檔案的路徑配置好就可以)。web.xml檔案的配置資訊如下:
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4"
xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<servlet>
<servlet-name>action</servlet-name>
<servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
<init-param>
<param-name>config</param-name>
<param-value>/WEB-INF/struts-config.xml</param-value>
</init-param>
<init-param>
<param-name>debug</param-name>
<param-value>2</param-value>
</init-param>
<init-param>
<param-name>detail</param-name>
<param-value>2</param-value>
</init-param>
<load-on-startup>2</load-on-startup>
</servlet>
<!-- Standard Action Servlet Mapping -->
<servlet-mapping>
<servlet-name>action</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
</web-app>
第二步:建立並且編寫相應的程式碼檔案從分析來看,我們需要一個ActionForm,一個Action,三個JSP頁面,外加一個業務邏輯類UserManager類,用來處理登入使用者的資訊並且返回結果。
LoginAction的程式碼(需要繼承Action類)
/**
* 登入Action
* 負責取得表單資料、呼叫業務邏輯、返回轉向資訊
*
* @author Administrator
*
*/
public class LoginAction extends Action {
@Override
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws Exception {
// LoginActionForm laf = (LoginActionForm)form;
// String username = laf.getUsername();
// String password = laf.getPassword();
// if ("admin".equals(username) && "admin".equals(password)) {
// //登入成功
// return mapping.findForward("success");
// }else {
// //登入失敗
// return mapping.findForward("error");
// }
LoginActionForm laf = (LoginActionForm)form;
String username = laf.getUsername();
String password = laf.getPassword();
UserManager userManager = new UserManager();
try {
userManager.login(username, password);
//request.setAttribute("username", username);
return mapping.findForward("success");
}catch(UserNotFoundException e) {
e.printStackTrace();
request.setAttribute("msg", "使用者不能找到,使用者名稱稱=【" + username + "】");
}catch(PasswordErrorException e) {
e.printStackTrace();
request.setAttribute("msg", "密碼錯誤");
}
return mapping.findForward("error");
}
}
LoginActionForm的程式碼(需要繼承ActionForm類)
/**
* 登入ActionForm,負責表單收集資料
* 表單的屬性必須和ActionForm中的get和set的屬性一致
* @author Administrator
*
*/
@SuppressWarnings("serial")
public class LoginActionForm extends ActionForm {
private String username;
private String password;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
UserManager的程式碼
public class UserManager {
public void login(String username, String password) {
if (!"admin".equals(username)) {
throw new UserNotFoundException();
}
if (!"admin".equals(password)) {
throw new PasswordErrorException();
}
}
}
Struts-config.xml檔案的配置資訊
<?xml version="1.0" encoding="ISO-8859-1" ?>
<!DOCTYPE struts-config PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 1.2//EN"
"http://jakarta.apache.org/struts/dtds/struts-config_1_2.dtd">
<struts-config>
<form-beans>
<form-bean name="loginForm" type="com.ljw.struts.LoginActionForm"/>
</form-beans>
<action-mappings>
<action path="/login"
type="com.ljw.struts.LoginAction"
name="loginForm"
scope="request"
>
<forward name="success" path="/login_success.jsp" />
<forward name="error" path="/login_error.jsp"/>
</action>
</action-mappings>
</struts-config>
login.jsp的程式碼
<%@ page language="java" contentType="text/html; charset=GB18030"
pageEncoding="GB18030"%>
<!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=GB18030">
<title>Insert title here</title>
</head>
<body>
<form action="login.do" method="post">
使用者:<input type="text" name="username"><br>
密碼:<input type="password" name="password"></br>
<input type="submit" value="登入">
</form>
</body>
</html>
至此,我們的第一個Struts框架的程式碼示例就完成了,接下來測試一下,將專案部署到tomcat,並且啟動tomcat,然後在瀏覽器中輸入地址訪問我們的程式,就可以看到效果了。小結一下:
Struts1框架是對MVC模式的一個最佳實踐,自她出道以來,為廣大程式開發人員所鍾愛,並且為我們的程式開發工作帶來了非常多的便利,提高了開發效率,實在是一個非常經典的產品,但是之後出現的Struts2,讓其逐漸失寵,漸漸的淡出了我們的視線,雖然現在已經鮮有人用,但是她作為一個歷史悠久的MVC框架,影響了不計其數的開發者,某種意義上說,很多人就是通過Struts的學習而認識MVC的,感謝Struts1為程式開發做出的貢獻,一路走好!
相關文章
- Struts1入門級程式hello world(解決struts1中文亂碼)
- Mybatis入門及第一個Mybatis程式MyBatis
- [譯]WebAssembly: 帶有程式碼示例的簡單介紹Web
- Web自動化——介紹與安裝以及第一個web自動化程式(一)Web
- unittest系列(一)unittest簡介和示例
- WebGL簡易教程(一):第一個簡單示例Web
- [譯]ViewModels:一個簡單的示例View
- 寫一個簡單的 Facade 示例
- JAVA基礎(二)—— java開發工具選擇及第一個程式Java
- 簡單介紹c#透過程式碼開啟或關閉防火牆示例C#防火牆
- 物件導向設計介紹和程式碼示例物件
- 一個簡單的 indexedDB 應用示例Index
- Avalonia 後臺程式碼簡單播放動畫示例動畫
- pytorch深度學習分類程式碼簡單示例PyTorch深度學習
- git安裝及第一次上傳程式碼遇到的問題Git
- RabbitMQ簡介以及與SpringBoot整合示例MQSpring Boot
- Kubernetes Admission Controller 簡介 - 注入 sidacar 示例Controller
- shell程式設計—簡介(一)程式設計
- 排序程式碼示例排序
- RabbitMQ 程式碼示例MQ
- Netty ServerBootstrap 繫結多個埠(程式碼示例)NettyServerboot
- 20個Python random模組的程式碼示例Pythonrandom
- jscodeshift入門簡介&程式碼重構&程式碼分析&&ReactJSReact
- css新手教程之背景圖充滿整個螢幕的示例程式碼介紹CSS
- Docker(3):Dockerfile介紹及簡單示例Docker
- 分享一個二維碼編解碼Python呼叫示例程式碼,不瞭解一下嗎Python
- 程式碼來構建一個簡單的compilerCompile
- 寫一個簡單的程式碼生成器
- SVG程式碼構成簡單介紹SVG
- iOS 編寫高質量Objective-C程式碼(一)—— 簡介iOSObjectC程式
- 驗證碼簡訊 API 接入指南:Java 語言示例程式碼APIJava
- JSON for Modern C++ 庫的介紹與使用示例程式碼JSONC++
- Java NIO 程式碼示例Java
- java SPI 程式碼示例Java
- Windows守護程式簡單示例Windows
- 200行程式碼寫一個簡易的dva行程
- 一個簡易版的T4程式碼生成
- 一個簡單的區塊鏈程式碼實現區塊鏈
- 調取創藍253國際簡訊驗證碼-程式碼示例2