最简单的struts实例介绍
struts2环境配置
struts2框架,大多数框架都在使用。由于工作需要,开始做Java项目。先学个struts2。
一、下载struts2
有好多版本,我下载的是struts-2.2.1.1。
二、创建web项目,导入使用struts2所必须的jar包。
我使用的是MyEclipse 7.5。建立web项目,给项目添加外部引用包(project-properties-Java Build Path-Add External Jars...)。添加的包有:commons-fileupload-1.2.1.jar,commons-io-1.3.2.jar,commons-logging-api-1.1.jar,freemarker-2.3.16.jar,javassist-3.7.ga.jar,ognl-3.0.jar,struts2-core-2.2.1.1.jar,xwork-core-2.2.1.1.jar。注意:由于struts2版本的差异性,上面提到的包不一定满足所有版本的需求。配置完struts2后,请部署运行一下。根据运行时的错误提示来添加jar包解决问题。比如,配置struts-2.2.1.1时需要commons-io-1.3.2.jar包和javassist-3.7.ga.jar包,但是2.1版本就不需要这两个包。
三、编写struts.xml文件
在MyEclipse项目中的src根目录下建立一个struts.xml文件。(可以打开下载的struts2安装包里的apps目录下的任意一个jar包,在里面的WEB_INFR/src目录下,寻找struts.xml文件,将该文件复制进项目的src根目录下,将里面的内容清空(只留下<struts>标签和头部标签即可))
四、在web.xml中加入struts2 MVC框架启动配置
和struts.xml文件的生成类似,在struts2安装包里找到web.xml文件,将里面的<filter>和<filter-mapping>标签及其内容拷贝进项目中的web.config文件即可。
五、struts2实例--简单的登录例子
5.1 编写login.jsp页面。代码如下:
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib uri="/struts-tags" prefix="s"
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01
Transitional//EN">
<html>
<head>
<title>Login</title>
<meta http-equiv="pragma"
content="no-cache">
<meta http-equiv="cache-control"
content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords"
content="keyword1,keyword2,keyword3">
<meta http-equiv="description"
content="This is my page">
</head>
<body>
<s:form
action="/login" method="post">
<s:label
value="系统登陆"></s:label>
<s:textfield name="username"
label="账号" />
<s:password name="password" label="密码" />
<s:submit value="登录" />
</s:form>
</body>
</html>
5.2 编写LoginAction类。代码如下:
package com.gsww.kingreturns.struts2.excise;
import com.opensymphony.xwork2.ActionSupport;
public class LoginAction extends ActionSupport
{//该类继承了ActionSupport类。这样就可以直接使用SUCCESS, LOGIN等变量和重写execute等方法
private static final long serialVersionUID = 1L;
private String
username;
private String password;
public String getUsername()
{
return username;
}
public void setUsername(String username)
{
this.username = username;
}
public String getPassword()
{
return password;
}
public void setPassword(String password)
{
this.password = password;
}
@Override
public String execute() throws Exception
{
if("haha".equals(username) &&
"hehe".equals(password))//如果登录的用户名=haha并且密码=hehe,就返回SUCCESS;否则,返回LOGIN
return
SUCCESS;
return LOGIN;
}
}
5.3 配置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="default" namespace="/"
extends="struts-default">
<action name="login"
class="com.gsww.kingreturns.struts2.excise.LoginAction"
method="execute">
<result
name="success">/welcome.jsp</result>
<result
name="login">/login.jsp</result>
</action>
</package>
</struts>
主要属性说明:package-name:用于区别不同的package;必须是唯一的、可用的变量名;用于其它package来继承;
package--namespace:用于减少重复代码(和struts1比较);是调用action时输入路径的组成部分;
package--extends:用于继承其它package以使用里面的过滤器等东东;
action--name:用于在一个package里区别不同的action;必须是唯一的、可用的变量名;是调用action时输入路径的组成部分;
action--class:action所在的路径(包名+类名);
action--method:action所调用的方法名;
还有其它的属性,因为项目里没有用到,就没有解释。如有需要,请查阅相关文档。
5.4 配置web.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">
<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>
需要注意的东东:这个文件里,配置的过滤器的类是:org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter。和原来配置的类不一样。原来配置的类是:org.apache.struts2.dispatcher.FileDispatcher。这是因为,从struts-2.1.3以后,org.apache.struts2.dispatcher.FileDispatcher值被标注为过时。虽然仍然起作用,但是不建议使用。
5.5 根据struts.xml里配置的内容,还需要一个welcome.jsp页面。编写welcome.jsp页面。代码如下:
<%@ page language="java" import="java.util.*"
pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01
Transitional//EN">
<html>
<head>
<title>My JSP 'welcome.jsp' starting page</title>
<meta http-equiv="pragma" content="no-cache">
<meta
http-equiv="cache-control" content="no-cache">
<meta
http-equiv="expires" content="0">
<meta http-equiv="keywords"
content="keyword1,keyword2,keyword3">
<meta http-equiv="description"
content="This is my page">
</head>
<body>
欢迎${username }!
</body>
</html>
经过上述步骤,登录实例已经编写完毕。启动tomcat,在网页地址栏里输入:http://localhost:8080/项目的名称/login.jsp,打开登录页面。如下所示:

输入用户名:haha,密码:hehe,点击登录,就来到了welcome.jsp页面。如下所示:

如果输入的用户名和密码不是haha和hehe,那么,就来到了login.jsp页面。
六、项目总结
简单的登录实例就完成了。这个例子里,还有一个需要注意的地方。LoginAction类继承了ActionSupport类,并且在execute方法的返回里,使用了SUCCESS和LOGIN变量。它们俩对应的值分别为:success、login(小写)。所以,在struts.xml里配置的result的name属性里,必须写为小写。要不然,会报"Could
not find action or result"的错误。
最简单的struts实例介绍的更多相关文章
- .NET多线程总结和实例介绍
摘要:.Net提供了许多多线程编程工具,可能是因为太多了,所以掌握起来总是有一些头疼,我在这里讲讲我总结的一些多线程编程的经验,希望对大家有帮助. 1.多线程的总结 不需要传递参数,也不需要返回参数 ...
- 【转】Web Service单元测试工具实例介绍之SoapUI
转自:http://blog.csdn.net/oracle_microsoft/article/details/5689585 SoapUI 是当前比较简单实用的开源Web Service 测试工具 ...
- osg实例介绍
osg实例介绍 转自:http://blog.csdn.net/yungis/article/list/1 [原]osgmotionblur例子 该例子演示了运动模糊的效果.一下内容是转自网上的:原理 ...
- 审核流(3)低调奢华,简单不凡,实例演示-SNF.WorkFlow--SNF快速开发平台3.1
下面我们就从什么都没有,结合审核流进行演示实例.从无到有如何快速完美的实现,然而如此简单.低调而奢华,简单而不凡. 从只有数据表通过SNF.CodeGenerator代码生成器快速生成单据并与审核流进 ...
- tcpdump wireshark 实用过滤表达式(针对ip、协议、端口、长度和内容) 实例介绍
tcpdump wireshark 实用过滤表达式(针对ip.协议.端口.长度和内容) 实例介绍 标签: 网络tcpdst工具windowslinux 2012-05-15 18:12 3777人阅读 ...
- 实例介绍Cocos2d-x开关菜单
开关菜单是MenuItemToggle类实现的,它是一种可以进行两种状态切换的菜单.它可以通过下面的函数创建: static MenuItemToggle*createWithCallback ( ...
- PHP 2:从一个实例介绍学习方法
原文:PHP 2:从一个实例介绍学习方法 在前面我已经描述了PHP,Apache以及MySQL的安装与配置.下面将介绍一下我如何学习PHP.首先我自己已经有了一些编程经验,就拿我自己而言,已经熟悉C/ ...
- Web Service单元测试工具实例介绍之SoapUI
原文 Web Service单元测试工具实例介绍之SoapUI SoapUI是当前比较简单实用的开源Web Service测试工具,提供桌面应用程序和IDE插件程序两种使用方式.能够快速构建项目和组 ...
- 使用ssm(spring+springMVC+mybatis)创建一个简单的查询实例(一)
梳理下使用spring+springMVC+mybatis 整合后的一个简单实例:输入用户的 ID,之后显示用户的信息(此次由于篇幅问题,会分几次进行说明,此次是工程的创建,逆向生成文件以及这个简单查 ...
随机推荐
- Android四大组件与进程启动的关系(转)
一. 概述 Android系统将进程做得很友好的封装,对于上层app开发者来说进程几乎是透明的. 了解Android的朋友,一定知道Android四大组件,但对于进程可能会相对较陌生. 一个进程里面可 ...
- hdoj 1533 Going Home 【最小费用最大流】【KM入门题】
Going Home Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Tota ...
- E. Dreamoon and Strings(Codeforces Round #272)
E. Dreamoon and Strings time limit per test 1 second memory limit per test 256 megabytes input stand ...
- 解决运行scrapy是报错No module named cryptography,解决cryptography的安装问题,解决libffi的安装问题
在linux下配置完运行是出现ImportError: No module named cryptography.hazmat.bindings.openssl.binding的错误.原因是crapt ...
- swift语言初见
下面是swift得基础语法部分内容 // main.swift // helloSwift // // Created by cyteven on 14-7-23. // Copyright ...
- ExtJs里表格自动显隐滚动条
ExtJs里面,layout:'border'这种布局应该很常用,但我用的时候,因为不熟,走了一些弯路.比如说,一个页面,大体布局是这样的: 上:查询输入框 中+下:查询结果(表格,底部有分页控件) ...
- 一场由过滤器Filter引发的血案
一场由过滤器Filter引发的血案 事件起因 本来应该是下图的登录界面 变成了这样 What's the fuck????? 抓狂 原因 解决方法: 在过滤器中给资源文件开个绿色通道
- 浅谈Linux Kernel 中循环链表的实现
前阵子在弄缓存的时候,我们需要将qemu对于磁盘镜像文件写请求串成一个链表,最终将这个链表里面的写请求全部刷回到镜像文件里面,那么我们便需要一个强健,可靠的链表的接口,于是我们仿照Linux 2.4. ...
- 主机与虚拟机互ping
1.设置虚拟机网络连接方式(如下图): 2.设置主机和虚拟机的ip为同一个网段,如主机ip:192.168.28.1,虚拟机ip:192.168.28.128 3.如果相互还是ping不通,就检查一下 ...
- MemCache在Windows下环境的搭建及启动
sc create "memcached-11212" start= auto binPath= "D:\memcached_en32or64\x64\memcached ...