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页面:

谢谢观看!!!!!!!!!!!!!!!!!!!!!!!!!!

转载于:https://www.cnblogs.com/superws/p/5906232.html

Strust2初之体验相关推荐

  1. zero 免焊 树莓派_树莓派 Zero WH 初使用体验

    原文:树莓派 Zero WH 初使用体验 12号买了一个树莓派 Zero WH,这个是什么型号呢?其实和树莓派Zero是同一系列的,加上W则表示多了无线Wifi和蓝牙模块,加上H则表示在板子上已经焊接 ...

  2. zte d90 java_电信天翼 畅享3G--ZTE D90+初用体验

    ZTE D90+ 3G商务手机,黑色翻盖,90*50*18mm,主屏2.0英寸,传统双屏幕显示,130万摄像头,外观上朴实无华,采用了厚实的折叠设计,虽然看起来略显笨重,且屏幕尺寸与精度也过于平实,但 ...

  3. 3D打印机小鲁班初使用体验

    目录 1.限位开关 2.x轴 3.调平 1.限位开关 xyz三轴的限位开关,都要对应电机被压到 如果压不到,可能电机装错了,把挤出电机装到了x轴之类 2.x轴 使用前,使用移动轴,移动x轴时异响,兹拉 ...

  4. 浅谈博客园的初使用体验

    今天无意中看到同事的博客,写的都挺不错的,把自己学习的知识通过博客和大家一起交流.于是乎经过同事的介绍认识了博客园.       刚进入网站,就发现页面比较符合我的口味,简洁明朗,一下子就能找到自己需 ...

  5. windows server 2012 初安装体验

    昨天晚上的windows server 2012 已时行 了发布了,为之在之前我已进行了下载测试安装,本来晚间想用来在虚拟机下进行安装VM-tool工具的,但是却因种种原因没有成功,为之补一下前面没有 ...

  6. AppCode初用体验

    AppCode 是一个全新的 Objective-C 的集成开发环境,用于帮助开发 Mac.iPone 和 iPad 的应用程序.其官方网站为:http://www.jetbrains.com/obj ...

  7. 计算机应用基础 制作表格说课稿,职业教育:计算机应用基础类一等奖作品《Premiere视频制作初体验》说课稿.docx...

    职业教育:计算机应用基础类一等奖作品<Premiere视频制作初体验>说课稿.docx 文档编号:936324 文档页数:3 上传时间: 2020-02-21 文档级别:普通资源 文档类型 ...

  8. 分析linux系统的运行性能,Linux系统如何分析CPU的性能瓶颈

    以下内容来自转载和自己的初用体验. vmstat [root@master ~]# vmstat -n 3 procs   ---memory--    --swap--    --io--  --s ...

  9. 蚂蚁资深技术专家刘晓莹十年支付宝回忆录

    当"母亲"."coding"."技术Leader"的标签同时存在于一个人身上,会带来怎样不可预知的化学反应?母亲节来临之际,我们特地采访了& ...

最新文章

  1. 中山大学计算机学院运动会,中山大学2019年运动会.PDF
  2. vue和react相同点_我在React和Vue中创建了相同的应用程序。 这是区别。
  3. 专转本计算机应用基础,江苏省专转本计算机应用基础模拟题
  4. php定时删除目录,shell定时删除指定目录下的文件
  5. k8s系列~mgr的应用
  6. Boost TCP serverclient 有回调无发送
  7. 1095. 山脉数组中查找目标值(三分+二分)
  8. PC版微信,也终于上线了这个超赞的功能
  9. 企业会计准则2020版pdf_企业会计准则及应用指南(2017版)
  10. 【leetcode】1090. Largest Values From Labels
  11. delphi备份Oracle,Oracle数据库自动备份工具(Delphi源码)
  12. maccms-cve_2017_17733漏洞复现
  13. LabVIEW两种方法实现Excel数据(含汉字)读取
  14. JQuery UI的拖拽功能
  15. 基于MVC的社团信息管理系统
  16. AT32F435/437的如何选择选择代码启动地址
  17. ViSual Studio美化插件设置背景图片
  18. 必应输入法VS搜狗拼音
  19. 三坐标最小二乘法原理_全最小二乘法在三坐标测量中的应用
  20. 华为 MateBook E GO 标准版评测

热门文章

  1. (Excel)常用函数公式及操作技巧之四:文本与页面设置(一)
  2. 构建高性能ASP.NET站点 开篇
  3. 工作随想---关于业务流程,落实责任制
  4. 奖金15万!全球首届“AI球球大作战:Go-Bigger多智能体决策智能挑战赛”开启
  5. 【推荐】本周值得关注的将开源论文,包含分类、分割、人脸、目标检测、ReID等...
  6. ICCV 2019 | 基于轻量级新架构OSNet的域适应改进ReID
  7. 经验 | 计算机专业科班出身如何提高自己编程能力?
  8. TensorFlow全球下载量破1亿,Jeff Dean激动不已
  9. Pygal简单使用——模拟掷骰子
  10. Python3 Ocr 初探