Struts2学习笔记1

一.下载struts2.0.1

http://struts.apache.org/downloads.html,下载struts-2.0.1-all.zip,这个压缩包中包括了开发struts2所需的struts2-core.jar核心包以及其他struts2所依赖的JAR文件,另外另一些struts2的演示样例程序以及一些HTMLAPI文档。

二.试用struts2.0.1

1. 新建一个WEBproject,将struts-2.0.1-all.zip压缩包中的lib文件夹下的全部jar文件复制到WEBproject的/WEB-INF/lib文件夹下。

改动WEB-INF下的web.xml文件,增加例如以下内容:

<filter>
        
<filter-name>struts2</filter-name>
        
<filter-class>
            org.apache.struts2.dispatcher.FilterDispatcher
        
</filter-class>
    
</filter>
    
<filter-mapping>
        
<filter-name>struts2</filter-name>
        
<url-pattern>/*</url-pattern>
    
</filter-mapping>
    
<!-- 这里是设置struts2标签,也能够不用设置,由于在struts-core.jar的META-INF文件夹下已经包括了
        这个tld文件,J2EE容器会自己主动地载入它 
-->
    
<jsp-config>
        
<taglib>
            
<taglib-uri>/s</taglib-uri>
            
<taglib-location>
                /WEB-INF/tlds/struts-tags.tld
            
</taglib-location>
        
</taglib>
    
</jsp-config>

web.xml中定义了一个struts2FilterDispathcerfilter,这个FilterDispatcher用来初始化struts2而且处理全部的WEB请求。


       2. 新建一个登录页面login.jsp

<%...@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding
="UTF-8"
%>
<%...@taglib prefix="s" uri="/struts-tags"%>
<html>
<head>
<title>登录页面</title>
</head>
<body>
<s:form action="login">
    
<table align="center">
    
<caption><h3>用户登录</h3></caption>
        
<tr>
            
<td><s:textfield label="用户名" name="username" /></td>
        
</tr>
        
<tr>
            
<td><s:password label="密  码" name="password" /></td>
        
</tr>
        
<tr align="center">
            
<td><input type="submit" value="登录"/></td><td><input type="reset" value="重填" /></td>
        
</tr>
    
</table>
</s:form>
</body>
</html>

3.编写Action login

package org.rainlife.struts2.action;

import com.opensymphony.xwork2.ActionSupport;

public class LoginAction extends ActionSupport ...{
    
private String username;

    
private String password;

    @Override
    
public String execute() throws Exception ...{
        
if (!(getUsername().equals("rainlife"))
                
&& !(getPassword().equals("rainlife"))) ...{
            
return ERROR;
        }
 else ...{
            
return SUCCESS;
        }

    }


    
public String getPassword() ...{
        
return password;
    }


    
public void setPassword(String password) ...{
        
this.password = password;
    }


    
public String getUsername() ...{
        
return username;
    }


    
public void setUsername(String username) ...{
        
this.username = username;
    }


}

在这个LoginAction类中,继承了ActionSupportActionSupport xwork2这个开源框架中的一个让action可以更加高速地工作的基类,它包括了action中很多可选服务的默认实现,可以让我们更加easy地自己定义一个action

在这里我们定义了usernamepassword两个属性并提供了对应的get/set方法。而且定义了一个execute()方法,该方法覆盖ActionSupport类中的execute()方法,能够看到,它仅仅是简单地返回一个字符串(”SUCCESS””INPUT”,而不像是在struts1中的返回一个ActionForward,这两个字符串也是在ActionSupport中定义的,在ActionSupport中定义了四个String属性,分别为SUCCESS,INPUT,ERROR,LOGIN

这样,我们的action就已经完毕了,但还存在一个问题,怎么样让struts2知道我们这个自己定义的action,而且能够在HTMLJSP页面中将动作提交给action呢?答案是须要配置struts.xml文件。

       4.配置struts.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
        "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
        "http://struts.apache.org/dtds/struts-2.0.dtd"
>
<struts>
    
<package name="struts2" extends="struts-default">
        
<action name="login" class="org.rainlife.struts2.action.LoginAction">
            
<result name="error">/error.jsp</result>
            
<result name="success">/success.jsp</result>        
        
</action>
    
</package>
</struts>

在这个struts.xml配置文件里,能够发现和曾经的struts-config.xml已经全然不一样了,而在webwork的配置文件很类似。在这里,我们定义一个名name=”login”action,通过class属性指向了刚才我们创建的LoginAction类,这样,就将我们定义的action告诉给了struts2。而在HTMLJSP页面中,能够通过这个”login”这个name来将动作提交给对应的Action

假设在package中设置了namespace属性,如namespace=”/struts2”,则在JSP页面中应该将Formaction设置为”/struts2/login.action”

       5.创建error.jspsuccess.jsp

error.jsp
<%...@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<html>
    
<head>
        
<title>错误页面</title>
    
</head>
    
<body>
        您不能登录!
    
</body>
</html>

success.jsp

<%...@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<html>
    
<head>
        
<title>成功页面</title>
    
</head>
    
<body>
        您已经登录!
    
</body>
</html>

Struts2会依据在LoginAction中返回的字符串(ERRORSUCCESS)来和在struts.xml<result>中的name属性所定义的字符串匹配,并跳转到对应页面。

转载于:https://www.cnblogs.com/mengfanrong/p/3854150.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/407530.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何在oracle中查询所有用户表的表名、主键名称、索引、外键等

使用select * from user_tables 可以查询出所有的用户表。 查所有用户的表在all_tables 主键名称、外键在all_constraints 索引在all_indexes 但主键也会成为索引&#xff0c;所以主键也会在all_indexes里面。 具体需要的字段可以DESC下这几个view&#xff0c;dba登…

Vue路径的别名

这里给’components’赋予了一个地址&#xff0c;那么在程序中引入路径的时候’components’就直接可以代替路径’../src/components’

汽车驾照分类

驾照级别分类 公安部正式发布《机动车驾驶证业务工作规范》规定&#xff0c;推出机动车驾驶证分级制&#xff0c;将驾照分为A1、A2、A3、B1、B2、C1、C2、C3、C4、D、E、F、M、N、P共15个级别。 公安部根据不同车型的驾驶难度和安全要求&#xff0c;将目前驾驶证签注的3种准驾…

uni-app附件预览

// 预览附件perviewFile(file) {console.log(点击附件, file)var strfile.previewUrlvar filTypestr.split(.)console.log(filType,filType)uni.downloadFile({url: success: function(res) {console.log(打开文档成功, res);if (res.statusCode 200) {uni.saveFile({tempFile…

简单的单级下拉菜单实现

这里用纯CSS实现一个简单的单级下拉菜单&#xff0c;鼠标划过菜单标题时显示下拉菜单。 基本思路 在菜单处于光标之下时显示菜单&#xff0c;其余时候隐藏。这个过程首先得想到 :hover 伪类来实现&#xff0c;但是直接的利用伪类还不行&#xff0c;因为普通状态下菜单隐藏了&am…

C#里面的继承

举个例子&#xff1a;有一个基类RectangleEx1 classRectangleEx2 {3 privateint_x, _y, _w, _h;4 5 publicintx6 {7 get{ return_x; }8 set{ _x value; }9 }10 publicinty11 {12 get{ return_y; }13 set{ _y value; }14 }15 publicintw16 {17 get{ return_w; }18 set{ _w value…

Vue-Router的路由实例构造配置

可以通过在创建路由实例的时候传入不同的对象来选择不同的配置&#xff0c;这里的’linkActiveClass’代表的是给被激活的<router-link>添加一个叫做’active’的类名&#xff0c;然后我们就可以在css中给被激活标签设置不同的CSS了 其余的还有

uboot中的mmc命令

一&#xff1a;mmc的命令例如以下&#xff1a; 1&#xff1a;对mmc读操作 mmc read addr blk# cnt 2&#xff1a;对mmc写操作 mmc write addr blk# cnt 3&#xff1a;对mmc擦除操作 mmc erase blk# cnt 4&#xff1a;又一次搜索mmc设备 mmc rescan 5&#xff…

对STL的string进行格式化输出

突然遇到需要对一个string类型的变量进行格式化输出&#xff0c;一时不知道怎么做。google了一下&#xff0c;终于找到了答案。 ostringstream os; os < < "abc " < < abc; string s os.str(); 所需头文件&#xff1a;#includ…

WinForm UI设计与开发思路(转)

最近一年来一直在做WinForm相关的系统&#xff0c;对WinForm的UI设计有一些想法想和大家讨论&#xff08;主要是比较忙&#xff0c;所以很多只是设想&#xff0c;还没有开发实例&#xff09; 关于WinUI&#xff0c;理想的情形应该是外观比较cool&#xff0c;能给用户良好的使用…

Vue之父组件向子组件传递数据

1.创建子组件&#xff0c;在src/components/文件夹下新建一个Child.vue 2.Child.vue的中创建props&#xff0c;然后创建一个名为message的属性 3.在App.vue中注册Child组件&#xff0c;并在template中加入child标签&#xff0c;标签中添加message属性并赋值 4.我们依然可以对m…

短信发送接收装置

接到Boss的命令&#xff0c;要求我们做一个在Android手机上运行的小的例子&#xff0c;实现的功能是&#xff1a;通过一个手机向另外一个手机发送数据&#xff0c;另外一个Android手机接收到后通过USB接口输出&#xff01; 该装置主要由三个步骤组成&#xff1a; 1、发信息 2、…

MFC遍历指定目录下的所有文件/文件夹(不遍历子目录)

新建一个C控制台程序&#xff0c;增加对MFC的应用。源代码如下&#xff1a; // TraverseDir.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include <afx.h>#include <iostream>#include <WinBase.h>using namespace std;int _tmain(i…

Vue之实例的生命周期

Vue实例有一个完整的生命周期&#xff0c;也就是从开始创建、初始化数据、编译模板、挂载Dom、渲染→更新→渲染、卸载等一系列过程&#xff0c;我们称这是Vue的生命周期。通俗说就是Vue实例从创建到销毁的过程&#xff0c;就是生命周期 在Vue的整个生命周期中&#xff0c;它提…

十五步骤手把手学会制作网吧XP母盘制作

中国网吧在线 -> 网吧大学 - 技术学院 - 网管技术 - 正文 十五步骤手把手学会制作网吧XP母盘制作 2008-4-9 12:35:05 来源: 中国网吧在线 编辑&#xff1a;陈峰 [网友评论] 第1页&#xff1a;十五步骤手把手学会网吧XP母盘制作第2页&#xff1a;十五步骤手把手学会网吧XP母…

jqury关于cooke的操作写入cookie后只显示一次的DIV提示框代码

有时候当用户登录系统后&#xff0c;需要给用户弹出提示框&#xff0c;但是不需要总是弹出来&#xff0c;在这里加入访问cookie来判断是否弹出过提示框&#xff0c;如果弹出过那么保存cookie&#xff0c;下次根据cookie是否存在来判断是否弹出 <script type"text/javas…