Struts2学习总结之基础篇2

本文介绍了Struts2框架中json插件的使用方法,包括配置步骤及注意事项;探讨了dispatcher和redirect两种结果类型的区别;讲解了如何利用拦截器实现核心功能,如重复提交的预防;并提供了详细的表单验证配置示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Struts2对json有非常好的支持。为了支持json ,我们只需要如下三步:
1. 导入struts2-json-plugin-{STRUTS_VERSION}.jar
2. 让package继承json-default
3. 将action返回的result的type设置为json

HelloAction.java
public class HelloAction {
  private String message;
  public String getMessage() {
    return message;
  }
  public void setMessage(String message) {
    this.message = message;
  }
  public String execute(){
    return "success";
  }

配置struts.xml如下:
<package name="demo" namespace="/" extends="json-default">
<action name="hello" class="action.HelloAction">
<result type="json" ></result>
</action>
</package>

访问hello.action?message=hello
浏览器会打开保存窗口,因为浏览器默认不会显示action文件的内容。保存结果,然后用记事本打开,会看到如下串: {"message":"hello"}

 

在不需要json的字段的get方法上加注解
@JSON(serialize = false)


dispatcher类型表示将请求转发给其他资源。而redirect是重定向到其他资源(参数会丢失,地址栏会变化。可以防止用户刷新浏览器重复提交表单的信息)。
    <package name="default" extends="struts-default"> 
            <action name="showPerson" class="com.cz.action.ShowPerson"> 
                <result name="success">/showPerson.jsp</result> 
            </action> 
            <!-- dispatcher resytype test --> 
            <action name="test" class="com.cz.action.DispatcherTest"> 
                <result type="dispatcher">/testSuccess.jsp</result> 
            </action> 
             
            <!-- redirect resytype test --> 
            <action name="test2" class="com.cz.action.DispatcherTest"> 
                <result type="redirect">/testSuccess.jsp</result> 
            </action> 
        </package> 


拦截器 可以在Action调用前或后执行代码
许多框架的核心功能都是通过拦截器来实现的.如重复提交(double-submit),类型转换,对象属性填充,校验,文件上传等
每一个拦截器都是可插拔的
每一个Action都可以单独配置拦截器
拦截器在栈中的配置顺序决定了拦截器的调用顺序。

<package name="default" extends="struts-default">
   <interceptors>
       <interceptor name="timer" class=".."/>
       <interceptor name="logger" class=".."/>
   </interceptors>
   <action name="login" class="tutorial.Login">
        <interceptor-ref name="timer"/>
        <interceptor-ref name="logger"/>
         <result name="input">/login.jsp</result>
         <result name="success" type="redirect-action">/secure/home</result>
   </action>
</package>

Struts2解决重复提交的方式非常简单,分为两步:
1. 在需要防止出现重复提交的表单中增加如下标签:<s:token/>
eg:
<s:form action="double" namespace="/demo">
<s:token></s:token>
<s:textfield label=“some value" name=“value"></s:textfield>
</s:form>
2. 在处理表单提交的action中增加如下拦截器的引用: <interceptor-ref name="token"></interceptor-ref>
另外我们还需要指定出现重复提交错误时,返回什么结果给用户,如:
<result name="invalid.token">/doublepost.jsp</result>
一个完整的配置如下:
<action name="double" class="action.DoublePost">
<interceptor-ref name="defaultStack"></interceptor-ref>
<interceptor-ref name="token"></interceptor-ref>
<result name="invalid.token">/doublepost.jsp</result>
<result>/login.jsp</result>
</action>

校验:
<validators>
  <field name="bar">
      <field-validator type="required">
          <message>You must enter a value for bar.</message>
      </field-validator>
      <field-validator type="int">
          <param name="min">6</param>
          <param name="max">10</param>
          <message>bar must be between ${min} and ${max}, curren
value is ${bar}.</message>
      </field-validator>
  </field>
  <field name="bar2">
      <field-validator type="regex">
          <param name="regex">[0-9],[0-9]</param>
          <message>The value of bar2 must be in the format "x, y",
where x and y are between 0 and 9</message>
     </field-validator>
  </field>
<field name="date">
      <field-validator type="date">
          <param name="min">12/22/2002</param>
          <param name="max">12/25/2002</param>
          <message>The date must be between 12-22-2002 and 12-25-
2002.</message>
      </field-validator>
  </field>
  <field name="foo">
      <field-validator type="int">
          <param name="min">0</param>
          <param name="max">100</param>
          <message key="foo.range">Could not find foo.range!</message>
      </field-validator>
  </field>
  <validator type="expression">
      <param name="expression">foo lt bar </param>
      <message>Foo must be greater than Bar. Foo = ${foo}, Bar =
${bar}.</message>
  </validator>
</validators

资源下载链接为: https://pan.quark.cn/s/22ca96b7bd39 在当今的软件开发领域,自动化构建与发布是提升开发效率和项目质量的关键环节。Jenkins Pipeline作为一种强大的自动化工具,能够有效助力Java项目的快速构建、测试及部署。本文将详细介绍如何利用Jenkins Pipeline实现Java项目的自动化构建与发布。 Jenkins Pipeline简介 Jenkins Pipeline是运行在Jenkins上的一套工作流框架,它将原本分散在单个或多个节点上独立运行的任务串联起来,实现复杂流程的编排与可视化。它是Jenkins 2.X的核心特性之一,推动了Jenkins从持续集成(CI)向持续交付(CD)及DevOps的转变。 创建Pipeline项目 要使用Jenkins Pipeline自动化构建发布Java项目,首先需要创建Pipeline项目。具体步骤如下: 登录Jenkins,点击“新建项”,选择“Pipeline”。 输入项目名称和描述,点击“确定”。 在Pipeline脚本中定义项目字典、发版脚本和预发布脚本。 编写Pipeline脚本 Pipeline脚本是Jenkins Pipeline的核心,用于定义自动化构建和发布的流程。以下是一个简单的Pipeline脚本示例: 在上述脚本中,定义了四个阶段:Checkout、Build、Push package和Deploy/Rollback。每个阶段都可以根据实际需求进行配置和调整。 通过Jenkins Pipeline自动化构建发布Java项目,可以显著提升开发效率和项目质量。借助Pipeline,我们能够轻松实现自动化构建、测试和部署,从而提高项目的整体质量和可靠性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值