Java学习者论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

手机号码,快捷登录

恭喜Java学习者论坛(https://www.javaxxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,购买链接:点击进入购买VIP会员
JAVA高级面试进阶视频教程Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程

Go语言视频零基础入门到精通

Java架构师3期(课件+源码)

Java开发全终端实战租房项目视频教程

SpringBoot2.X入门到高级使用教程

大数据培训第六期全套视频教程

深度学习(CNN RNN GAN)算法原理

Java亿级流量电商系统视频教程

互联网架构师视频教程

年薪50万Spark2.0从入门到精通

年薪50万!人工智能学习路线教程

年薪50万!大数据从入门到精通学习路线年薪50万!机器学习入门到精通视频教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程 MySQL入门到精通教程
查看: 217|回复: 0

[struts学习]Struts 2第一次亲密接触

[复制链接]
  • TA的每日心情
    开心
    2021-3-12 23:18
  • 签到天数: 2 天

    [LV.1]初来乍到

    发表于 2014-10-11 03:05:31 | 显示全部楼层 |阅读模式
    一个简单的HelloWorld  以一个简单的HelloWorld示例来介绍Struts 2给读者带来的体验。
            为了使读者能够更清楚地了解示例的编写过程,示例将采用文本编辑器的方式来开发,这样避免了IDE集成编辑器给读者带来的困扰。开发一个Web应用,要建立符合规范的目录结构,上节中已经对Web应用目录进行了详细的介绍,为了开发HelloWorld应用,读者应该先建立一个目录。笔者建立的顺序如下:
             
          
          
          
            
            
            
            
            
            
            
            
            
            
            
            
          
          
          
          
          
          
           在E盘中建立一个文件夹:E:myweb。
             
          
          
           在此文件夹中建立WEB-INF文件夹。
             
          
          
           建立E:mywebWEB-INFclasses文件夹。
             
          
          
           建立E:mywebWEB-INFlib文件夹。
             
          
          
           将Tomcat默认的web.xml文件拷贝到E:mywebWEB-INF目录下,web.xml文件在Tomcat安装目录中的webappsROOTWEB-INF目录下。
            
      
       
       
         
       

         
       
      
      
      
       
       使用文本编辑器建立一个struts.xml文件,保存到E:mywebWEB-INFclasses目录下。
         
      
      
       
       
       
       
        2.2.1
          配置web.xml文件
         完成上述步骤后,一个简单的Web目录就完工了,接下来需要修改web.xml文件和struts.xml文件。web.xml文件内容如代码2.4所示。
         

    代码2.4  HelloWorld示例的web.xml
          
    <?xml version="1.0" encoding="UTF-8"?>
         <web-app id="WebApp_ID" 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-- >
                  <filter-name>struts2</filter-name>
                 <filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
             </filter>
             <filter-mapping>
                     <!―拦截所有URL用户请求
                 <filter-name>struts2</filter-name>
                 <url-pattern>/*</url-pattern>
             </filter-mapping>
             <!―配置欢迎界面文件-- >
          <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>
         </web-app>
         在代码2.4所示内容中,相比原来的内容,增加了<filter>和<filter-mapping>。<filter>指定了需要加载的Struts 2核心控制器org.apache.struts2.dispatcher.FilterDispatcher,而<filter-mapping>使用通配符“/*”来拦截所有的URL请求,保证了用户请求都被Struts 2接收处理。
          
      
      
       
       
       
       
        2.2.2
          配置struts.xml文件
         编辑struts.xml文件内容,如代码2.5所示。
         

    代码2.5  HelloWorld示例的struts.xml
          
    <?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">
         <!―配置struts2-->
          <struts>
             <!-- 配置包,名称为bookcode  -->
              <package name="bookcode" extends="struts-default">
             <!-- 配置Action  -->
              <action name="HelloWorld" class="ch2.helloworld.HelloWorld">
                     <!-- 配置返回结果  -->
                      <result name="success">/ch2/helloworld/success.jsp</result>
                     <result name="error">/ch2/helloworld/error.jsp</result>
                 </action>
             </package>
          
      
       
        </struts>
         在默认情况下,Struts 2将会自动加载位于WEB-INFclasses目录下的struts.xml配置文件。<package>定义了一个包空间,可以看到,该文件中只配置了一个Action,name为“HelloWorld”,对应的class为“ch2.HelloWorld”,也就是指定WEB-INFclassesch2目录下的HelloWorld.class类文件,当然现在还没有这个文件,后面将会编写该文件。
          

       
       
       
      ★ 说明 ★
        bookcode是本书示例的包名称,该包继承Struts 2框架的默认包struts-default,读者在后面章节将会学习使用extends属性。
          
      
       
        另外一个配置就是result,即Action处理后返回给用户的视图资源,从配置中可以看到配置了两个result:success和error,分别对应E:mywebch2目录下的success.jsp和error.jsp,后面也将会建立这两个文件。
         本节介绍的HelloWorld的思路是用户在客户端输入一个字符串,由Action判断输入的字符串是否为空,如果不为空,则返回给用户success.jsp页面,并在控制台打印出该字符串;如果用户输入为空,则返回error.jsp页面给用户,提示输入为空。这个流程可以用图2.16来说明。用户输入字符串,发送请求给Struts 2框架的核心控制器FilterDispatcher,FilterDispatcher根据配置,将请求转发给Action,Action是业务控制器,来判断用户输入的内容进行相应的操作。  
       
       
          
       
         
       
         图2.16  HelloWorld的流程图
         
      
       
       
       
        2.2.3
          A
        ction业务控制器
         如图2.16所示,HelloWorld应用中的Action是业务控制器。通过第1章对Struts 2的简单介绍,读者应该知道,Struts 2的Action可以是一个普通的Java类(POJO),与Struts 1有很大的不同,这里的HelloWorld内容如代码2.6所示。
         

    代码2.6  业务控制器HelloWord
          
    package ch2.helloworld;
         public class HelloWorld {
             //定义msg属性
             private String msg;
             //msg的get方法
             public String getMsg() {
                 return msg;
             }
             //msg的set方法
             public void setMsg(String msg) {
                 this.msg = msg;
             }
             //Action的execute()处理方法
             public String execute() {
                 //判断条件
                 if (getMsg().equals("")) {
                     //显示错误信息
                     System.out.println("no String input!");
                     //返回错误结果
                     return "error";
                 } else {
                     //显示用户输入的信息
                     System.out.println(getMsg());
                     //返回一个处理成功结果
                     return "success";
                 }
             }
         }
         (1)如代码2.6所示,HelloWorld没有继承任何类,也没有实现任何接口,是一个标准的Java类。定义了一个msg属性,对应用户输入的字符串,并提供了msg的get()、set()方法。execute()方法是实现业务控制器的默认方法,该方法只是返回一个String,并没有特别之处。
         (2)在execute()方法中,对msg内容进行判断,如果非空,则在控制台打印该字符串,并返回一个“success”字符串,对应代码2.5中的success.jsp页面。
         (3)如果msg为空,则在控制台输出一条警告,并返回“error”,对应error.jsp页面。读者会发现,Struts 2中的Action变得简单易懂,很容易对其进行测试。
          

       
       
       
      ★ 说明 ★
        Struts 2的业务控制器Action是一个普通的Java类。
          
      
       
         
      
      
       
       
       
       
        2.2.4
          视图资源
         到这里为止,该示例只缺少success.jsp、error.jsp和一个用户输入界面HelloWorld.jsp,读者可以使用文本编辑器建立,也可以使用各种网页编辑器来制作,以提高效率。
         (1)HelloWorld.jsp内容如代码2.7所示。
         

    代码2.7  输入界面HelloWorld.jsp
          
    <%@ page contentType="text/html; charset=gb2312" language="java" import="java.sql.*" errorPage="" %>
         <!DOCTYPE html PUBLIC "-//W
       
        3C
        //DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
         <html xmlns="http://www.w3.org/1999/xhtml">
         <head>
         <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
         <title>Hello World!!</title>
         </head>
         <body>
             <!―form的action指向定义的action名称 -->
          <form id="form1" name="form1" method="post" action="HelloWorld.action">
           <p>输入信息:
             <label>
             <input name="msg" type="text" id="username" />
             </label>
           </p>
            <p>
             <label>
             <input type="submit" name="Submit" value="提交" />
              </label>
           </p>
          </form>
         </body>
         </html>
         在代码2.7所示内容中,form的action指向“HelloWorld”,提交一个name为msg的字符串,这是一个普通的JSP文件。
         (2)success.jsp内容如代码2.8所示。
         

    代码2.8  输出界面success.jsp
          
    <%@ page language="java" contentType="text/html; charset=gb2312"%>
         <!DOCTYPE html PUBLIC "-//W
       
        3C
        //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=ISO-8859-1">
         <title>返回界面</title>
          </head>
         <body>
         HelloWorld,Struts 2!
         </body>
         </html>
         代码2.8所示内容很简单,只是输出“HelloWorld,Struts 2!”提示。
         (3)error.jsp内容如代码2.9所示。
         

    代码2.9  错误界面error.jsp
          
    <%@ page language="java" contentType="text/html; charset=gb2312"
             pageEncoding="gb2312"%>
         <!DOCTYPE html PUBLIC "-//W
       
        3C
        //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=ISO-8859-1">
         <title>错误界面</title>
          </head>
         <body>
         您没有输入内容!
         </body>
         </html>
         error.jsp也只是提示录入错误信息。
          

       
       
       
      ★ 说明 ★
        Struts 2框架支持多种结果类型,默认类型支持JSP。
          
      
       
         
      
      
       
       
       
       
        2.2.5
          运行HelloWorld
         经过上述编写,第一个Struts 2应用已经完成,将E:myweb文件夹复制到C:Program FilesApache Software FoundationTomcat 6.0webapps目录下,启动Tomcat,准备运行程序。
          
       
       
        在浏览器中输入http://localhost:8080/bookcode/ch2/helloworld/HelloWorld.jsp,出现如图2.17所示界面。
          
       
       
        在文本框中输入“Hello World!”,单击“提交”按钮,出现如图2.18所示界面。Tomcat控制台会输出如下内容:
         2007-11-21 21:19:56 com.opensymphony.xwork2.validator.ActionValidatorManagerFactory <clinit>
         信息: Detected AnnotationActionValidatorManager, initializing it...
          Hello World!
          
       
       
        如果用户没有输入内容,直接单击“提交”按钮,返回页面如图2.19所示。同时,Tomcat控制台输出如下内容:
         no String input!  
       
       
          
       
       
                
       
         
       
         图2.17  HelloWorld.jsp页面                            图2.18  success.jsp页面  
      
       
         
       
       
       
        图2.19  error.jsp页面
        成功运行这个示例,是了解Struts 2的良好开端,这是一个极其简单的示例,并没有完全展示Struts 2的所有特点,但给读者带来了一个感性了解Struts 2的体验。
          

       
       
       
      ★ 说明 ★
        Struts 2框架默认URL后缀不再是Struts 1.X框架的*.do,而是*.action。
          
      
       
         
      
      
       
       
       
       
        2.2.6
          HelloWorld小结
         初次完成一个Struts 2的Hello World示例,读者将会了解:
         1.web.xml中需要加入Struts 2的加载配置。
         2.在struts.xml中定义Action,其中包含Action返回视图的定义。
         3.Struts 2的Action是一个简单的Java类,没有丝毫特别之处。
         4.Action的execute()方法只是返回一个String。
       


      

      
      
       
       

         
       

         
       
      
    复制代码
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|Java学习者论坛 ( 声明:本站资料整理自互联网,用于Java学习者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

    GMT+8, 2024-5-2 14:03 , Processed in 0.461144 second(s), 48 queries .

    Powered by Discuz! X3.4

    © 2001-2017 Comsenz Inc.

    快速回复 返回顶部 返回列表