Strust的基础情况

Struts的优点:

1、实现MVC模式,结构清晰

2、丰富的标签(tag)

3、通过配置文件页面导航,便于后期维护

4、与Servlet API松耦合,便于测试

Structs2=Structs1的知名度和市场+WebWork的技术

二、Struts2 获取

1、http://struts.apache.org/download.cgi

2、Struts-2.3.16.3-all.zip

三、Struts2 主要目录

apps :该文件夹下包含了基于Struts2的示例应用

docs:该文件夹下包含了Struts2的相关文档,包括Struts2的快速入门、Struts2的文档以及API文档等内容

lib :该文件夹下包含了Struts2框架的核心类库,以及

Struts2的第三方插件类库

src :该文件夹下包含了Struts2框架的全部源代码

四、Struts2 搭建所需 jar 包

commons-fileupload-1.3.1.jar:Struts文件的上传和下载

commons-io-2.2.jar:文件读取

commons-lang3-3.1.jar:为java.lang包提供扩展

freemarker-2.3.19.jar:FreeMarker是一个模板引擎,一个基于模板生成文本输出的通用工具(.ftl)

ognl-3.0.6.jar:支持ognl表达式

javassist-3.11.0.GA.jar:分析、编辑和创建JAVA字节码的类库(可以重写.class文件)

struts2-core-2.3.16.3.jar:Struts2的核心包(WebWork)

xwork-core-2.3.16.3.jar:xwork的核心包(WebWork)

asm-*.jar :类似javassits

log4j-1.2.17.jar: 日志类库

有三种方式实现Action:

1.创建自己的java类:增加方法:

public String execute(){

return "success";

}

配置struts2.xml

<package name = "default" namespace="/" extends="struts-default"

<action name = "hello" class="…">

<result>hello.jsp</result>

</action>

</package>

2.实现接口Action

3.继承ActionSupport

Action接收参数(属性方式)

//以属性方式接收用户登录输入的用户名和密码
public class UserAction extends ActionSupport {
    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;
    }
    @Override
    public String execute() throws Exception {
        return "success";
    }
}

控制业务逻辑

表单参数名称必须在Action中有对应的setter以及getter

解决乱码

修改struts.xml,添加代码<constantname="struts.i18n.encoding" value="编码格式" />

页面显示

<%@taglib uri="/struts-tags" prefix="s"%>

<s:property value="属性名"/>

应用场景

接收的参数字段个数少的时候适合使用,比如对于搜索应用,接收用户输入的搜索条件

Action接收参数(JavaBean方式):将模型数据从Action中分离了出来

//以javaBean方式接收用户登录输入的用户名和密码
public class UserAction2 extends ActionSupport {
    private User user;
    public User getUser() {
        return user;
    }
    public void setUser(User user) {
        this.user = user;
    }
    @Override
    public String execute() throws Exception {
        return "success";
    }

}

定义实体类,为实体添加属性以及setter和getter

com.pb.entity.User

为Action添加实体属性以及setter和getter

User user

修改表单参数name为实体对象名.属性名

<input type="text" name="user.userName"/>

取值通过<s:property value=“对象名.属性名”/>的形式

<s:property value="user.userName"/>

Action接收参数的方式

使用method属性

访问Action时,默认调用的是execute()方法

可以在Action中定义多个业务方法

方法签名要与execute( )方法相同

配置多个<action>标签

method属性指定调用的方法

public class HouseAction extends ActionSupport {

    public String add() {
        return "success";
    }
    public String update() {
        return "success";  }
}        
<action name="house_add" class="com.pb.web.action.HouseAction" method="add">

<action name="house_update" class="com.pb.web.action.HouseAction" method=“update">

使用动态方法调用(默认情况下是关闭的)

动态方法调用

DMI(dynamic method invocation)

一个Action类中可以有多个业务方法

public class HouseAction extends ActionSupport {

    public String add() {
        return "success";
    }
    public String update() {
        return "success";
    }
}        

只需要配置一个<action>标签

不需要使用method属性

调用时指出Action名和业务方法

<action name="house"class="com.pb.web.action.HouseAction">

调用时指出Action名和业务方法

http://localhost:8080/struts2/house!add

<result>的name属性

根据Action业务方法的返回值跳转到不同的结果视图

public String add() throws Exception {

  return "addSuccess";

}

public String update() throws Exception {

  return "updateSuccess";

}
<action name="house" class="com.pb.web.action.HouseAction" >

  <result name="addSuccess">/houseAddSuccess.jsp</result>

  <result name="updateSuccess">/houseUpdateSuccess.jsp</result>

</action>
时间: 2024-11-05 00:16:18

Strust的基础情况的相关文章

闪电精灵SEO 打破百度快速排名规则

我们许多站长们都是每天为了自己网站的排名操碎了心,然而纵使每天苦逼的更新网站,做外链,排名未必上得去,度娘总是不给面子,排名优化做的太慢.但是你可知道有一种方法能够在7-30天内快速提高网站排名吗?或者听说过但不会做? 百度快速排名原理 快速排名,顾名思义,就是利用某些搜索引擎的算法以及特点对优化的网站进行特殊的优化操作,在短时间内达到排名迅速上升的目的.是根据搜索引擎的一系列算法,提升优化网站用户体验,使搜索引擎认为这是一个很受欢迎的站点,达到快速排名效果. 真的可以做到7天快速排名吗? 这也

如何做数据分析自动化?

很多做数据统计小伙伴总避免不了使用Excel,尤其是专门做数据分析的,需要周期性的得出分析数据,即便可以做Excel模板,重复分析多了还是会让人感觉到很枯燥.我是Myb,在这里我告诉大家数据分析自动化是可以办到的.下面是自动化的方法. 一:简易数据分析自动化(发送xlsx文件到指定邮箱): 语言:Python(处理数据).SQL(数据库提取数据) 方法:用Python的pymysql模块连接数据库读取最新数据,用xlsxwriter模块制作excel,用smtp模块发送邮件给指定的人.如果加上定

UESTC_菲波拉契数制升级版 2015 UESTC Training for Dynamic Programming&lt;Problem L&gt;

L - 菲波拉契数制升级版 Time Limit: 3000/1000MS (Java/Others)     Memory Limit: 65535/65535KB (Java/Others) Submit Status 我们定义如下数列为菲波拉契数列: F(1)=1 F(2)=2 F(i)=F(i−1)+F(i−2)(i>=3) 给定任意一个数,我们可以把它表示成若干互不相同的菲波拉契数之和.比如13有三种表示法 13=13 13=5+8 13=2+3+8 现在给你一个数n,请输出把它表示成

不会全排列算法(Javascript实现),我教你呀!

今天我很郁闷,在实验室凑合睡了一晚,准备白天大干一场,结果一整天就只做出了一道算法题.看来还是经验不足呀,同志仍需努力呀. 算法题目要求是这样的: Return the number of total permutations of the provided string that don't have repeated consecutive letters. Assume that all characters in the provided string are each unique.F

Python算法:推导、递归和规约

Python算法:推导.递归和规约 注:本节中我给定下面三个重要词汇的中文翻译分别是:Induction(推导).Recursion(递归)和Reduction(规约) 本节主要介绍算法设计的三个核心知识:Induction(推导).Recursion(递归)和Reduction(规约),这是原书的重点和难点部分 正如标题所示,本节主要介绍下面三部分内容: • Reduction means transforming one problem to another. We normally red

打开西部互联网金融市场,玖富选择先笼络创业者们

无论是经济还是互联网,西部地区都要落后于东部,可反过来讲,西部要比东部更有机会.实际上,这几年成都的互联网发展迅猛,其中软件和游戏是成都互联网发展的两大支柱业务,在这两大业务的带动下,成都也形成了积极的互联网创业氛围,并辐射带动整个西部地区的互联网发展. 在如今诸多互联网创业项目当中,互联网金融依然保持了相当的热度,而成都以及整个西部的互联网金融发展刚刚萌芽.如果从行业的角度来看,西部地区的互联网金融已经远远滞后于东部,但对创业者而言恰恰说明成都以及整个西部地区还有非常大的互联网金融创业空间.

全排列算法的JS实现

问题描述:给定一个字符串,输出该字符串所有排列的可能.如输入“abc”,输出“abc,acb,bca,bac,cab,cba”. 虽然原理很简单,然而我还是折腾了好一会才实现这个算法……这里主要记录的是解决问题中的思路. 我实现的是最普通的递归算法,也没有除重,嗯非递归及除重的算法以后再补上吧. 好了正文开始: 首先明确函数的输入和输出,输入是一个字符串,输出么对于JS而言用数组来表示最恰当了,所以函数的雏形应该是这样的: function permutate(str) { var result

算法导论——lec 11 动态规划及应用

和分治法一样,动态规划也是通过组合子问题的解而解决整个问题的.分治法是指将问题划分为一个一个独立的子问题,递归地求解各个子问题然后合并子问题的解而得到原问题的解.与此不同,动态规划适用于子问题不是相互独立的情况,即各个子问题包含公共的子子问题.在这种情况下,如果用分治法会多做许多不必要的工作,重复求解相同的子子问题.而动态规划将每个子问题的解求解的结果放在一张表中,避免了重复求解. 一. 动态规划介绍 1. 动态规划方法介绍: 动态规划主要应用于最优化问题, 而这些问题通常有很多可行解,而我们希

MyBatis主流程分析之(一)-环境准备

mybatis版本是3.2.6,请注意 一. 获取SqlSessionFactory顺序图 二. 主要类及其说明 在这个获取SqlSessionFactory的顺序图中,我们可以清晰的看到,SqlSessionFactoryBuilder把读取 mybatis-config.xml交给给了XMLConfigBuilder类,XMLConfigBuilder类把读取的xml内容都记录在了Configuration类中, 最后把配置好的config传递给DefaultSqlSessionFactor