Struts 2初體驗

Struts2簡介:

    Struts2是一個基于MVC設計模式的Web應用框架,它本質上相當于一個servlet,在MVC設計模式中,Struts2作為控制器(Controller)來建立模型與視圖的數據交互。

Struts 2 目錄結構:
    apps目錄:Struts2示例應用程序
    docs目錄:Struts2指南、向導、API文檔
    lib目錄:Struts 2的發行包及其依賴包
    src目錄:Struts 2項目源代碼

使用Struts 2 開發程序的基本步驟

--手動添加Struts支持

    1.第一步:加載Struts2 類庫,既是添加jar包

        1. commons-logging-1.1.x.jar ASF出品的日志包,struts2使用這個日志包來支持JDK和Log4j的日志記錄。
        2. freemarker-2.3.x.jar 表現層框架,定義了struts2的可視組件主題,struts2的UI標簽的模版,使用FreeMark編寫
        3. ognl-2.6.x.jar 對象圖導航語言(Object Graphic Navigation Language),struts2框架通過其讀寫對象屬性,一種功能強大的表達式語言
        4. struts2-core-2.x.x.jar struts2的核心類庫
        5. xwork.jar webwork的核心庫,struts2在其上構建
        6. commons-fileupload-1.2.1.jar 文件上傳組件,2.1.6版本后必須加入此文件
        7.struts2-dojo-plugin-2.3.4     為struts所提供的一些控件例如:日歷

     2.第二步:配置web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"><display-name></display-name>    <welcome-file-list><welcome-file>index.jsp</welcome-file></welcome-file-list><!-- 配置Struts2核心配置文件 --><filter><filter-name>struts2</filter-name><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><!-- 注意:1.filter-class中類的地址可在:(1)可建一個類,在類中點出來。(2)或直接在Libraries 下 struts2-dojo-plugin-2.1.8.jar下找到右鍵copy類的路徑,但必須把后綴點class刪掉。2.url-pattern中的值:(1)/*代表所有頁面都會經過此過濾器。(2)或*.action或*.do后綴的頁面都會經過此過濾器。 -->
</web-app>

    

    3.第三步:開發視圖層頁面login.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><base href="<%=basePath%>"><title>登錄頁面</title><meta http-equiv="pragma" content="no-cache"><meta http-equiv="cache-control" content="no-cache"><meta http-equiv="expires" content="0">    <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"><meta http-equiv="description" content="This is my page"><!--<link rel="stylesheet" type="text/css" href="styles.css">--></head><body><h3>登錄頁面</h3><form action="userAction" method="post" >用戶名:<input type="text" name="uname"/><br />密碼:   <input type="password" name="upassword" ><br /><input type="submit" value="提交登錄" ></form></body>
</html>

?

    4.第四步:開發控制層com.struts包下或com.action包

package com.struts;
/*** 控制層* @author asus**/
public class UserAction {/** * 此屬性用來接收form表單提交過來的值,屬性名與form表單中name屬性名一致* 必須生成get,set方法 */private String uname;private String upassword;public String execute(){if(uname!=null && uname.equals("admin") && upassword.equals("123")){//進入則代表賬號密碼輸入正確return "success";}return "error";}/** JavaBean */public String getUname() {return uname;}public void setUname(String uname) {this.uname = uname;}public String getUpassword() {return upassword;}public void setUpassword(String upassword) {this.upassword = upassword;}}

    5.第五步:配置Struts 2配置文件src下創建(struts.xml)需要選TDT struts-2.1.dtd

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "struts-2.1.dtd" >
<!-- 配置Struts2配置文件 -->
<struts>
<!-- package:包name:包名,唯一的,必選項namespace:命名空間,唯一的,相當于房間號。可選項,省略情況下是“/”extends:繼承extends=“struts-default”:struts2框架底層提供的核心包struts2-core-2.3.3.jar下的struts-default.xml文件為什么要繼承這個struts-default.xml文件因為struts框架底層提供的struts-default.xml聲明了所有的攔截器和攔截器棧。我們知道struts2框架運行時執行struts-default.xml中的攔截器棧完成必要功能。如果不繼承struts-default.xml文件,就沒有辦法使用struts2提供的所有攔截器。--><package name="struts2" namespace="/" extends="struts-default" ><!--  action:name:對應頁面請求鏈接的后面半部分class:對應要執行的類的完整路徑--><action name="userAction" class="com.struts.UserAction" ><!-- result:結果類型name:對應的是執行的類的方法的返回值后半部分文本內容:轉向的頁面--><result name="success" >/loginSuccess.jsp</result><!-- 賬戶密碼正確跳轉此頁面 --><result name="error" >/login.jsp</result><!-- 賬戶密碼錯誤跳轉登錄頁面重新輸入 --></action></package>
</struts>

    6.第六步:部署、運行項目

--自動添加Struts支持

    --MyEclipse自動添加Struts?支持

      右鍵項目-->MyEclipse-->Add Struts Capabilities

    注意:Hibernate+Struts2時,若兩個支持都是自動生成的則會有一個 ?antlr-2.7.2.jar?包沖突。必須去掉一個。一般是移掉Struts2的。

    附加移除操作圖:

      

?

使用對象接收from表的提交的值

屬性設值的方式
(1):簡單:在Action設置屬性,生成SET與GET方法。

參數的名稱與屬性的名稱一致。


(2):Action中設置Bean的屬性

Bean必須生成SET、GET方法。Bean不可以實例化。
Bean中必須要有一個默認的空參數的構造方法。

參數的名稱 = bean的名稱.bean中屬性的名稱。

?

Struts 2訪問Servlet API

/** Struts 2訪問Servlet API*//**1.與Servlet API解耦的訪問方式*///上下文對象ActionContext context = ActionContext.getContext();//request范圍Map<String, Object>  request=(Map<String, Object>) context.get("request");request.put("num1", 1);//session范圍Map<String, Object> session = context.getSession();session.put("num2", 2);//application范圍Map<String, Object> application = context.getApplication();application.put("num3", 3);/** 2.與Servlet API耦合的訪問方式*///request范圍HttpServletRequest request = ServletActionContext.getRequest();request.setAttribute("num1", 4);//session范圍HttpSession session = ServletActionContext.getRequest().getSession();session.setAttribute("num2", 5);//application范圍ServletContext application = ServletActionContext.getServletContext();application.setAttribute("num3", 6);

?

轉載于:https://www.cnblogs.com/wkrbky/p/5886937.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/256351.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/256351.shtml
英文地址,請注明出處:http://en.pswp.cn/news/256351.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

機器學習——深度學習之數據庫和自編碼器

目錄 一、數據庫——數據獲取 1、Mnist 2、ImageNet 二、自編碼器&#xff08;Auto-encoder&#xff09;——參數初始化 1、功能 2、基本思想 1&#xff09;訓練第一層 2&#xff09;訓練第二層及以后的神經網絡 ? 3&#xff09;利用BP對整個神經網絡的參數初始值進…

Halcon例程詳解 (深度圖轉換為3D圖像)—— xyz_attrib_to_object_model_3d

一、前言 深度圖向點云圖進行轉換是進行3D檢測項目時會遇到的問題&#xff0c;halcon里也有針對此問題的相關例程&#xff0c;下面對此例程進行分析。通過學習此例程&#xff0c;我們可以掌握如何將一張深度圖像和一張正常二維圖像轉換為3D點云。 二、分析 * 初始化界面 dev…

動態代理之Cglib淺析

什么是Cglib Cglib是一個強大的&#xff0c;高性能&#xff0c;高質量的代碼生成類庫。它可以在運行期擴展JAVA類與實現JAVA接口。其底層實現是通過ASM字節碼處理框架來轉換字節碼并生成新的類。大部分功能實際上是ASM所提供的&#xff0c;Cglib只是封裝了ASM&#xff0c;簡化了…

機器學習——深度學習之卷積神經網絡(CNN)——AlexNet卷積神經網絡結構

目錄 一、AlexNet卷積神經網絡結構模型 1、數據庫ImageNet 2、AlexNet第一層卷積層 二、AlexNet卷積神經網絡的改進 1、非線性變化函數的改變——ReLU 2、最大池化&#xff08;Max Pooling&#xff09;概念的提出——卷積神經網絡通用 1&#xff09;池化層 2&#xff0…

POJ - 3470 Walls

小鳥往四個方向飛都枚舉一下&#xff0c;數據范圍沒給&#xff0c;離散以后按在其中一個軸線排序&#xff0c;在線段樹上更新墻的id&#xff0c;然后就是點查詢在在哪個墻上了。 這題有個trick&#xff0c;因為數據范圍沒給我老以為是inf設置小了&#xff0c;WA了很多發。&…

C# —— 深入理解委托類型

一. 委托定義 1. 委托與多播委托 委托類型表示對具有特定參數列表和返回類型的方法的引用&#xff0c;定義了委托實例可以調用的某類方法。 通過委托&#xff0c;我們可以動態的通過委托變量來調用委托方法。一般用delegate來命名委托類型,但Action和Func也可以達到同樣的效果…

【VS開發】【C++語言】reshuffle的容器實現算法random_shuffle()的使用

假設你需要指定范圍內的隨機數&#xff0c;傳統的方法是使用ANSI C的函數random(),然后格式化結果以便結果是落在指定的范圍內。但是&#xff0c;使用這個方法至少有兩個缺點。首先&#xff0c;做格式化時&#xff0c;結果常常是扭曲的&#xff0c;所以得不到正確的隨機數&…

C#委托——基礎2

在上一篇隨筆中&#xff0c;簡要說明了怎樣定義委托&#xff0c;定義事件&#xff0c;訂閱事件&#xff0c;最后也實現了效果&#xff0c;就是當員工類的某個對象&#xff0c;執行某個事件時&#xff0c;委托事件被觸發&#xff0c;后面也得到了結果&#xff0c;但是想象一下實…

機器學習——深度學習之編程工具、流行網絡結構、卷積神經網絡結構的應用

目錄 一、編程工具 caffe實現LENET-5 二、流行的網絡結構 1、VGGNET 2、Googlenet ? 3、ResNet? ? 三、卷積神經網絡的應用 1、人臉識別 ? 2、人臉驗證 3、人臉特征點檢測 4、卷積神經網絡壓縮 一、編程工具 caffe的優點&#xff1a;模型標準化&#xff0c;源代碼…

Halcon例程詳解(激光三角系統標定)—— calibrate_sheet_of_light_calplate.hdev

前言 1 激光三角測距 激光三角測距法原理很簡單,是通過一束激光以一定的入射角度照射被測目標,激光在目標表面會產生漫反射,在另一角度利用透鏡對反射激光匯聚成像,光斑成像在CCD(Charge-coupled Device,感光耦合組件)位置傳感器上。當被測物體沿激光方向發生移動時,…

【轉】如何實現一個文件系統

如何實現一個文件系統 摘要 本章目的是分析在Linux系統中如何實現新的文件系統。在介紹文件系統具體實現前先介紹文件系統的概念和作用&#xff0c;抽象出文件系統概念模型。熟悉文件系統的內涵后&#xff0c;我們再進一步討論Linux系統中文件系統的特殊風格和具體文件系統在Li…

【tenserflow】——數據類型以及常用屬性

目錄 一、什么是Tensor&#xff1f; 二、Tensorflow常見數據類型 三、Tensorflow常見屬性device\cpu\gpu\ndim\shape\rank等 1、創建一個tensor 1&#xff09;tf.constant() 2)tf.Variable() 2、判斷一個變量是否為tensor張量 3、生成不同設備&#xff08;cpu,gpu&#x…

C# 事件詳解附實例分析

一、定義 事件是兩個對象間發布消息和響應后處理消息的過程&#xff0c;通過委托類型來實現的。 事件的機制被稱為發布-訂閱機制&#xff0c;其算法過程為&#xff1a;首先定義一個委托類型&#xff0c;然后在發布者類中聲明一個event事件&#xff0c;同時此類中還有一個用來觸…

網頁開發瀏覽器兼容性問題

1、在ie6下的雙margin問題 在ie6下&#xff0c;設置了float的元素&#xff0c;以float:left為例&#xff0c;如圖所示。會出現第一個浮動元素&#xff0c;即相對于父級元素浮動的&#xff0c;會出現雙倍margin的問題。 注意僅僅是相對于父級元素浮動的&#xff0c;即第一個會出…

【tensorflow】——創建tensor的方法

目錄 1、tf.constant() 2、tf.Variable() 3、tf.zeros():用0去填充指定形狀的數組 4、tf.convert_to_tensor(a,dtypetf.int32) 5、tf.ones():用1去填充指定形狀的數組 6、tf.fill():用指定的元素去填充指定形狀的數組 7、隨機化初始化進行創建 1&#xff09;normal正態分…

Halcon —— 圖像像素類型與轉換

圖像類型 就目前工業領域主流的圖像處理工具halcon來講&#xff0c;有以下幾種圖像類型&#xff1a;‘byte’, ‘complex’, ‘cyclic’, ‘direction’, ‘int1’, ‘int2’, ‘int4’, ‘int8’, ‘real’, ‘uint2’&#xff0c;具體含義如下圖所示。 ‘byte’ 每像素1字節…

軟件方法

核心工作流業務建模&#xff08;組織建模&#xff09;&#xff1a;描述組織內部各個系統如何協作&#xff0c;使得組織可以為其他的組織提供有價值的服務&#xff0c;新系統只不過是組織為了對外提供更好的服務&#xff0c;對自己的內部重新設計而購買的一個零件。需求&#xf…

修改vim中的tab為4個空格

記錄一下&#xff0c;避免用時還得搜........ 1、臨時修改 在vi中&#xff0c;set tabstop4 或 set ts4  2、永久修改 vi --version 查看要修改的文件如果是vim的話&#xff0c;修改~/.vimrc如果是vi&#xff0c;修改~/.exrc加上&#xff1a;set tabstop4set nu //顯示行號set…

Halcon例程詳解(基于卡尺工具的匹配測量方法) —— measure_stamping_part.hdev

前言 1卡尺工具介紹 Halcon中的Metrology方法即為卡尺工具&#xff0c;可用來擬合線&#xff0c;圓&#xff0c;這種方法對于目標比背景很明顯的圖像尺寸測量是很方便的&#xff0c;不需要用blob進行邊緣提取等&#xff0c;但缺點也很明顯&#xff0c;需要目標的相對位置基本…

【TensorFlow】——不同shape的tensor在神經網絡中的應用(scalar,vector,matrix)

目錄 ? 1、scalar——標量 1&#xff09;在神經網絡中存在的場景 2&#xff09;one_hot編碼 3&#xff09;舉例應用 2、vector——向量 ? 3、matrixs——矩陣 4、dim3的tensor 5、dim4的tensor 6、dim5的tensor 本文主要的目的是讓初學者對tensor的各種形式的使用場…