Struct2入门学习(完整代码)
2016-02-18 15:09
246 查看
1.1准备工作
项目总体布局如图:
![](https://img-blog.csdn.net/20160218150942072?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
准备好所需要的jar包,在web.xml文件中配置Struct2,在src目录下新建struts.xml文件。所需要的jar包有
asm-3.3.jar
asm-commons-3.3.jar
asm-tree-3.3.jar
commons-fileupload-1.3.1.jar
commons-io-2.2.jar
commons-lang3-3.1.jar
commons-logging-1.1.3.jar
freemarker-2.3.19.jar
javassist-3.11.0.GA.jar
javax.servlet-api-3.1.0.jar
log4j-1.2.17.jar
ognl-3.0.6.jar
servlet-api.jar
struts2-core-2.3.16.1.jar
xwork-core-2.3.16.1.jar
上述jar包里面并不是所有的都是必要的,有些需要用到时候再添加也行,此处不再一一剔除。然后将这些jar包复制到WEB-INF/lib下,然后打开WEB-INF下的web.xml文件配置struts2,如下:
<?xml version="1.0" encoding="UTF-8"?>
<web-app id="WebApp_9" version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<display-name>StructTest</display-name>
<welcome-file-list>
<welcome-file>login.jsp</welcome-file>
</welcome-file-list>
<!-- Struts2配置 -->
<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>
</web-app>
然后在src目录下新建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 name="struts.enable.DynamicMethodInvocation" value="true" />
<package name="struts2" extends="struts-default">
<action name="login" class="actionIt.Login">
<result name="success">/welcome.jsp</result>
<result name="error">/error.jsp</result>
</action>
<action name="UserAction" class="actionIt.UserAction">
<result name="list">/error.jsp</result>
<result name="add">/error.jsp</result>
</action>
</package>
</struts>
name=”XXXX”表示的是映射名称
class=”XXXX”表示的是路径即”包名.类名”
<constant name="struts.enable.DynamicMethodInvocation" value="true" />
设置完句话你就可以在一个form下对应自己新建的多个函数,有时候在一个form下点击不同的按钮要响应不同的事件,但是structs2在extends ActionSuport后默认重写excute函数不会执行其他的函数,这时候需要自己重新设置这个属性,然后在result中的name=”XXXX”这个name对应的就是你自己写的方法,如下两个jsp页面,先看第一个默认重写excute函数第一个页面login.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<%@ taglib prefix="s" uri="/struts-tags" %>
<html>
<head><title>登录界面</title></head>
<body>
<form action="login.action">
<table align="center">
<tr>
<td>用户名:</td>
<td><input type="text" name="username"></td>
</tr>
<tr>
<td>密 码:</td>
<td><input type="password" name="userpass"></td>
</tr>
<tr>
<td></td>
<td>
<input type="submit" value="提 交">
<input type="reset" value="取 消">
</td>
</tr>
</table>
</form>
</body>
</html>
对应的Login.Java类,这个地方如果你是用的是ajax请求,可以将这些变量定义成public Srting类型的就能直接拿来用了,set get就不用写了。至于现在这个方法行不行我也没试,有兴趣的可以试试。
package actionIt;
import com.opensymphony.xwork2.ActionSupport;
public class Login extends ActionSupport
{
private static final long serialVersionUID = 2098072226829821198L;
private String username;
private String userpass;
public String execute(){
if("zel".equals(username)&&"1111".equals(userpass))
{
return SUCCESS;
}
else
{
return ERROR;
}
}
public void setUsername(String username)
{
this.username = username;
}
public void setUserpass(String userpass)
{
this.userpass = userpass;
}
public String getUsername()
{
return username;
}
public String getUserpass()
{
return userpass;
}
}
调用自己重写的方法,welcome.jsp页面如下
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<%@ page import="java.util.*;" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>欢迎</title>
</head>
<body>
<font color="red" size="10">登录成功!</font>
<s:form action="UserAction.action" theme="simple">
<!--
s:submit中的method属性和struts.xml中action标签中的method属性一致(method属性指定了要调用的方法)。
在s:submit中可以为一个action设置多个method,而在struts.xml中action标签中只能设置一个method。
当然,在struts.xml中可以为一个action指定多个actionName(action别名)。
总结:一个Action类,可以对应多个action别名,每个action别名对应多个method属性(通过s:submit标签设置)。
-->
<table align="center">
<tr>
<td>list:</td>
<td><s:submit value="进入List页面" method="list"/></td>
</tr>
<tr>
<td>add:</td>
<td><s:submit value="进入Add页面" method="add"/></td>
</tr>
</table>
</s:form>
</body>
</html>
对应的UserAction.java类,这时候这个extends ActionSupport其实是可有可无的,应为你已经不在使用excute这个方法。
package actionIt;
import javax.servlet.http.HttpServletRequest;
import org.apache.struts2.interceptor.ServletRequestAware;
import com.opensymphony.xwork2.ActionSupport;
public class UserAction extends ActionSupport implements ServletRequestAware{
public javax.servlet.http.HttpServletRequest request;
/**
*
*/
private static final long serialVersionUID = 1L;
// 获得HttpServletRequest对象
public void setServletRequest(HttpServletRequest request)
{
this.request = request;
}
public String list() throws Exception {
request.setAttribute("name", "常山赵子龙");
return "list";
}
public String add() throws Exception{
request.setAttribute("name", "赵云");
return "add";
}
}
最后一个辅助页面error.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<%@ page import="java.util.*;" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title></title>
</head>
<body>
<font color="red" size="10"><%=request.getAttribute("name")%></font>
<script type="text/javascript">
var name = "${request.getAttribute('name')}";
alert(name);
</script>
</body>
</html>
这是我以前学习是的测试项目,希望能给初学者带来些许帮助,但是structs2标签太丑了,看着不太好看而且我更喜欢html页面,jsp虽然简单但是总有一种眉毛胡子一把抓的感觉,下一篇为大家整理一下structs2+ajax,这样大家就可以随便做自己的网页,随便从网站上下载html网页拿来自己用了。
项目总体布局如图:
准备好所需要的jar包,在web.xml文件中配置Struct2,在src目录下新建struts.xml文件。所需要的jar包有
asm-3.3.jar
asm-commons-3.3.jar
asm-tree-3.3.jar
commons-fileupload-1.3.1.jar
commons-io-2.2.jar
commons-lang3-3.1.jar
commons-logging-1.1.3.jar
freemarker-2.3.19.jar
javassist-3.11.0.GA.jar
javax.servlet-api-3.1.0.jar
log4j-1.2.17.jar
ognl-3.0.6.jar
servlet-api.jar
struts2-core-2.3.16.1.jar
xwork-core-2.3.16.1.jar
上述jar包里面并不是所有的都是必要的,有些需要用到时候再添加也行,此处不再一一剔除。然后将这些jar包复制到WEB-INF/lib下,然后打开WEB-INF下的web.xml文件配置struts2,如下:
<?xml version="1.0" encoding="UTF-8"?>
<web-app id="WebApp_9" version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<display-name>StructTest</display-name>
<welcome-file-list>
<welcome-file>login.jsp</welcome-file>
</welcome-file-list>
<!-- Struts2配置 -->
<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>
</web-app>
然后在src目录下新建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 name="struts.enable.DynamicMethodInvocation" value="true" />
<package name="struts2" extends="struts-default">
<action name="login" class="actionIt.Login">
<result name="success">/welcome.jsp</result>
<result name="error">/error.jsp</result>
</action>
<action name="UserAction" class="actionIt.UserAction">
<result name="list">/error.jsp</result>
<result name="add">/error.jsp</result>
</action>
</package>
</struts>
name=”XXXX”表示的是映射名称
class=”XXXX”表示的是路径即”包名.类名”
<constant name="struts.enable.DynamicMethodInvocation" value="true" />
设置完句话你就可以在一个form下对应自己新建的多个函数,有时候在一个form下点击不同的按钮要响应不同的事件,但是structs2在extends ActionSuport后默认重写excute函数不会执行其他的函数,这时候需要自己重新设置这个属性,然后在result中的name=”XXXX”这个name对应的就是你自己写的方法,如下两个jsp页面,先看第一个默认重写excute函数第一个页面login.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<%@ taglib prefix="s" uri="/struts-tags" %>
<html>
<head><title>登录界面</title></head>
<body>
<form action="login.action">
<table align="center">
<tr>
<td>用户名:</td>
<td><input type="text" name="username"></td>
</tr>
<tr>
<td>密 码:</td>
<td><input type="password" name="userpass"></td>
</tr>
<tr>
<td></td>
<td>
<input type="submit" value="提 交">
<input type="reset" value="取 消">
</td>
</tr>
</table>
</form>
</body>
</html>
对应的Login.Java类,这个地方如果你是用的是ajax请求,可以将这些变量定义成public Srting类型的就能直接拿来用了,set get就不用写了。至于现在这个方法行不行我也没试,有兴趣的可以试试。
package actionIt;
import com.opensymphony.xwork2.ActionSupport;
public class Login extends ActionSupport
{
private static final long serialVersionUID = 2098072226829821198L;
private String username;
private String userpass;
public String execute(){
if("zel".equals(username)&&"1111".equals(userpass))
{
return SUCCESS;
}
else
{
return ERROR;
}
}
public void setUsername(String username)
{
this.username = username;
}
public void setUserpass(String userpass)
{
this.userpass = userpass;
}
public String getUsername()
{
return username;
}
public String getUserpass()
{
return userpass;
}
}
调用自己重写的方法,welcome.jsp页面如下
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<%@ page import="java.util.*;" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>欢迎</title>
</head>
<body>
<font color="red" size="10">登录成功!</font>
<s:form action="UserAction.action" theme="simple">
<!--
s:submit中的method属性和struts.xml中action标签中的method属性一致(method属性指定了要调用的方法)。
在s:submit中可以为一个action设置多个method,而在struts.xml中action标签中只能设置一个method。
当然,在struts.xml中可以为一个action指定多个actionName(action别名)。
总结:一个Action类,可以对应多个action别名,每个action别名对应多个method属性(通过s:submit标签设置)。
-->
<table align="center">
<tr>
<td>list:</td>
<td><s:submit value="进入List页面" method="list"/></td>
</tr>
<tr>
<td>add:</td>
<td><s:submit value="进入Add页面" method="add"/></td>
</tr>
</table>
</s:form>
</body>
</html>
对应的UserAction.java类,这时候这个extends ActionSupport其实是可有可无的,应为你已经不在使用excute这个方法。
package actionIt;
import javax.servlet.http.HttpServletRequest;
import org.apache.struts2.interceptor.ServletRequestAware;
import com.opensymphony.xwork2.ActionSupport;
public class UserAction extends ActionSupport implements ServletRequestAware{
public javax.servlet.http.HttpServletRequest request;
/**
*
*/
private static final long serialVersionUID = 1L;
// 获得HttpServletRequest对象
public void setServletRequest(HttpServletRequest request)
{
this.request = request;
}
public String list() throws Exception {
request.setAttribute("name", "常山赵子龙");
return "list";
}
public String add() throws Exception{
request.setAttribute("name", "赵云");
return "add";
}
}
最后一个辅助页面error.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<%@ page import="java.util.*;" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title></title>
</head>
<body>
<font color="red" size="10"><%=request.getAttribute("name")%></font>
<script type="text/javascript">
var name = "${request.getAttribute('name')}";
alert(name);
</script>
</body>
</html>
这是我以前学习是的测试项目,希望能给初学者带来些许帮助,但是structs2标签太丑了,看着不太好看而且我更喜欢html页面,jsp虽然简单但是总有一种眉毛胡子一把抓的感觉,下一篇为大家整理一下structs2+ajax,这样大家就可以随便做自己的网页,随便从网站上下载html网页拿来自己用了。
相关文章推荐
- Cef应用程序结构
- Java集合
- java switch 异常 case expressions must be constant expressions
- eclipse导入项目出错
- Python语言实践分析 -- 闭包
- Springmvc整合tiles框架简单入门示例(maven)
- ContentProvider和Uri详解
- 多重继承《C++ primer 3th》
- 在asp中应用vb语言调用Graphics 类
- Java——静态导入
- C# 约瑟夫环算法
- neuq oj 1034: C基础-求同存异 C++
- JavaSE入门学习22:Java面向对象之final关键字
- ThinkPHP 3.2 中获取所有函数方法名,以及注释,完整可运行
- python小练习之登录程序,登录三次错误之后锁定账户
- Java——List的实现类
- ECharts仪表盘实例代码(附源码下载)
- JAVA_JCF(Java Collection Framework)学习笔记(五)
- C# 打印表格源码(自定义)
- [Python for Data Anlysis]CH04 Numpy Basics -- Arrays and Vectorized Computation