Struts2应用的开发流程

时间:2023-03-08 16:59:36
Struts2应用的开发流程

Struts2的开发流程

为了能够在eclipse中使用Struts2在进行开发时,需要根据需要导入一些有关的jar包;

在官网下载相关的压缩包,这里下载了两个:struts-2.3.30-all.zip和struts-2.3.30-docs.zip,解压到同一个文件夹中。

在eclipse中新建了新的Dymamic Web Project以后,为该项目添加Struts2支持:

1.复制Struts2解压目录下struts2-blank.war解压后WEB-INF\lib目录下的所有jar包到web项目中的WebContent\WEB-INF\lib下;

2.把这些复制的jar包导入项目中去。

开始使用Struts2开发:

1.在web.xml中定义拦截器拦截用户请求:

  如果eclipse中生成的Dynamic Web Project中没有自动生成web.xml文件,可以从Tomcat相关的文件夹中找到一个默认的web.xml文件,把此文件复制到项目的WEB-INF目录下(不是WEB-INF\lib下)。

  也可以在struts2-blank.war解压后目录的WEB-INF下直接复制一个web.xml。

  修改此web.xml文件,如下所示:

<?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">

    <!-- 定义核心拦截器 -->
<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>

2.定义包含表单数据的JSP页面:

  写一个提交请求的JSP页面,此JSP页面将会将请求提交给相关的Action类来处理。

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<s:form action="test_1">
    <s:textfield name="username" key="username"/>
    <s:submit key="login" value="login"/>
</s:form>
</body>
</html>

3.定义处理用户请求的Action类:

  写一个与以上JSP关联的Action类来处理该JSP提交的请求。在eclipse中直接放在在src目录下即可

package testAction;

import com.opensymphony.xwork2.ActionSupport;

public class Test_1Action extends ActionSupport{
    //定义封装请求参数的成员变量
    private String username;
    //setter、getter方法
    public void setUsername(String username){
        this.username = username;
    }
    public String getUsername(){
        return this.username;
    }
    //定义处理请求的execute方法
    public String execute()throws Exception{
        if(getUsername()!=null){
            return SUCCESS;
        }else{
            return ERROR;
        }
    }
}

4.编写物理视图资源文件:

  为了简单,我们把物理视图资源文件直接放在项目的webContent目录下

  error.jsp:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>error page</title>
</head>
<body>
    错误页面!username为空!
</body>
</html>

  welcome.jsp:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>welcome page</title>
</head>
<body>
    登陆成功!
</body>
</html>

5.配置处理用户请求的Action类并配置Action的处理结果和物理视图资源的映射关系::

  使得JSP页面的请求能够准确找到与此JSP页面相关的Action类。

  配置Action需要在项目的src目录下添加struts.xml文件,此文件的默认文件也可以在struts2-blank.war解压后目录的WEB-INF\classes下找到,把其修改为如下内容:

<?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="false" />
    <constant name="struts.devMode" value="true" />

    <package name="test" extends="struts-default">
        <!--
            定义了名为test_1的Action;
            处理请求的Action类为testAction.Test_1Action.java
         -->
        <action name="test_1" class="testAction.Test_1Action">
            <!-- 定义逻辑视图与物理视图之间的映射关系 -->
            <result name="error">error.jsp</result>
            <result name="success">welcome.jsp</result>
        </action>
    </package>
</struts>