Struts2框架(二)

Struts2使用

第一步:在eclipse中创建一个动态页面项目,单击“file”会弹出如下的菜单。

Struts2框架(二)

 

第二步:单击“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框架(二)

在上图中我们看到了一个“struts2-blank.war”文件,我们把改名为:struts2-blank.rar 。对struts2-blank.rar进行解压,然后进行解压文件夹,打开apps/struts2-blank/WEB-INF/lib目录,如图所示。如下图所示。

Struts2框架(二)

 

 

第七上:把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框架,如果访问的URLhttp://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;

}

}