一、创建Action类。

  创建工程Struts2Demo

  struts 2中的Action类并不需要继承struts 2中的某个父类,普遍的java类就可以。

  在org.sunny.user.action包中创建名为UserAction的类。

  

package org.sunny.user.action;

import org.apache.struts2.ServletActionContext;

import com.opensymphony.xwork2.ActionContext;

public class UserAction {
//与JSP文件中属性名称相对应
private String username ;
private String message ;
//创建属性的setter和getter方法
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
public String execute(){
return "success" ;
} public String sendFeedback(){
StringBuffer msg = new StringBuffer("你好,") ;
msg.append(this.username).append(",消息:'").append(message).append("'已经发送完毕!");
ServletActionContext.getRequest().setAttribute("feedback", msg.toString());
return "success" ;
} }

二、配置Action类。

  在struts.xml中加入如下配置。

<package name="sunny" namespace="/" extends="struts-default">
<action name="user_*" class="org.sunny.user.action.UserAction" method="{1}">
<result name="success">${pageContext.request.contextPath}/WEB-INF/jsp/success.jsp</result>
</action>
</package>

  class="org.sunny.user.action.UserAction"对应的就是我们所创建的类。

  action中的name属性就是我们访问网页时的路径名称,如果设置为'name="user“',则访问时就为"localhost:8080/Struts2Demo/user.action"。

  action中的methos属性设置是访问这个action类时所访问的方法名称,默认是"execute",即,访问action类中的execute()方法。

  methos属性这里设置成'{1}'是与前面的name属性的设置相对应,name设置为'user_*',就可以在访问时自己选择访问action的那个方法,如果访问路径为"localhost:8080/Struts2Demo/user_sendFeedback.action",这表明将访问类中的sendFeedback()方法,等同于'method="sendFeedback"'。

  action中的result属性设置的为页面跳转的路径,result中的name属性设置的是action类中访问的方法返回的字符串,后面的值${pageContext.request.contextPath}/WEB-INF/jsp/success.jsp就是页面跳转的路径。如,result中name属性设置为'success',如果execute()方法最后return "success",则浏览器将会跳转到WEB-INF/jsp/success.jsp,${pageContext.request.contextPath}表示的是项目的根路径。一个action中可以设置多个result,但是各个result的name属性的值应当不一样。

三、创建JSP文件。

  根目录下创建index.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>
</head>
<body>
<h1>struts2 demo 首页</h1>
<form action="${pageContext.request.contextPath }/user_sendFeedback.action">
姓名:<input type="text" name="username"><br>
消息:<input type="text" name="message" ><br>
<input type="submit" value="发送">
</form>
</body>
</html>

  注:两个文本框中的name属性必须和UserAction中的属性名称一致,否则将不能讲值传入UserAction中的两个属性中,这种传值得原理运用到了java中的反射机制。

  WEB-INF/jsp中创建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>
</head>
<body>
<h1>you had send message success!</h1>
<%=request.getAttribute("feedback")%>
</body>
</html>

四、运行效果。

Struts2学习笔记(二):第一个Struts2应用的更多相关文章

  1. struts2学习笔记二

    一.分文件编写框架配置文件 1.不分文件开发可能产生的问题 就类似于我们在写java类时,所有代码都写在一个类里,甚至写在一个方法里. 当3个人都checkout了struts.xml文件时,第一个人 ...

  2. struts2学习笔记(一)—— struts2介绍及入门程序

    一.struts2概述 1.1 什么是struts2? 在介绍Struts2之前,先来认识一下Struts1.Struts1是最早的基于MVC模式的轻量级web框架,他能够合理的划分代码结构,并包含了 ...

  3. Struts2学习笔记二 配置详解

    Struts2执行流程 1.简单执行流程,如下所示: 在浏览器输入请求地址,首先会被过滤器处理,然后查找主配置文件,然后根据地址栏中输入的/hello去每个package中查找为/hello的name ...

  4. Struts2学习笔记二:开发流程

    一:创建项目,添加依赖包 二:在web.xml配置核心控制器 <filter> <filter-name>struts2</filter-name> <fil ...

  5. Struts2学习笔记(二)——配置详解

    1.Struts2配置文件加载顺序: default.properties(默认常量配置) struts-default.xml(默认配置文件,主要配置bean和拦截器) struts-plugin. ...

  6. [struts2学习笔记] 第一节 关于struts2的简单认知

    本文地址:http://blog.csdn.net/sushengmiyan/article/details/40298287 官方文档:http://struts.apache.org/releas ...

  7. struts2学习笔记(三)—— struts2的常见配置

    一.配置文件的加载顺序 每次从客户端发送请求到服务器都要先经过Struts2的核心过滤器StrutsPrepareAndExecuteFilter,这个过滤器有两个功能:预处理和执行.在预处理中主要就 ...

  8. Struts2学习笔记-jsp中引用struts2框架

    如果在jsp中需要引用struts2 框架,需在前面加上以下内容 <%@taglib prefix="s" uri="/struts-tags" %> ...

  9. struts2学习笔记(3)——struts2的局部类型转换

    今天又学到了一个新的东西,就是struts2的类型转换. 为什么要类型转换? 今天我就要传一个点的坐标给你,保存时用一个自定义的Point类来保存. 因为在表单里面传过去的是字符串,如“12,23”, ...

随机推荐

  1. Android中px、dp、sp的区别

    px: 即像素,1px代表屏幕上一个物理的像素点: px单位不被建议使用,因为同样100px的图片,在不同手机上显示的实际大小可能不同,如下图所示(图片来自android developer guid ...

  2. HTML5 离线缓存详解(转)

    离线缓存是html5新特性之一,简单理解就是第一次加载后将数据缓存,在没有清除缓存前提下,下一次没有网络也可以加载,用在静态数据的网页或游戏比较好用.当然,Html5新的特性都不是所有浏览器都能支持的 ...

  3. Spring4.0学习笔记(10) —— Spring AOP

    个人理解: Spring AOP 与Struts 的 Interceptor 拦截器 有着一样的实现原理,即通过动态代理的方式,将目标对象与执行对象结合起来,降低代码之间的耦合度,主要运用了Proxy ...

  4. 66 Plus One(大数+1Easy)

    题目意思:vector<int> v存数   eg.123  则v[0]=1,v[1]=2,v[2]=3,加1后返回一个vector 思路:先判断新的vector长度是否需要加1,然后从v ...

  5. LIKE匹配关键字

    1.% 匹配任意数目字符(包括零个字符) SELECT * FROM edo_user WHERE true_name LIKE '王%' 应用:关键字查询 WHERE u.true_name lik ...

  6. 织梦DedeCms用SQL语句调用数据库任意内容

    dedecms多站点数据利用SQL句段进行互相调用数据方法:2个或者多个DEDE的站怎么互相调用数据,非JS调用,前提是2个或者多个dedecms站点都安装的同一个数据库的不同数据表内,才能实现功能. ...

  7. 【行为型】Iterator模式

    迭代器模式提供一种方法顺序访问聚合对象中的各个元素,而又不需要暴露该聚合对象的内部表示.对于该模式,估计几乎所有的人都使用过,在此直接给出类结构图参考如下: 如前所述,迭代器模式的思想主要是:一能提供 ...

  8. [Python笔记]第四篇:内置函数

    本篇主要内容:内置函数 函数 参考:https://docs.python.org/3.5/library/functions.html 内置函数列表 一.数学运算类 abs(x)求绝对值 >& ...

  9. C# ORM—Entity Framework 之Database first(数据库优先)&Model First(模型优先)(一)

    一.什么是Entity Framework 1.1 实体框架(EF)是一个对象关系映射器,使.NET开发人员使用特定于域的对象与关系数据.它消除了需要开发人员通常需要编写的大部分数据访问代码.简化了原 ...

  10. 委托的lambda表达式

    委托可以用 Lambda 表达式的方法来表示,很多C#的代码都会大量使用 Lambda 表达式,正确理解它的用法还是很重要的. 基础规则: Lambda 运算符 “=>” 左边表示委托实例所需要 ...