zoukankan      html  css  js  c++  java
  • [Struts] Hello World Demo

    Struts 是一个基于 MVC 模式的框架。Struts 2 并不是 Struts 的下一个版本,几乎重写了 Struts。本文中提到的 Struts 均指 Struts 2。

    Model, 负责维护应用的数据,根据 View 的请求返回数据,根据 Controller 的指令更新数据

    View,在指定的格式下显示数据,由 Controller 控制

    Controller,接收用户的输入,验证输入数据的有效性,然后做出响应的业务逻辑处理并更改 Model 数据状态,最后通过 View 进行数据显示

    上图是Struts 2 的 Model,View,Controller 高度抽象的关系图。一个用户请求大概会进过下面几个流程

    • 用户在浏览器发送一个页面请求给服务器
    • FilterDispatcher 根据请求的 url 决定响应的动作
    • 拦截器( interceptors )对输入进行校验,或上传文件等
    • 执行响应动作
    • 拦截器再次发挥作用,进行需要的后校验
    • View 渲染结果页面,并将页面返回给用户

    代码目录结构

    web.xml 是项目的入口。

    struts.xml 配置了 URL 和 java 逻辑代码,以及视图 jsp 文件的映射关系。

    logging.properties 配置日志功能

    index.jsp 是项目的默认页面文件

    HelloWorldAction.java,业务逻辑代码

    HelloWorld.jsp,在 HelloWorldAction.java 处理完业务逻辑后,进行页面显示

    代码详情

    web.xml,所有发送给 Struts 2 的请求都会先由 web.xml 处理。这里通过 StrutsPrepareAndExecuteFilter 进行处理。本例子的欢迎页面是 index.jsp 文件

    <?xml version="1.0" encoding="UTF-8"?>
    <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns="http://java.sun.com/xml/ns/javaee" 
       xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
       xsi:schemaLocation="http://java.sun.com/xml/ns/javaee  http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
       id="WebApp_ID" version="3.0">
       
       <display-name>Struts 2</display-name>
       <welcome-file-list>
          <welcome-file>index.jsp</welcome-file>
       </welcome-file-list>
         <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>

    Struts.xml,本例子

    将URL index 和视图文件 index.jsp 关联起来

    将URL hello 和模型文件 HelloWorldAction.java,以及视图文件 HelloWorld.jsp 关联起来。当 HelloWorld.execute 方法的执行结果是 success 是,则调用视图文件 HelloWorld.jsp 。

    打开 struts.devMode 会显示和开发相关的日志信息。

    package 元素用来归类请求,这里将 index action 和 hello action 归于 helloworld package 里面。

    <?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" />
        <package name="helloworld" extends="struts-default">
            <action name="index">
                <result>/index.jsp</result>
            </action>
    
            <action name="hello" class="dwpTest.HelloWorldAction" method="execute">
                <result name="success">/HelloWorld.jsp</result>
            </action>
        </package>
    </struts>

    index.jsp 这是个简单的 jsp 文件。表单的 hello 动作在 Struts 2 上会被映射到 HelloWorldAction.execute 方法

    <%@ 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> title here</title>
    </head>
    <body>
        <h1>hello world from struts2</h1>
        <form action="hello">
            <label for="name">pls enter your name</label> 
            <input type="text" name="name" /> 
            <input type="submit" value="say hello" />
    
        </form>
    </body>
    </html>

    HelloWorldAction.java,Action 是 Struts 2 的关键部分,大多是的业务逻辑在 action 类中实现。这里是一个简单例子,execute 方法直接返回 success 。运行过程中,Struts 2 会创建一个 HelloWorldAction 对象,并调用其 execute 方法来回应用户的请求。

    package dwpTest;
    
    public class HelloWorldAction {
        private String name;
        
        public String execute() throws Exception{
            return "success";
        }
        public String getName() {
            return name;
        }
        public void setName(String name) {
            this.name = name;
        }
    }

    HelloWorld.jsp, taglib 指令告诉 servlet 容器使用 Struts 2 的 tag 进行处理。s:property 显示 action 类属性( property ),其中 name 是由 HelloWorldAction.getName 返回

    <%@ 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>submit result</title>
    </head>
    <body>
    Hello World <s:property value="name"/>
    </body>
    </html>

    本例子使用到的 jar 文件如下

    参考资料

    Struts 2 - Hello World Example, tutorialspoint 

  • 相关阅读:
    jfreeChart柱状图各属性详细设置
    eclipse 常用快捷键及调试方法
    Java利用Preferences设置个人偏好
    图说设计模式(UML和设计模式)
    JFreeChart 使用一 饼图之高级特性
    使用批处理创建永久生效的环境变量
    tnsnames.ora 监听配置文件详解
    oracle本机登录不上dba的权限不足错误
    Oracle自动备份脚本(网上找到的资料)
    初探Docker
  • 原文地址:https://www.cnblogs.com/TonyYPZhang/p/5991568.html
Copyright © 2011-2022 走看看