【转】jsp Session 在struts 2.0使用

本文介绍如何快速搭建Struts2框架环境,包括所需JAR包的安装、FilterDispatcher过滤器的配置、Action组件的配置及其实现方式。此外,还展示了如何通过Struts2处理表单提交并显示结果。
一、安装Struts 2.0
可以从Struts官方网站 http://struts.apache.org/  下载Struts2的发行包。将发行包中lib文件夹下的下列jar文件复制到应用的/WEB-INF/lib下。这些jar文件是运行简单Struts2应用的最小集合。
struts-core-2.1.2.jar
xwork-2.1.1.jar
ognl-2.6.11.jar
commons-logging-1.0.4.jar
commons-fileupload-1.2.1.jar
freemarker-2.3.12.jar
二、配置FilterDispatcher过滤器
在web.xml中按如下配置: 
   ... ... ...
   <filter>
     <filter-name>struts2</filter-name>
     <filter-class>
       org.apache.struts2.dispatcher.FilterDispatcher
     </filter-class>
    </filter>
    <filter-mapping>
      <filter-name>struts2</filter-name>
      <url-pattern>/*</url-pattern>
   </filter-mapping>
   ... ... ...
    FilterDispatcher 是Struts2提供的过滤器,可以看成Struts2的前端控制器,它将截获所有请求。针对形如“*.action”的请求,Struts2最终将调用合适的action组件实现业务流程处理,例如:若用户的请求为:“.../logon.action”将最终调用名为logon的Action类的execute方法。
    由于采用了动态代理机制,Struts2的Action不在需要继承Struts提供的类(Struts1的Action需要继承org.apache.struts.action.Action类),Struts2的Action可以是一个普通的Java类,称之为POJO(普通而平凡的Java类),这正是时下盛行的“低侵入性”的体现。
三、配置Action
    Struts2 需要有struts.xml配置文件用于指定action等配置信息,该文件应置于应用类路径(/WEB-INF/classes)中,如果使用Eclipse开发工具,在src文件夹下编辑即可。本应用的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 ">
   <struts>
      <package name="some" extends="struts-default" namespace="/test">
        <action name="logon" class="action.LogonAction">
          <result name="success">/view/success.jsp</result>
          <result name="error">/view/logon_form.jsp</result>
       </action>
     </package>
   </struts>
   ... ... ...
        
    其中package元素用于定义包,Struts2中的包类似于Struts1的模块,一个包可以包含多个action、interceptor等组件的的定义。一个包看成一系列action、interceptor等组件的集合。package元素的主要属性有name、extends和namespace。
  1. name属性用于指定该包的名称,是用于引用该包的标识。
  2. extends属性用于指定该包所继承的包,一个包继承另外一个包就拥有了另外一个包的所有定义。此处名为some的包继承了Struts自定义的struts-default包,这是必要的,因为struts-default包定义了应用必须使用到的一些组件。struts-default包的定义在struts-default.xml文件中,该文件位于struts-core-2.1.2.jar中,在应用启动时被自动加载。
  3. namespace属性用于定义该包的命名空间。一个包如果定义了命名空间后,该包中的所有action的对应的URI为: “/应用名/所在包的命名空间名/acion名.action” 例如,上述文件中名为logon的acion所对应的URI为“/应用名/test/logon.action”。如果不指定namespace属性,则默认的namespace属性值为“”,其对应包中的action的URI为“/应用名/acion名.action”。
     元素的定义Action组件,其主要属性name和class:
  1. name属性用于指定action的名称,用于标识该action,与该action对应的URI为“.../action名称.action”。
  2. class属性用于指定该action对应的类名,该类可以是一个普通的POJO,通过execute方法封装业务处理流程。
     元素的子元素类似于Struts1中的forward定义。将action所转向的页面地址映射为字符串名称。action类的execute方法将返回一个字符串,即表示所定义的页面名称,Struts2将转向到该名称所对应的页面地址。上述配置文件中的两个分别表示登录成功(success)和失败(error)后所转向的地址。
四.action类
    与Struts1不同,Struts2的Action类可以不需要ActionForm为其传送表单数据。Struts2的Action类可以通过自己属性获得表单数据,例如下面LogonAction,当用户请求“../test/logon.action”时,Struts2将创建LogonAction实例,并调用setter方法填充其username和password属性。LogonAction的message属性用于记录向页面输出的结果,将存放在request中。
    另外,Struts1的Action以单实例的方式工作,而Struts2会为每次请求创建新的Action实例,不存在线程安全的问题。
    Action 的execute方法用于处理业务流程。该方法应返回一个字符串参数,与相应action配置的result元素对应,表示应转向的页面地址。
   需要注意的是,虽然Struts2的Action采取了与HTTPServlet低耦合的设计方式,但需要访问Servlet API的情况还是经常 有的。可以通过ActionContext类获得对request,session等Servlet API进行访问的途径,如:下面类中的 “ctx.getSession().put("username", username);”用于在HTTPSession对象中存入数据。
import com.opensymphony.xwork2.ActionContext;
public class LogonAction {
    private String username;
    private String password;
    private String message;
    //getter and setter
    ... ... ...
    public String execute() {
        if ("whatisjava".equals(username) && "java".equals(password)) {
            ActionContext ctx = ActionContext.getContext();
            ctx.getSession().put("username", username);
            setMessage("
成功登入 ");
            return "success";
        } else {
            setMessage("
用户名或密码错误 ");
            return "error";
        }
    }
}

 
五、JSP页面
   logon_form.jsp 为登录表单,success.jsp为登录后的成功页面,此处没有使用Struts2所提供的标签库,与普通JSP没有相比无特殊之处,注意:通过EL“${requestScope.message}”显示Action的输出信息。
   logon_form.jsp 主要内容如下:
    ... ... ...
    <form action="test/logon.action" method="post">
      <table cellpadding="0" cellspacing="0" border="0"
       class="form_table">
       <tr>
        <td valign="middle" align="right">
        
用户名 :
        </td>
        <td valign="middle" align="left">
         <input type="text" class="inputgri" name="username" />
        </td>
       </tr>
       <tr>
        <td valign="middle" align="right">
        
密码 :
        </td>
        <td valign="middle" align="left">
         <input type="password" class="inputgri" name="password" />
        </td>
       </tr>
      </table>
      <p>
       <input type="submit" class="button" value="
提交 &raquo;" />
      </p>
     </form>
     <p>
      ${requestScope.message}
     </p>

     ... ... ...
  
      success.jsp 主要内容如下:
    ... ... ...
    <div id="content">
     <p id="whereami">
     </p>
     <h1>
      ${requestScope.message}
     </h1>
     <p>
欢迎你, ${sessionScope.username}</p>
    </div>
    ... ... ...
内容概要:本文介绍了一个基于冠豪猪优化算法(CPO)的无人机三维路径规划项目,利用Python实现了在复杂三维环境中为无人机规划安全、高效、低能耗飞行路径的完整解决方案。项目涵盖空间环境建模、无人机动力学约束、路径编码、多目标代价函数设计以及CPO算法的核心实现。通过体素网格建模、动态障碍物处理、路径平滑技术和多约束融合机制,系统能够在高维、密集障碍环境下快速搜索出满足飞行可行性、安全性与能效最优的路径,并支持在线重规划以适应动态环境变化。文中还提供了关键模块的代码示例,包括环境建模、路径评估和CPO优化流程。; 适合人群:具备一定Python编程基础和优化算法基础知识,从事无人机、智能机器人、路径规划或智能优化算法研究的相关科研人员与工程技术人员,尤其适合研究生及有一定工作经验的研发工程师。; 使用场景及目标:①应用于复杂三维环境下的无人机自主导航与避障;②研究智能优化算法(如CPO)在路径规划中的实际部署与性能优化;③实现多目标(路径最短、能耗最低、安全性最高)耦合条件下的工程化路径求解;④构建可扩展的智能无人系统决策框架。; 阅读建议:建议结合文中模型架构与代码示例进行实践运行,重点关注目标函数设计、CPO算法改进策略与约束处理机制,宜在仿真环境中测试不同场景以深入理解算法行为与系统鲁棒性。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值