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

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

时间: 2024-08-01 06:10:10

Strust2初之体验的相关文章

树莓派 Zero WH 初使用体验

原文:树莓派 Zero WH 初使用体验 12号买了一个树莓派 Zero WH,这个是什么型号呢?其实和树莓派Zero是同一系列的,加上W则表示多了无线Wifi和蓝牙模块,加上H则表示在板子上已经焊接好了2x20的排针. 这个Zero真的很迷你,下面给大家看一下实拍图. 关于树莓派Zero系列,官方的定价是 树莓派Zero 5美元 树莓派Zero W 10美元 树莓派Zero WH 未知(最多11美元吧) 国内一般都是95元以上的(人家海淘回来也是要小费的??) 关于具体的配置和差别,请看下图

Android 5.0 Lollipop初上手体验

在等了好几天还没有等到OTA升级提示,前天笔者给Nexus4线刷入了官方提供的Lollipop的镜像,在试用了这两天之后,现在总结下自己感觉很惊艳的地方和一些地方的吐槽.(点击图片可以查看大图) 1.Material Design: 不得不说,这次的UI风格与用户交互改变很大,主要的就是谷歌推行的Material Design,刚开始看着和用着都觉得挺别扭,但是一旦接受了这个设定,还是挺带感的括弧笑. 典型的用户界面与交互设计可以参考Gmail,不得不说,Gmail一直是谷歌给开发者设计应用的规

Git/GitHub 初用体验与总结

Git,一个神奇而又陌生的东西,居然到现在才去了解它,就像有一位仁兄说的,现在不会用Git真的都不好意思说自己搞IT的. 简单的讲,这Git是目前最先进的分布式版本控制系统,和他相对应的就是众所周知的SVN(一个集中化版本控制系统). 集中化的版本控制系统(Centralized Version Control Systems,简称 CVCS),比如 CVS.Subversion(SVN) 以及 Perforce 等,都有一个单一的集中管理的服务器,保存所有文件的修订版本,而协同工作的人们都通过

赴日 ERP, SAP开发到底是什么?

最近有很多赴日的ERP, SAP开发的工作机会,很多程序员朋友不懂这个方面,就胡乱接受了offer,那么ERP,SAP开发岗到底是什么呢?这些人在日本如何生存呢? 本人亲身体验了一把,感觉时代回到了60年代初,体验到赴美的那些劳苦的华侨同胞的辛苦.(没有那么辛苦,但会比国内辛苦很多!) 日本有很多公司打着ERP, SAP开发的旗号,作为"人(fan)力(mai)资(ren)源(kou)"的公司存在. 首先开出比国内高出一倍的工资和一堆福利,比国内更优越的生活条件. 在等待签证时,告诉你

erlang 初体验

最近测试了一下 erlang的坑... 如不出意外.... 大家第一眼看到这语法... 心里第一句一定是"我擦.这TM都是啥!!!!!" 没有变量!!! 没有结构体!!! 没有循环!!! 好吧,至少我是这样想的. 找了半天..连个if也不知道怎么写.. 这记录一些基本常识.. -module(module_name)  %%定义模块 括号内的要和文件名相同. -export([fun1/1 fun2/2]) %%这里是导出2个函数对外使用  函数名/参数名. 一个简单的函数定义如下 f

linux初体验

第一次听到linux这个'词语'是在一次偶然的朋友聊天中朋友提到的,之前压根没听到过'这个东西',所以我可以说是个linux的新新手,菜鸟都不算. 截至到目前,我已经开始linux系统运维学习有差不多10天时间了.在没接触linux之前,我对它的认识仅仅是:它是个计算机系统.决定学习linux系统运维之前,自我以为运维应该是对系统的一些日常维护之类的,不会很难的东西,我更希望运维是个不难的东西,我个人很笨,对难的东西可能接受的很慢,所以我愿意认为运维是很简单的,这样我就可以轻轻松松的掌握运维相关

【Spark深入学习 -15】Spark Streaming前奏-Kafka初体验

----本节内容------- 1.Kafka基础概念 1.1 出世背景 1.2 基本原理 1.2.1.前置知识 1.2.2.架构和原理 1.2.3.基本概念 1.2.4.kafka特点 2.Kafka初体验 2.1 环境准备 2.2 Kafka小试牛刀 2.2.1单个broker初体验 2.2.2 多个broker初体验 2.3 Kafka分布式集群构建 2.3.1 Kafka分布式集群构建 2.3.2 Kafka主题创建 2.3.3 生产者生产数据 2.3.4消费者消费数据 2.3.5消息的

Java8初体验(二)Stream语法详解

原文链接:http://ifeve.com/stream/ 1. Stream初体验 我们先来看看Java里面是怎么定义Stream的: A sequence of elements supporting sequential and parallel aggregate operations. 我们来解读一下上面的那句话: Stream是元素的集合,这点让Stream看起来用些类似Iterator: 可以支持顺序和并行的对原Stream进行汇聚的操作: 大家可以把Stream当成一个高级版本的

hibernate--CRUD初体验

hibernate的crud操作初体验. 看具体实例 package com.fuwh.model; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.Id; import org.hibernate.annotations.GenericGenerator; @Entity publ