Struct2入门学习(完整代码)
来源:互联网 发布:淘宝店铺实名认证在哪 编辑:程序博客网 时间:2024/06/06 04:17
1.1准备工作
项目总体布局如图:
准备好所需要的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网页拿来自己用了。
- Struct2入门学习(完整代码)
- Struct2入门二
- Struct2入门三
- Struct2入门四
- Struct2 入门案例
- TensorFlow 教程 - MNIST机器学习入门完整代码
- Struct2 学习笔记
- 学习struct2第二天
- Struct2学习笔记
- Ajax入门示例完整代码
- 基于struct2的完整用户登录
- struct2.0(一)
- struct2.0(二)
- Struct2
- struct2
- 学习日记-guid完整代码
- NET-JAVA 七---struct2学习
- POSIX 多线程程序设计完整入门学习(转载)
- windows 64下mamcached安装以及java测试
- invalidate()和postInvalidate() 的区别及使用
- ubuntu14.04安装nexus
- LeakCanary 中文使用说明
- 两个常见问题
- Struct2入门学习(完整代码)
- php 操作mongodb
- shiro入门实战笔记(8)--Web项目Url配置
- Linux 控制台重定向至Console口
- Mark一下:成为CSDN博客专家
- Xamarin
- DataIntegration windows7 64 安装
- Cef应用资源布局
- Apple Pay