您的位置:首页 > 编程语言 > Java开发

第一篇——Struts2的工作原理及HelloWorld简单实现

2018-03-26 16:34 615 查看
Struts2工作原理:



一个请求在Struts框架中的处理步骤:
    1、客户端初始化一个指向Servlet容器(例如Tomcat)的请求;

    2、这个请求经过一系列的过滤器(Filter);

    3、接着FilterDispatcher(2.1.2之后是StrutsPrepareAndExecuteFilter)被调用,FilterDispatcher询问ActionMapper来决定这个请求是否需要调用某个Action;
    4、如果ActionMapper决定需要调用某个Action,FilterDispatcher把请求的处理交给ActionProxy;

    5、ActionProxy通过ConfigurationManager询问框架的配置文件,找到需要调用的Action类,我们一般是从struts.xml配置中读取;

    6、ActionProxy创建一个ActionInvocation的实例;

    7、ActionInvaocation实例使用命名模式来调用,在调用Action的过程前后,涉及到相关拦截器(Intercepter)的调用;

    8、一旦Action执行完毕,ActionInvocation负责根据struts.xml中的配置找到对应的返回结果。返回结果通常是一个需要被表示的JSP或者FreeMarker模板。在表示的过程中可以使用Struts2框架中继承的表情。在这个过程中涉及到ActionMapper。

HelloWorld实例
1、项目结构



2、pom.xml<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> <modelVersion>4.0.0</modelVersion>
<groupId>com.ray</groupId>
<artifactId>struts2Test</artifactId>
<packaging>war</packaging>
<version>1.0-SNAPSHOT</version>
<name>struts2Test Maven Webapp</name>
<url>http://maven.apache.org</url>

<dependencies>

<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>

<!-- https://mvnrepository.com/artifact/org.apache.struts/struts2-core -->
<dependency>
<groupId>org.apache.struts</groupId>
<artifactId>struts2-core</artifactId>
<version>2.5.16</version>
</dependency>

</dependencies>

<build>
<finalName>struts2Test</finalName>
</build>

</project>
3、web.xml<web-app xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaL
9f75
ocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0" metadata-complete="true">
<display-name>Archetype Created Web Application</display-name>

<!-- 过滤所有请求交给Struts2处理 -->
<filter>
<filter-name>struts2</filter-name>
<filter-class>
org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter
</filter-class>
</filter>

<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>

</web-app>
4、HelloWorldAction.javapackage com.ray.action;

import com.opensymphony.xwork2.ActionSupport;

/**
* Created by Ray on 2018/3/26 0026.
**/
public class HelloWorldAction extends ActionSupport {

/**
* @Author: Ray
* @Date: 2018/3/26 0026
* @Description: Struts2默认执行的方法
* @Return: SUCCESS
*/
@Override
public String execute() throws Exception {
return super.execute();
}
}
5、struts.xml<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.5//EN"
"http://struts.apache.org/dtds/struts-2.5.dtd">

<struts>

<package name="default" namespace="/" extends="struts-default">

<action name="helloWorld" class="com.ray.action.HelloWorldAction">
<result name="success">/success.jsp</result>
</action>
</package>
</struts>

6、success.jsp<%@ page language="java" import="java.util.*" pageEncoding="UTF-8" %>
<%
String path = request.getContextPath();
String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + path + "/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">

<title>success.jsp</title>

<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->

</head>

<body>
Hello World~
</body>
</html>

7、页面效果

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: