Strust2初之体验
Struts2的第一个案例
首先我们需要引入架包

entity:
package cn.happy.entity;
/**
* Entity Object
* @author Happy
*
*/
public class UserInfo {
private String name;
private String pwd;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPwd() {
return pwd;
}
public void setPwd(String pwd) {
this.pwd = pwd;
} }
然后我们书写LoginAction.java
package cn.happy.action; import java.util.Map; import javax.security.auth.message.config.ServerAuthContext;
import javax.servlet.http.HttpSession; import org.apache.struts2.ServletActionContext;
import org.omg.PortableServer.ServantActivator; import cn.happy.entity.UserInfo; import com.opensymphony.xwork2.Action;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ModelDriven; public class LoginAction implements Action,ModelDriven<UserInfo>{
//前台输入的用户名和密码 在Action中如何捕获
private UserInfo user=new UserInfo();
public String execute() throws Exception {
System.out.println("====LoginAction ==============+++execute");
System.out.println("================="+user);
if (user.getName().equals("admin")&&user.getPwd().equals("admin")) {
//解耦
/*Map<String, Object> session = ActionContext.getContext().getSession();
session.put("name", user.getName());*/
//耦合
HttpSession session = ServletActionContext.getRequest().getSession();
session.setAttribute("user",user.getName());
return "success";
}else {
return "login";
}
}
public UserInfo getUser() {
return user;
}
public void setUser(UserInfo user) {
this.user = user;
}
public UserInfo getModel() {
return user;
} }
着这个类中我们用到了二个接口
一,Action
public abstract interface com.opensymphony.xwork2.Action {
public static final java.lang.String SUCCESS = "success";
public static final java.lang.String NONE = "none";
public static final java.lang.String ERROR = "error";
public static final java.lang.String INPUT = "input";
public static final java.lang.String LOGIN = "login";
public abstract java.lang.String execute() throws java.lang.Exception;
}
这个方法只有一个方法: execute()和一些有用的String常量
这些方法可以很方便地作execute()方法返回的控制字符串的值。真正的好处是框架内部也使用了这些常亮。这意味着使用这些预定的控制字符串允许你接入更多的智能默认的行为。
在这里我们先不做过深的讨论!
二、ModelDriven<T>
ModelDriven让你可以直接操作应用程序中的领域对象(模型对象),允许你在Web层和业务逻辑层使用相同的对象。
ModelDriven接口中只有一个方法,其方法的原型如下:
public abstract interface com.opensymphony.xwork2.ModelDriven {
public abstract java.lang.Object getModel();
}
该方法返回一个用于接收用户输入数据的模型对象
public UserInfo getModel() {
return user;
}
然后我们就需要去配置struts.xml文件了
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd"> <struts>
<!--
constant:常量
devMoode;开发模式:true: 我在Struts。xml文件中做了修改,tomcat不需要重启
-->
<constant name="struts.devMode" value="true" /> <package name="default" namespace="/" extends="struts-default">
<action name="loginAction" class="cn.happy.action.LoginAction">
<result name="success">/login/success.jsp</result>
<result name="login">/login/login.jsp</result>
</action>
</package>
</struts>

2、extends属性的详解
- 当一个包通过配置extends属性继承了另一个包的时候,该包将会继承父包中所有的配置,包括action、result、interceptor等。
- 由于包信息的获取是按照配置文件的先后顺序进行的,所以父包必须在子包之前被定义。
- 通常我们配置struts.xml的时候,都继承一个名为“struts-default.xml”的包,这是struts2中内置的包。
3、namespace的详解
namespace主要是针对大型项目中Action的管理,更重要的是解决Action重名问题,因为不在同一个命名空间的Action可以使用相同的Action名的
4、<action>与<result>
1、<action>属性介绍
|
属性名称 |
是否必须 |
功能描述 |
| name | 是 | 请求的Action名称 |
| class | 否 | Action处理类对应具体路径 |
| method | 否 | 指定Action中的方法名 |
| converter | 否 | 指定Action使用的类型转换器 |
如果没有指定method则默认执行Action中的execute方法。
2、<result>属性介绍
|
属性名称 |
是否必须 |
功能描述 |
| name | 否 | 对应Action返回逻辑视图名称,默认为success |
| type | 否 | 返回结果类型,默认为dispatcher |
3、访问Action方法的另一种实现方式
在Struts2中如果要访问Action中的指定方法,还可以通过改变URL请求来实现,将原本的“Action名称.action”改为“Action名称!方法名称.action”在struts.xml中就不需要指定方法名了。
5、<exception-mapping>与<global-exception-mapping>
这两个标签都是用来配置发生异常时对应的视图信息的,只不过一个是Action范围的,一个是包范围的,当同一类型异常在两个范围都被配置时,Action范围的优先级要高于包范围的优先级.这两个标签包含的属性也是一样的:
|
属性名称 |
是否必须 |
功能描述 |
| name | 否 | 用来表示该异常配置信息 |
| result | 是 | 指定发生异常时显示的视图信息,这里要配置为逻辑视图 |
| exception | 是 | 指定异常类型 |
在对struts.xml文件进行一个详细的分解后,我们该配置最后一道wed.xml了。
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5"
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_2_5.xsd">
<display-name></display-name> <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> <welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>
这个没什么好说的,然后就是jsp页面
login
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<%@ taglib uri="/struts-tags" prefix="s" %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>My JSP 'login.jsp' starting page</title>
</head> <body>
<s:form name="form1" namespace="/" method="post" action="loginAction">
请输入用户名: <s:textfield name="name"></s:textfield> <br/>
<s:textfield name="pwd"></s:textfield><br/>
<s:submit value="登陆"></s:submit>
</s:form>
</body>
</html>
success
<%@ 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>My JSP 'login.jsp' starting page</title>
</head>
<body>
成功页面!</br>
欢迎您:${name}!
</body>
</html>
接下来是运行结果:

在用户名和密码输入都正确的情况下将会跳到success.jsp页面:

谢谢观看!!!!!!!!!!!!!!!!!!!!!!!!!!
Strust2初之体验的更多相关文章
- Strust2 初体验
Struts2的第一个案例 首先我们需要引入架包 entity: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 package ...
- Git/GitHub 初用体验与总结
Git,一个神奇而又陌生的东西,居然到现在才去了解它,就像有一位仁兄说的,现在不会用Git真的都不好意思说自己搞IT的. 简单的讲,这Git是目前最先进的分布式版本控制系统,和他相对应的就是众所周知的 ...
- Android 5.0 Lollipop初上手体验
在等了好几天还没有等到OTA升级提示,前天笔者给Nexus4线刷入了官方提供的Lollipop的镜像,在试用了这两天之后,现在总结下自己感觉很惊艳的地方和一些地方的吐槽.(点击图片可以查看大图) 1. ...
- 树莓派 Zero WH 初使用体验
12号买了一个树莓派 Zero WH,这个是什么型号呢?其实和树莓派Zero是同一系列的,加上W则表示多了无线Wifi和蓝牙模块,加上H则表示在板子上已经焊接好了2x20的排针. 这个Zero真的很迷 ...
- quartz之hello(java)
quartz 任务调度框架 简单的说:就是在特定的时间,干指定的事件,然后具体到某个对象去做 quartz初之体验: 1.pom.xml文件(导入jar包) <dependencies&g ...
- .NET平台开源项目速览(15)文档数据库RavenDB-介绍与初体验
不知不觉,“.NET平台开源项目速览“系列文章已经15篇了,每一篇都非常受欢迎,可能技术水平不高,但足够入门了.虽然工作很忙,但还是会抽空把自己知道的,已经平时遇到的好的开源项目分享出来.今天就给大家 ...
- Xamarin+Prism开发详解四:简单Mac OS 虚拟机安装方法与Visual Studio for Mac 初体验
Mac OS 虚拟机安装方法 最近把自己的电脑升级了一下SSD固态硬盘,总算是有容量安装Mac 虚拟机了!经过心碎的安装探索,尝试了国内外的各种安装方法,最后在youtube上找到了一个好方法. 简单 ...
- Spring之初体验
Spring之初体验 Spring是一个轻量级的Java Web开发框架,以IoC(Inverse of Control 控制反转)和 ...
- Xamarin.iOS开发初体验
aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAKwAAAA+CAIAAAA5/WfHAAAJrklEQVR4nO2c/VdTRxrH+wfdU84pW0
随机推荐
- swift相关
1.界面上一个输入框,一个按钮,一个webview .点按钮,webview显示输入框中输入的url的页面. @IBOutlet var wv:UIWebView = nil //定 ...
- 使用python发送和接收邮件
关于电子邮件 大学之前,基本不用邮箱,所以基本感觉不到它的存在,也不知道有什么用:然而大学之后,随着认识的人越来越多,知识越来越广泛,邮箱已然成为很重要的通讯工具,大学一些课程作业需要有邮箱发给老师, ...
- GJM :多人在线游戏的设计思路
感谢您的阅读.喜欢的.有用的就请大哥大嫂们高抬贵手"推荐一下"吧!你的精神支持是博主强大的写作动力以及转载收藏动力.欢迎转载! 版权声明:本文原创发表于 [请点击连接前往] ,未经 ...
- sqlserver性能调优第一步
相信不少的朋友,无论是做开发.架构的,还是DBA等,都经常听说“调优”这个词.说起“调优”,可能会让很多技术人员心头激情澎湃,也可能会让很多人感觉苦恼,不知道如何入手.当然,也有很多人对此不屑一顾,因 ...
- hadoop 集群的配置
在经过几天折腾,终于将hadoop环境搭建成功,整个过程中遇到各种坑,反复了很多遍,光虚拟机就重新安装了4.5次,接下来就把搭建的过程详细叙述一下 0.相关工具: 1,系统环境说明: 我这边给出我的集 ...
- HIVE 在执行大量数据JOIN的时候,容易产生内存不足的情况
情况 很多时间遇到 "Caused by: java.lang.OutOfMemoryError: Java heap space" Caused by: java.lang.Ou ...
- Android—基于Socket与上传图片到客户端
最近项目中需要客户端和Socket互相传递数据时候需要相互传递图片所以做下总结以免以后忘记,也希望给大家带来帮助. 先上客户端的代码: 根据图片名称上传照相机中单个照片(此方法为自己封装) 参数所代表 ...
- eclipse — Failed to load the JNI shared library”……\jvm.dll问题原因以及解决方案
首先上一张出现问题的图片: 出现这个问题一般是你的jdk和eclipse不是同一位的,比如你的jdk是32位的但是eclipse下载的是64位的就会导致这种问题. 解决方案:把两者都换为32或者64位 ...
- UIScrollView出现位移问题
啦啦啦啦啦~~~ UINavigationController和UIScrollView一起使用时会导致UIScrollView位置偏移 情况:UINavigationController的视图上的第 ...
- css padding 填充
语法: padding:[ <length> | <percentage> ]{1,4} 默认值:看每个独立属性 适用于:所有元素,除 table-row-group | ta ...