Struts2学习笔记1

Struts2学习笔记1

 
一.
下载
struts

2.0.1

http://struts.apache.org/downloads.html,下载struts-

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

二.试用struts

2.0.1

1. 新建一个WEBproject,将struts-

2.0.1
-all.zip
压缩包中的lib文件夹下的全部jar文件复制到WEBproject的/WEB-INF/lib文件夹下。

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

<span>Struts2学习笔记1</span>
<
filter
>

<span>Struts2学习笔记1</span>        

<
filter-name
>
struts2
</
filter-name
>

<span>Struts2学习笔记1</span>        

<
filter-class
>

<span>Struts2学习笔记1</span>            org.apache.struts2.dispatcher.FilterDispatcher
<span>Struts2学习笔记1</span>        

</
filter-class
>

<span>Struts2学习笔记1</span>    

</
filter
>

<span>Struts2学习笔记1</span>    

<
filter-mapping
>

<span>Struts2学习笔记1</span>        

<
filter-name
>
struts2
</
filter-name
>

<span>Struts2学习笔记1</span>        

<
url-pattern
>
/*
</
url-pattern
>

<span>Struts2学习笔记1</span>    

</
filter-mapping
>

<span>Struts2学习笔记1</span>    

<!–
 这里是设置struts2标签,也能够不用设置,由于在struts-core.jar的META-INF文件夹下已经包括了
<span>Struts2学习笔记1</span>        这个tld文件,J2EE容器会自己主动地载入它 

–>

<span>Struts2学习笔记1</span>    

<
jsp-config
>

<span>Struts2学习笔记1</span>        

<
taglib
>

<span>Struts2学习笔记1</span>            

<
taglib-uri
>
/s
</
taglib-uri
>

<span>Struts2学习笔记1</span>            

<
taglib-location
>

<span>Struts2学习笔记1</span>                /WEB-INF/tlds/struts-tags.tld
<span>Struts2学习笔记1</span>            

</
taglib-location
>

<span>Struts2学习笔记1</span>        

</
taglib
>

<span>Struts2学习笔记1</span>    

</
jsp-config
>

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


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

<span>Struts2学习笔记1</span>
<span>Struts2学习笔记1</span>
<%

@ page language=java contentType=text/html; charset=UTF-8
<span>Struts2学习笔记1</span>    pageEncoding
=UTF-8

%>

<span>Struts2学习笔记1</span><span>Struts2学习笔记1</span>

<%

@taglib prefix=s uri=/struts-tags
%>

<span>Struts2学习笔记1</span>

<
html
>

<span>Struts2学习笔记1</span>

<
head
>

<span>Struts2学习笔记1</span>

<
title
>
登录页面
</
title
>

<span>Struts2学习笔记1</span>

</
head
>

<span>Struts2学习笔记1</span>

<
body
>

<span>Struts2学习笔记1</span>

<
s:form 
action
=”login”
>

<span>Struts2学习笔记1</span>    

<
table 
align
=”center”
>

<span>Struts2学习笔记1</span>    

<
caption
><
h3
>
用户登录
</
h3
></
caption
>

<span>Struts2学习笔记1</span>        

<
tr
>

<span>Struts2学习笔记1</span>            

<
td
><
s:textfield 
label
=”用户名”
 name
=”username”
 
/></
td
>

<span>Struts2学习笔记1</span>        

</
tr
>

<span>Struts2学习笔记1</span>        

<
tr
>

<span>Struts2学习笔记1</span>            

<
td
><
s:password 
label
=”密  码”
 name
=”password”
 
/></
td
>

<span>Struts2学习笔记1</span>        

</
tr
>

<span>Struts2学习笔记1</span>        

<
tr 
align
=”center”
>

<span>Struts2学习笔记1</span>            

<
td
><
input 
type
=”submit”
 value
=”登录”
/></
td
><
td
><
input 
type
=”reset”
 value
=”重填”
 
/></
td
>

<span>Struts2学习笔记1</span>        

</
tr
>

<span>Struts2学习笔记1</span>    

</
table
>

<span>Struts2学习笔记1</span>

</
s:form
>

<span>Struts2学习笔记1</span>

</
body
>

<span>Struts2学习笔记1</span>

</
html
>

<span>Struts2学习笔记1</span>

3.编写Action login

<span>Struts2学习笔记1</span>
package
 org.rainlife.struts2.action;
<span>Struts2学习笔记1</span>
<span>Struts2学习笔记1</span>

import
 com.opensymphony.xwork2.ActionSupport;
<span>Struts2学习笔记1</span>
<span>Struts2学习笔记1</span><span>Struts2学习笔记1</span>

public
 
class
 LoginAction 
extends
 ActionSupport 

{
<span>Struts2学习笔记1</span>    
private String username;
<span>Struts2学习笔记1</span>
<span>Struts2学习笔记1</span>    
private String password;
<span>Struts2学习笔记1</span>
<span>Struts2学习笔记1</span>    @Override
<span>Struts2学习笔记1</span><span>Struts2学习笔记1</span>    
public String execute() throws Exception {
<span>Struts2学习笔记1</span>        
if (!(getUsername().equals(rainlife))
<span>Struts2学习笔记1</span><span>Struts2学习笔记1</span>                
&& !(getPassword().equals(rainlife))) {
<span>Struts2学习笔记1</span>            
return ERROR;
<span>Struts2学习笔记1</span><span>Struts2学习笔记1</span>        }
 else {
<span>Struts2学习笔记1</span>            
return SUCCESS;
<span>Struts2学习笔记1</span>        }

<span>Struts2学习笔记1</span>    }

<span>Struts2学习笔记1</span>
<span>Struts2学习笔记1</span><span>Struts2学习笔记1</span>    
public String getPassword() {
<span>Struts2学习笔记1</span>        
return password;
<span>Struts2学习笔记1</span>    }

<span>Struts2学习笔记1</span>
<span>Struts2学习笔记1</span><span>Struts2学习笔记1</span>    
public void setPassword(String password) {
<span>Struts2学习笔记1</span>        
this.password = password;
<span>Struts2学习笔记1</span>    }

<span>Struts2学习笔记1</span>
<span>Struts2学习笔记1</span><span>Struts2学习笔记1</span>    
public String getUsername() {
<span>Struts2学习笔记1</span>        
return username;
<span>Struts2学习笔记1</span>    }

<span>Struts2学习笔记1</span>
<span>Struts2学习笔记1</span><span>Struts2学习笔记1</span>    
public void setUsername(String username) {
<span>Struts2学习笔记1</span>        
this.username = username;
<span>Struts2学习笔记1</span>    }

<span>Struts2学习笔记1</span>
<span>Struts2学习笔记1</span>}


<span>Struts2学习笔记1</span>

在这个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

<span>Struts2学习笔记1</span>
<?
xml version=”1.0″ encoding=”UTF-8″
?>

<span>Struts2学习笔记1</span>

<!
DOCTYPE struts PUBLIC
<span>Struts2学习笔记1</span>        “-//Apache Software Foundation//DTD Struts Configuration 2.0//EN”
<span>Struts2学习笔记1</span>        “http://struts.apache.org/dtds/struts-2.0.dtd”

>

<span>Struts2学习笔记1</span>

<
struts
>

<span>Struts2学习笔记1</span>    

<
package 
name
=”struts2″
 extends
=”struts-default”
>

<span>Struts2学习笔记1</span>        

<
action 
name
=”login”
 class
=”org.rainlife.struts2.action.LoginAction”
>

<span>Struts2学习笔记1</span>            

<
result 
name
=”error”
>
/error.jsp
</
result
>

<span>Struts2学习笔记1</span>            

<
result 
name
=”success”
>
/success.jsp
</
result
>
        
<span>Struts2学习笔记1</span>        

</
action
>

<span>Struts2学习笔记1</span>    

</
package
>

<span>Struts2学习笔记1</span>

</
struts
>

<span>Struts2学习笔记1</span>

在这个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

<span>Struts2学习笔记1</span>
<span>Struts2学习笔记1</span>
<%

@ page language=java import=java.util.* pageEncoding=UTF-8
%>

<span>Struts2学习笔记1</span>

<
html
>

<span>Struts2学习笔记1</span>    

<
head
>

<span>Struts2学习笔记1</span>        

<
title
>
错误页面
</
title
>

<span>Struts2学习笔记1</span>    

</
head
>

<span>Struts2学习笔记1</span>    

<
body
>

<span>Struts2学习笔记1</span>        您不能登录!
<span>Struts2学习笔记1</span>    

</
body
>

<span>Struts2学习笔记1</span>

</
html
>

<span>Struts2学习笔记1</span>

success.jsp

<span>Struts2学习笔记1</span>
<span>Struts2学习笔记1</span>
<%

@ page language=java import=java.util.* pageEncoding=UTF-8
%>

<span>Struts2学习笔记1</span>

<
html
>

<span>Struts2学习笔记1</span>    

<
head
>

<span>Struts2学习笔记1</span>        

<
title
>
成功页面
</
title
>

<span>Struts2学习笔记1</span>    

</
head
>

<span>Struts2学习笔记1</span>    

<
body
>

<span>Struts2学习笔记1</span>        您已经登录!
<span>Struts2学习笔记1</span>    

</
body
>

<span>Struts2学习笔记1</span>

</
html
>

<span>Struts2学习笔记1</span>

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

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/119025.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • C语言为什么被人们称为表达式语言_c语言中’0’是什么意思

    C语言为什么被人们称为表达式语言_c语言中’0’是什么意思今天无意中敲下:#includeintmain(){printf(“~0==%d\n”,~0);}输出结果是~0==-1;为什么呢?我个人的大概理解如下(不保证对错):以下假设为32位系统;0的补码是0x00000000;~0则是:0xFFFFFFFF(~是按位取反,包括不好位,跟“取反”不是一个概念)0xFFFFFFFF的原码是0

    2022年9月20日
    5
  • cglib动态代理实现原理_jdk cglib 动态代理 区别

    cglib动态代理实现原理_jdk cglib 动态代理 区别cglib动态代理详解我们都知道jdk的动态代理内部调用切面无效的问题,而cglib则不会出现这种情况,这是为什么?cglib就一定不会出现内部调用切面无效的问题吗?cglib针对每一个类只创建了一个代理类吗?为什么cglib的效率要比jdk的动态代理低呢?首先我们看一下通常我们是如何使用cglib增强一个类的publicclassMain{staticclassTest{publicvoidtest(){System.out.pr

    2022年10月21日
    2
  • linux启动sh文件命令,Linux 运行 .sh 文件的两种方法「建议收藏」

    linux启动sh文件命令,Linux 运行 .sh 文件的两种方法「建议收藏」Linux运行.sh文件的两种方法文章作者:网友投稿 发布时间:2010-06-1513:31:16 来源:网络一个中等水平的Linux用户一定少不了经常执行.sh文件,当然了,你可以在图形界面下面直接双击该文件,但无疑比较浪费时间。现在介绍第一种方法:(在ubuntu下的)首先你要打开一个终端。然后输入sudosu随后输入密码。这样就取得了root用户权限。然后找到那个文件(…

    2025年7月7日
    2
  • 京东猪脸识别比赛数据预处理:用Python将视频每一帧提取存储为图片

    京东猪脸识别比赛数据预处理:用Python将视频每一帧提取存储为图片最近参加京东的猪脸识别比赛,训练集是30个视频,需要将视频的每一帧提取出来存储为图片,存入对应的文件夹(分类标签)。本例是直接调用了cv2模块中的VideoCapture。但有个问题,每一个视频转换得到的30个子文件夹里,都有2952张图片,但第2952张是空的,所以只有运用强大的Linux递归删除符合条件的文件了

    2022年6月21日
    24
  • 服务器的公网ip 和内网ip

    服务器的公网ip 和内网ip原文地址:https://zhidao.baidu.com/question/814783729071869532.html服务器公网ip  可以用于域名解析ip,服务器远程登录ip,是最主要的服务器ip地址。内网ip  不能用于域名解析。  不可以直接用于服务器远程登录,其主要作用是:跟当前帐号下的其他同集群的机器通信。  一些小型企业或者学校,通常都是申请一个固定的IP地址,…

    2022年5月6日
    35
  • Intellij 部署项目java.lang.ClassNotFoundException: org.springframework.web.context.ContextLoaderListener…

    Intellij 部署项目java.lang.ClassNotFoundException: org.springframework.web.context.ContextLoaderListener…

    2022年3月12日
    86

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号