最近主要把javaweb的三大框架過一遍。
(一)發展歷史
傳統的Java Web應用程序是采用JSP+Servlet+Javabean來實現的,這種模式實現了最基本的MVC分層,使得程序分為幾層,有負責前台展示的jsp、負責流程邏輯控制的servlet一級負責數據封裝的Javabean。但是這種結構仍然存在問題:如JSP頁面中需要使用<%%>符號嵌入很多的java代碼,造成頁面結構混亂,servlet和javabean負責了大量的跳轉和運算工作,耦合緊密,程序復用率低等等。
Struts
為了解決以上問題,出現了Struts框架,他是一個完美的MVC實現,他有一個中央控制類(一個servlet),一個action類負責頁面跳轉和后台邏輯運算,一個或幾個jsp頁面負責數據的輸入和輸出顯示,還有一個form類負責傳遞action和jsp中間的數據。jsp中可以使用struts框架提供的一組標簽,就像使用html標簽一樣簡單,但是可以完成非常復雜的邏輯。從此jsp頁面中不需要出現一行<%%>包圍的java代碼了。
可是所有的運算邏輯都放在struts的action里將使得action類復用率低和邏輯混亂,所以通常人們會把整個web應用程序分為三層,struts負責顯示層,它調用業務層完成運算邏輯。從此jsp頁面中不需要出現一行<%%>包圍的java代碼了。
(二)小例子
這里簡單介紹個關於struts框架的小例子。
首先,eclipse for java ee 工具,官網下載。
然后,struts2包,下載地址:http://www.pc6.com/softview/SoftView_108615.html
進一步,在eclipse中新建dynamic web project,填寫project name,其他默認如下圖:
下一步,填寫編譯輸出路徑,默認為build\classes,可以改可以不改,默認即可。
下一步,勾選生成web.xml文件,finish。
一個dynamic web project就生成了,接下來加入相應jsp,action文件。
解壓struts包,把其中struts-2.3.15.1\lib下的幾個包拷貝到工程的WebContent/WEB-INF/lib目錄下,工程結構如下:
根據需要拷貝你需要的jar包到lib包下,然后改寫web.xml文件:
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0"> <display-name>Login</display-name> <filter> <!-- 定義核心Filter的名稱 --> <filter-name>struts2</filter-name> <!-- 定義Filter的實現類 --> <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class> </filter> <filter-mapping> <filter-name>struts2</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <welcome-file-list> <welcome-file>Login.jsp</welcome-file> </welcome-file-list> </web-app>
首頁默認為Login.jsp。配置struts.xml文件,在src文件下創建struts.xml文件:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd"> <struts> <package name="default" namespace="/" extends="struts-default"> <action name="Login" class="action.LoginAction"> <result name="success">success.jsp</result> <result name="input">Login.jsp</result> </action> </package> </struts>
注:struts.xml文件一定創建在src目錄下,創建的web project默認src包在Java Resources下,而不在WebContent/WEB-INF下。
在src下新建一個包action,在action下創建LoginAction.java文件:
package action; import com.opensymphony.xwork2.ActionSupport; public class LoginAction extends ActionSupport{ private static final long serialVersionUID = 1L; public String loginName,password,message; public String execute() throws Exception { System.out.println("username:"+loginName+"; password:"+password); if ("admin".equals(loginName)&&"admin".equals(password)) { message=loginName+" Login Success!"; }else { message=loginName+" Login Failed!"; return INPUT; } return SUCCESS; } public String getLoginName() { return loginName; } public void setLoginName(String loginName) { this.loginName = loginName; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } }
在WebContent目錄下創建Lgin.jsp和success.jsp文件:
Login.jsp:
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@taglib prefix="s" uri="/struts-tags" %>
<!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=UTF-8">
<title>Login</title>
</head>
<body>
<div align="center">
${requestScope.message }
<s:form action="Login" method="POST">
<s:textfield name="loginName" size="20" label="username"/>
<s:password word" size="20" label="password"/>
<s:submit value="submit"></s:submit>
</s:form>
</div>
</body>
</html>
success.jsp:
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!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=UTF-8"> <title>Success</title> </head> <body> Login Success! </body> </html>
輸入錯誤的用戶名和密碼,提交:
登陸模塊算是簡單的完成。
(三)。。。