Struts2框架(二)
Struts2使用
第一步:在eclipse中创建一个动态页面项目,单击“file”会弹出如下的菜单。
第二步:单击“file->Dynamic Web Project”命令。即弹出如下对话框 ,并在Project name文本输入框中输入“struts2pro”的项目名称。
第三步:单击“next”按钮,进入“Configure project for building a Java application ”。
第四步:单击“next”按钮,进入 “Configure web module setting” 。
第五步:在上图中一定要选择“Generate web.xml deployment descriptor”的复选框,然后单击“Finish”完成项目的创建。如下图所示 。
第六步: 导入struts2的数据包。在struts2开发,一般情况下最少导入的jar包,去apps下的struts2-blank示例程序中copy。如下图所示。
在上图中我们看到了一个“struts2-blank.war”文件,我们把改名为:struts2-blank.rar 。对struts2-blank.rar进行解压,然后进行解压文件夹,打开apps/struts2-blank/WEB-INF/lib目录,如图所示。如下图所示。
第七上:把apps/struts2-blank/WEB-INF/lib目录中所有的jar包复制到我们项目中的 lib。
第八步:把所有的jar包添加到类库中,即选择所有jar包然后右击,在弹出的菜单中选择“build Path-Add to build Path”,完成Struts2导入数据包。如下图所示。
第九步:创建struts2的视图index.html。
index.html的代码如下:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<h1>这是我第一个struts2的视图!</h1>
</body>
</html>
第十一步:添加 struts2 的过滤器。
为了确保struts2能在你的web应用中运行,需要在web.xml中添加过滤器设置来启用struts2。如下图所示:
其中在Web.xml的代码如下。
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
id="WebApp_ID" version="3.1">
<display-name>struts2Pro</display-name>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>
<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>
注意:上面的 <url-pattern>/*</url-pattern>意味着struts2的过滤器将会被应用到这个web 应用的所有URL上
第十二步:创建 struts.xml。如果觉得写文件有困难,可以打开原来解压后struts2压缩包的apps/struts2-blank/WEB-INF/src/java目录中把struts.xml文件复制到web项目中的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.devMode" value="true" />
<package name="struts_basic" extends="struts-default">
<action name="index">
<result>/index.html</result>
</action>
</package>
</struts>
这个最简便的配置文件告诉struts2框架,如果访问的URL是http://localhost:8080/struts2pro/index.action 或是http://localhost:8080/struts2pro/index 则转发到index.html视图
Web应用中通常需要访问的Servlet API就是HttpServletRequest、HttpSession、ServletContext这3个类,分别代表JSP内置对象中的request、session、application,操作非常方便。那么在struts2中如何访问常用的内置对象呢,下面我们通过以下几个方法来完成这个操作。
一、通过ActionContext来获取
Struts2提供了ActionContext类,通过ActionContext类访问Servlet API
下面是ActionContext类中包含的几个常用方法。
1、public Object get(Object key):取得HttpServletRequest中key的值;
2、void put(String key,Object value):设置HttpServletRequest中key的值为value;
3、public Map getApplication():获取封装了ServletContext的Map对象;
4、void setApplication(Map application):设置ServletContext实例;
5、static ActionContext getContext():静态方法,获取系统的ActionContext实例;
6、Map getParameters():类似于HttpServletRequest中的getParametersMap方法;
7、public Map getSession():获取封装了HttpSession的Map对象;
8、void setSession(Map session):直接传入一个Map实例,将该Map实例里的key-value对转换为session的属性名和属性值;
实例:
package action;
import java.util.Map;
import javax.servlet.http.HttpSession;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
public class GetInternalObject extends ActionSupport {
@Override
public String execute() throws Exception {
String name="zhangSan";
//获取seesion
Map session = ActionContext.getContext().getSession();
//把想存的值放到session域中
session.put("sessionName", name);
//获取request
Map request=(Map)ActionContext.getContext().get("request");
//把想存的值存入request域中
request.put("requestName", name);
//获取application
Map application = ActionContext.getContext().getApplication();
//把需要的值存入application域中
application.put("applicationName", name);
return null;
}
}
二、通过使用ServletActionContext类来获取(个人推荐使用这种方法)
package action;
import java.util.Map;
import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import org.apache.struts2.ServletActionContext;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
public class GetInternalObject extends ActionSupport {
private HttpServletRequest request;
private HttpServletResponse response;
private HttpSession session;
private ServletContext application;
@Override
public String execute() throws Exception {
request = ServletActionContext.getRequest();
response=ServletActionContext.getResponse();
session = request.getSession();
application = session.getServletContext();
return null;
}
}
三、实现相关的Aware接口。
request 对应ServletRequestAware接口
response对应ServletResponseAware接口
session 对应SessionAware接口
application对应ServletContextAware接口
例如:
package action;
import java.util.Map;
import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import org.apache.struts2.ServletActionContext;
import org.apache.struts2.interceptor.ServletRequestAware;
import org.apache.struts2.interceptor.ServletResponseAware;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
public class GetInternalObject extends ActionSupport implements ServletRequestAware,ServletResponseAware {
private HttpServletRequest request;
private HttpServletResponse response;
private HttpSession session;
private ServletContext application;
@Override
public String execute() throws Exception {
response.getWriter().println("hello world!");
return null;
}
@Override
public void setServletRequest(HttpServletRequest arg0) {
this.request=arg0;
}
@Override
public void setServletResponse(HttpServletResponse arg0) {
this.response=arg0;
}
}