我的日常

登录/注册
您现在的位置:论坛 盖世程序员(我猜到了开头 却没有猜到结局) 项目源码 > 注解实现struts2 action 只接受post请求
总共48086条微博

动态微博

查看: 7647|回复: 4

注解实现struts2 action 只接受post请求

[复制链接]
admin    

1244

主题

544

听众

1万

金钱

管理员

  • TA的每日心情

    2021-2-2 11:21
  • 签到天数: 36 天

    [LV.5]常住居民I

    管理员

    跳转到指定楼层
    楼主
    发表于 2016-01-05 16:22:17 |只看该作者 |倒序浏览
    大家都知道springMvc 都有注解配置 实现请求方式比如:
    # p. t8 Q' ^+ b4 i@RequestMapping(value = "/index", method = RequestMethod.GET)1 s' B  a/ b  X  }3 D
    这样的话 用户只能发送get请求。
    ( M3 `3 [" `5 T( T, n4 r但是struts2 大多是基于配置实现的、注解的方式用的很少、下面通过struts2实现Http只允许POST请求。; j. v: h  l3 @  b2 g: h
    - g4 a$ C" M- d: ~- @2 ~
    注解 RequestTypeAnnotation:
    1. @Target({ElementType.PARAMETER, ElementType.METHOD})    7 [- a% ^$ E3 v' |. K. X4 B
    2. @Retention(RetentionPolicy.RUNTIME)    7 A) U* s! a1 D9 B, Z7 ~/ [
    3. @Documented   
      $ L% o( f; j2 P
    4. public @interface  RequestTypeAnnotation {
      8 R5 }% ^3 G( A( P1 u7 ^8 J$ e% U  `' w
    5.     RequestType value();
      8 x3 O- O. M. H1 W' n9 f; q
    6.     public enum RequestType {. B& _( X  Q4 _6 I- K0 W1 v
    7.         /**
      # M1 [, j7 ]3 q* S& K6 d% X
    8.          * post方式的http请求
      4 G4 K. J& q6 b+ n1 a- f
    9.          */
      8 e/ o! h( o; d7 w" I- {6 y7 m
    10.         POST,
      9 g% K$ n6 ?: o9 @3 p( X
    11.         /**
      6 ^! e. Z. C" l6 [6 @% z$ Q% r' V
    12.          * get方式的http请求8 [4 h& k, ~, ]% i9 Y( A1 q9 b
    13.          */8 c! m. d7 R4 J! Z$ a
    14.         GET
      & ~7 R3 i6 u# t6 `
    15.     }
      . G0 I# s; R, P& I  d  K# @, ?/ y
    16. }
    复制代码
    拦截器 RequestTypeInterceptor:
    1. /**. Y' H5 Z2 P  x+ x
    2. * 拦截器' P! t2 E4 a6 e6 d0 T* R8 v
    3. * 创建者    张志朋5 X3 T1 G1 b! K3 D; [
    4. * 创建时间    2016年1月5日
      $ `4 m" Y4 v% A0 G* F* B! k
    5. *$ ~8 K; @1 C) o# \
    6. */% r0 J* y1 s/ s: f5 ?7 U! u
    7. public class RequestTypeInterceptor extends AbstractInterceptor  {' x( C7 K$ k8 ]
    8.     private static final long serialVersionUID = -4204585527913002611L;
      . r9 m# @) ~+ l" H6 v. X
    9. * b; s0 D" c2 @0 w4 R7 a
    10.     public String intercept(ActionInvocation invocation) throws Exception {
      6 g- J3 t2 w. x8 J0 y. D- ~/ E
    11.   z5 ^/ u, V& E7 G# ~) w
    12.         Action action = (Action) invocation.getAction();
      & ]! b  R! M2 C
    13.         try {# E* @( ^( H7 ^) u4 W# Q
    14.             Method method = action.getClass().getMethod(invocation.getProxy().getMethod(), new Class[] {});9 H; }" g- o( x; ?: x
    15.             Annotation[] annotations = method.getAnnotations();" d2 q+ S) r' d
    16.             String methodName = ServletActionContext.getRequest().getMethod();( z9 w0 j; o  X3 E  c3 {
    17.             for (Annotation annotation : annotations) {9 A. I: G: P1 ?$ r1 C. F0 ]
    18.                 if (annotation instanceof RequestTypeAnnotation) {: l+ @1 b% z6 ^6 |
    19.                     RequestTypeAnnotation reqTypeAnnotation = (RequestTypeAnnotation) annotation;
      7 w4 c8 u4 S+ K6 {  C% i# d
    20.                     if (!reqTypeAnnotation.value().name().equalsIgnoreCase(methodName)) {
      1 Q- _0 `  [' y/ q& E2 B
    21.                         return "input";% `3 L7 R+ y7 z) s0 u0 Q
    22.                     }5 `( O0 T9 K/ d6 g3 j
    23.                 }( X  x9 @* i1 S9 H5 o7 X+ ^2 m7 K
    24.             }
      ( Q/ f: g7 a- N
    25.         } catch (Exception e) {
      # U7 f: U. }/ M
    26.             return "error";6 R" X. }* h. _
    27.         }
      6 `, q9 x9 x  v6 ]
    28.         return invocation.invoke();
      $ x5 y0 \7 d" ~/ ]$ u# b- L% w" a9 q
    29.     }# s- p+ B5 w# `& |
    30. }
    复制代码
    请求 WelcomeAction:; X* C9 F) b8 n$ R  Z7 L8 V* S
    1. /**
      - `: [; {, c! P* v$ ~" w& {
    2. * 测试action
      2 N+ r4 x; ^5 D$ q
    3. * 创建者    张志朋4 Z  L# I, k4 j6 `
    4. * 创建时间    2016年1月5日6 {# s1 M+ d/ q( l* }& h. a
    5. *
      8 i: L) u2 ?/ H5 C# E2 |+ d
    6. */
      - U' g1 S. h9 F) T
    7. public class WelcomeAction extends ActionSupport {
      " f! V* ~1 H1 i
    8.     private static final long serialVersionUID = 752609025281512627L;5 _: w& S; M, _; Z
    9.     private String message;
      , ~( P7 B$ A6 W  E' ?
    10.     @RequestTypeAnnotation(RequestType.POST)
      8 @9 l. O6 @. ^2 i
    11.     public String execute(){/ U2 f6 ?& {1 m) ^
    12.         message = "只接受post请求";9 x  l) _0 W4 w4 p
    13.         return SUCCESS;- g( z" N0 w( e6 y' o  {
    14.     }
      1 L& T2 a1 u5 i7 h* ?: P
    15.     /**$ P8 V5 o8 [* W, ?
    16.      * @return the message9 ~& Y- A6 X' B
    17.      */; b/ t0 c  x2 G5 k4 g3 w
    18.     public String getMessage() {+ d1 r: r- i+ `/ U) }: z
    19.         return message;; M9 n- y1 r4 d3 ?; a" I/ n2 [
    20.     }4 i6 c; e) Z1 v% M
    21.     /**
      ( c" r8 N8 p% `* O; [
    22.      * @param message the message to set' a- I6 S& Y2 g
    23.      */* ~# e5 k& q2 |, {) C
    24.     public void setMessage(String message) {, `9 X8 |2 \5 \9 |3 @; e- N9 n
    25.         this.message = message;+ ~0 e# O) r6 Z0 I( C
    26.     }4 F$ d0 V! w; p% s
    27. }
    复制代码
    % q3 c' Z$ N: L6 B0 u  ]. j
    struts.xml配置:
    1. <struts>
      0 h/ W4 x$ [$ ^% j# l* n9 G
    2.    <constant name="struts.devMode" value="false" />
      1 ^1 }) E  k; A
    3.    <constant name="struts.i18n.encoding" value="UTF-8" />+ p+ Z# P$ o: L
    4.    <constant name="struts.action.extension" value="action"></constant>4 N3 \; N0 C& ^. f, p; W
    5.    <package name="web01" extends="json-default">
      6 d( t+ e7 F9 c$ s
    6.        <interceptors>& i$ h; J4 j- m1 T- F
    7.             <interceptor name="requestType" class="itstyle.interceptor.RequestTypeInterceptor"></interceptor> ! i1 ?, P2 D5 P$ c9 A& B, H
    8.         </interceptors>
        Y2 b, U0 c4 K  j4 {
    9.      <action name="welcome" class="itstyle.action.WelcomeAction">
      , g. o( d. k6 c! f7 o
    10.         <result name="success" type="json">
      8 u  j5 `7 `5 B0 R/ N
    11.            <param name="root">message</param>9 i4 q# r: X! {
    12.         </result>! r2 f; T' x) W$ G# z% R) M7 E( z
    13.         <result name="input">/error.jsp</result>0 w4 ?' p4 n" |3 _
    14.         <interceptor-ref name="defaultStack"></interceptor-ref> * v& t8 c9 k, I# n' D/ U% P
    15.         <interceptor-ref name="requestType"></interceptor-ref>
      # d5 q  Q$ \. P
    16.      </action>
      8 E' N5 M* z) B+ {( v9 C' R
    17.    </package>
      ' K& t: Y3 i5 a  Z8 F% B
    18. </struts>
    复制代码

    & }+ E: h8 V9 z' S" b1 B) R; l
    项目源码下载地址:  注解实现struts2 action 只接受post请求
    ! o( Z) U' C& j2 ~) l0 B
    9 ]( X" X9 {2 s& l, s
    提取码:
    1 v6 ]) E* `& G5 c  F4 x. `! A
    游客,如果您要查看本帖隐藏内容请回复
    6 }  ]3 A7 |  K& [9 H

    + H" v  B5 B. A& W9 d

    我的日常 1、本主题所有言论和图片纯属会员个人意见,与本社区立场无关
    2、本站所有主题由该帖子作者发表,该帖子作者与我的日常享有帖子相关版权
    3、其他单位或个人使用、转载或引用本文时必须同时征得该帖子作者和我的日常的同意
    4、帖子作者须承担一切因本文发表而直接或间接导致的民事或刑事法律责任
    5、本帖部分内容转载自其它媒体,但并不代表本站赞同其观点和对其真实性负责
    6、如本帖侵犯到任何版权问题,请立即告知本站,本站将及时予与删除并致以最深的歉意
    7、我的日常管理员和版主有权不事先通知发贴者而删除本文


    JAVA爱好者①群:JAVA爱好者① JAVA爱好者②群:JAVA爱好者② JAVA爱好者③ : JAVA爱好者③

    35

    主题

    0

    听众

    526

    金钱

    三袋弟子

    该用户从未签到

    沙发
    发表于 2016-02-27 00:51:54 |只看该作者
    STRUTS 注解 逐渐流行了?
    回复

    使用道具 举报

    admin    

    1244

    主题

    544

    听众

    1万

    金钱

    管理员

  • TA的每日心情

    2021-2-2 11:21
  • 签到天数: 36 天

    [LV.5]常住居民I

    管理员

    板凳
    发表于 2016-02-27 11:29:08 |只看该作者
    相逢在巅峰 发表于 2016-2-26 16:51' K5 @! d+ ~) V( w& o- z- S8 w
    STRUTS 注解 逐渐流行了?
    & F+ B2 {$ E3 v0 b9 c  D
    配置 着玩的~
    回复

    使用道具 举报

    woniu 实名认证   

    2

    主题

    0

    听众

    330

    金钱

    四袋长老

    该用户从未签到

    地板
    发表于 2016-04-12 12:11:01 |只看该作者
    这个项目太棒勒!下下来学习下!
    回复

    使用道具 举报

    5

    主题

    0

    听众

    316

    金钱

    四袋长老

    该用户从未签到

    5#
    发表于 2017-08-14 08:43:35 |只看该作者
    不错不错不错,学习一下
    回复

    使用道具 举报

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

       

    关闭

    站长推荐上一条 /1 下一条

    发布主题 快速回复 返回列表 联系我们 官方QQ群 科帮网手机客户端
    快速回复 返回顶部 返回列表