Struts2学习 Action
来源:互联网 发布:房屋平面图绘制软件 编辑:程序博客网 时间:2024/05/22 00:22
设置Tomcat:
window->Preferences->MyEclipse->Servers->Tomcat->Tomcat6.x
然后选择tomcat home directory ->enable-> finish
设置JDK:
window-->Preferences->Java->Installed JRE
如果没有对应的JDK(不是JRE),选择add->standard VM -> next->选择JDK对应的Directory->将刚刚设定的JDK设为默认
查看jar包源码:
右击jar文件->Properties->Java Source Attachment->External Folder->D:/share/tools/struts-2.1.6/src/core/src/main/java
加入javadoc文档:
右击jar文件->Properties->Javadoc Location->Browse
1.建立第一个struts2的程序
a) 找到struts目录下对应的apps目录
b) 解压struts2-blank-2.1.6.war
c) Copy对应的lib的jar文件,需要除junit和spring-test之外的所有文件,其中commons-io的jar包会在文件上传和下载时需要,其他为必须
d) Copy对应的struts.xml到src目录,在package explorer视图进行操作
e) 注释掉struts.xml的多余内容
f) 建立HelloStruts2_1.jsp文件
h) 在struts.xml中照原配置进行对应的配置
i) 修改对应的web.xml,建立struts2的filter,添加代码如下:
<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>
注:①修改jsp文件的默认编码属性window-preferences-web-jspfiles-设为Chinese,National Standard
②建立struts的dev-mode,好处在于我们修改了配置文件的时候能够自动热替换
在struts.xml中的<package></package>前加入
③认识Action的后缀名,在struts2默认中,带不带action都可以
<constant name="struts.devMode" value="true" />
2.Namespace
namespace决定了action的访问路径,默认为"",可以接收所有路径的action。namespace可以写为/,或者/xxx,或者/xxx/yyy,对应的action访问路径为/index.action,/xxx/index.action,或者/xxx/yyy/index.action。
注:namespace最好也用模块来进行命名。
3.Action Introduction
具体视图的返回可以由用户自己定义的Action来决定,具体的手段是根据返回的字符串找到对应的配置项,来决定视图的内容。
具体Action的实现可以是一个普通的java类,里面有public String execute方法即可,或者实现Action接口,不过最常用的是从ActionSupport继承,好处在于可以直接使用Struts2封装好的方法。
从ActionSupport继承实现Action(最常用):
import com.opensymphony.xwork2.ActionSupport;
public class IndexAction extends ActionSupport {
public String execute()
{
return "success";
}
}
4.path
struts2中的路径问题是根据action的路径而不是jsp路径来确定,所以尽量不要使用相对路径。
虽然可以用redirect方式解决,但redirect方式并非必要。
解决办法非常简单,统一使用绝对路径。(在jsp中用request.getContextRoot方式来拿到webapp的路径)
或者使用myeclipse经常用的,指定basePath
指定basePath:
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
5.Action Method
Action执行的时候并不一定要执行execute方法,可以在配置文件中配置Action的时候用method=来指定执行哪个方法,也可以在url地址中动态指定(动态方法调用DMI)(推荐)
<% String context = request.getContextPath(); %>
<a href="<%=context %>/user/userAdd">添加用户</a>
<a href="<%=context %>/user/user!add">添加用户</a>
前者会产生太多的action,所以不推荐使用
6.Action Wildcard(通配符)
使用通配符,将配置量降到最低。不过,一定要遵守"约定优于配置"的原则。
<action name="*_*" class="com.struts.wildcard.{1}Action" method="{2}">
<result >
/{1}_{2}_success.jsp
</result>
</action>
{1}对应前面的第一个'*',{2}对应前面的第二个'*',例如要调用Student_add_success.jsp则可以创建连接如下:
<a href="actions/Studentadd">添加学生</a>
7.接收参数的方法(一般用属性或者DomainModel来接收)
①使用Domain Model接收参数
(需要创建两个类:一个action类,一个model类,不在action类中new一个model类对象,而是对model类直接用set/get方法)
<a href="user/user!add?user.name=a&user.passwd=p">添加用户</a>
②使用action属性接收参数
<a href="user/user!add?name=a&age=9">添加用户</a>
③ 使用ModelDriven接收参数(需要创建两个类:一个action类,一个model类,并在action中new一个model类对象)
<a href="user/user!add?name=a&age=8"> 添加用户</a>
8.简单参数验证addFieldError
使用addFieldError方法和s:fieldError标签简单处理数据校验
User Add Error!
<s:fielderror fieldName="name" theme="simple"/>
<br />
<s:property value="errors.name[0]"/>
<s:debug></s:debug>
其中, fieldName值和action中的addFieldError方法中传的一致,property value显示值,值可以在<s:debug></s:debug>中查到。
Action中的add方法如下:
public String add()
{
if(name==null||!name.equals("admin"))
{
this.addFieldError("name", "name is error");
this.addFieldError("name", "name is too long");
return ERROR;
}
return SUCCESS;
}
9.访问Web元素
a) Map类型
i. IoC(推荐使用)
package com.struts2.user.action; import java.util.Map; import org.apache.struts2.interceptor.ApplicationAware; import org.apache.struts2.interceptor.RequestAware; import org.apache.struts2.interceptor.SessionAware; import com.opensymphony.xwork2.ActionSupport; public class LoginAction2 extends ActionSupport implements RequestAware,SessionAware, ApplicationAware { public void setRequest(Map<String, Object> arg0) { this.request=arg0; public void setSession(Map<String, Object> arg0) { this.session=arg0; public void setApplication(Map<String, Object> arg0) { this.application=arg0; }
private Map<String,Object> request;
private Map<String,Object> session;
private Map<String,Object> application;
public String execute(){
request.put("r1", "r2");
session.put("s1", "s2");
application.put("a1", "a2");
return SUCCESS;
}
// TODO Auto-generated method stub
}
// TODO Auto-generated method stub
}
// TODO Auto-generated method stub
}
ii. 依赖Struts2
import java.util.Map; import com.opensymphony.xwork2.ActionContext; import com.opensymphony.xwork2.ActionSupport; public class LoginAction1 extends ActionSupport { private Map request; }
private Map session;
private Map application;
public LoginAction1()
{
request=(Map)ActionContext.getContext().get("request");
session=ActionContext.getContext().getSession();
application=ActionContext.getContext().getApplication();
}
public String execute()
{
request.put("r1", "r1");
session.put("s1", "s1");
application.put("a1", "a1");
return SUCCESS;
}
b) 原始类型
i. IoC
package com.struts2.user.action; import javax.servlet.ServletContext; import javax.servlet.http.*; import org.apache.struts2.ServletActionContext; import com.opensymphony.xwork2.ActionSupport; public class LoginAction3 extends ActionSupport { private HttpServletRequest request; }
private HttpSession session;
private ServletContext application;
public LoginAction3()
{
request=ServletActionContext.getRequest();
session=request.getSession();
application=session.getServletContext();
}
public String execute()
{
request.setAttribute("r1", "r3");
session.setAttribute("s1", "s3");
application.setAttribute("a1", "a3");
return SUCCESS;
}
ii. 依赖Struts2
package com.struts2.user.action;
import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import org.apache.struts2.interceptor.ServletRequestAware;
import com.opensymphony.xwork2.ActionSupport;
public class LoginAction4 extends ActionSupport implements ServletRequestAware {
private HttpServletRequest request;
private HttpSession session;
private ServletContext application;
public String execute()
{
request.setAttribute("r1", "r4");
session.setAttribute("s1", "s4");
application.setAttribute("a1", "a4");
return SUCCESS;
}
public void setServletRequest(HttpServletRequest arg0) {
// TODO Auto-generated method stub
request=arg0;
this.session=request.getSession();
this.application=session.getServletContext();
}
}
10.包含文件配置
<?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>
<constant name="struts.devMode" value="true" />
<include file="login.xml" />
</struts>
11.默认action处理
<default-action-ref name="index"></default-action-ref>
- struts2 Action学习
- Struts2学习 Action
- Struts2学习之Action
- Struts2 Action学习
- struts2的action的学习
- 实现Action---struts2学习笔记
- 配置Action---struts2学习笔记
- struts2学习笔记 配置action
- Struts2基础学习(1)-Action
- Struts2 学习笔记03 Action
- Struts2框架学习(二) Action
- Struts2框架学习(二) Action
- Struts2学习笔记之action
- struts2学习——Action
- Struts2框架学习(二) Action
- Struts2学习自定义Action 方法
- struts2中Action的学习
- Struts2框架学习(二) Action
- 从SQL SERVER数据库生产网站静态页面的程序开发过程
- how jconsole connected to the remote servicemix
- javascript function.call()调用方式与function()的区别
- COPY目录下的所有子目录和文件到其他目录
- ASP.NET网站防止SQL注入攻击
- Struts2学习 Action
- 使用intellij开发android应用
- WinCe下获取系统时间的API函数(精确到ms级)
- Android数据库操作
- 无线传感器网络的拓扑控制技术
- C#/asp.net 正则表达式 判断邮件格式- -判断是否为数字
- QT菜鸟入门第三弹:模拟时钟例程
- xcode文件描述
- linux创建一定大小文件命令--dd