TA的每日心情 | 衰 2021-2-2 11:21 |
---|
签到天数: 36 天 [LV.5]常住居民I
|
大家都知道springMvc 都有注解配置 实现请求方式比如: N) K, }9 E3 }, R
@RequestMapping(value = "/index", method = RequestMethod.GET)
3 T" y2 ?! W! b' D5 |/ B5 k这样的话 用户只能发送get请求。
. P2 j/ v; c3 ^! ?& |但是struts2 大多是基于配置实现的、注解的方式用的很少、下面通过struts2实现Http只允许POST请求。
7 ^" s/ b% g* a
: D4 B$ ] h! I: y* P' M$ _注解 RequestTypeAnnotation:- @Target({ElementType.PARAMETER, ElementType.METHOD})
& K1 C. l P" X/ |+ [ - @Retention(RetentionPolicy.RUNTIME)
3 z$ ?) c2 z T0 P. ` - @Documented , K4 Y) D9 V- T$ S/ b9 P
- public @interface RequestTypeAnnotation {* [# U6 F8 t1 U. L4 j( d5 U; \
- RequestType value();
* j: c3 g6 _8 @% o$ H2 i3 k, e - public enum RequestType {1 q2 s: Z4 R, c, ~3 e" x! c! N
- /*** [" b2 ~5 K" w9 r& Z0 s/ d2 V- o
- * post方式的http请求
E6 F' R3 |5 B. i! | - */) n4 D# `7 E; N2 x4 E6 k
- POST,6 X( x* B5 v2 s1 m3 H& n/ n
- /**! P; E, Y7 \) O u* P# K/ l
- * get方式的http请求
: _8 t- l# M, _ c B0 X - */
# q% G. ^, s) W' N+ \ - GET' \, b! J/ o m! G- c6 s+ ?
- }
1 l" F2 g4 T7 r/ _, m6 \; ? - }
复制代码 拦截器 RequestTypeInterceptor:- /**2 g7 }: t0 F9 \
- * 拦截器
2 J" R0 [, V0 z8 a# U - * 创建者 张志朋
+ a% @/ ?5 G- C2 ?- o - * 创建时间 2016年1月5日/ n4 z8 [) i- ~. y% a
- *
, a2 J3 l* z* ~9 B$ J+ [ - */
3 ^% \+ f' i- T+ {; b- G% \0 T - public class RequestTypeInterceptor extends AbstractInterceptor {
! q- R( Q- O; ~5 o% W - private static final long serialVersionUID = -4204585527913002611L;1 C# f; |- A! |" o2 \! {
- * M! [$ Y; M, O8 o& e7 q$ t
- public String intercept(ActionInvocation invocation) throws Exception {
: ?, _, r' ^" l$ H) h
' ^' |% I) T* n+ F3 z7 F- p+ o- Action action = (Action) invocation.getAction();! l& ^# p$ v8 ^+ w }. ]% X, e
- try {
0 @( j3 W: ]3 {8 T - Method method = action.getClass().getMethod(invocation.getProxy().getMethod(), new Class[] {});
8 U; W' _* h2 {& D1 i$ |; D - Annotation[] annotations = method.getAnnotations();
- f6 E" i; U; F8 G; j5 ?7 O - String methodName = ServletActionContext.getRequest().getMethod();- m7 e: }# m$ }1 [# B2 a0 q: u9 G! a
- for (Annotation annotation : annotations) {) ^4 y# c4 {2 T/ @! U
- if (annotation instanceof RequestTypeAnnotation) {
1 R; Y# U$ h: i& p - RequestTypeAnnotation reqTypeAnnotation = (RequestTypeAnnotation) annotation;
9 N V/ l% g- w - if (!reqTypeAnnotation.value().name().equalsIgnoreCase(methodName)) {
9 I5 Z3 H7 Y/ ^0 G- r, _ - return "input";6 u& R" }2 e/ `' x" o1 @
- }0 S3 T, Q& z4 W- |; x! c
- }
/ N# ^1 Z8 d+ w8 x/ a! C+ h, W - }: G% s o. _+ T3 F7 @
- } catch (Exception e) {
+ g% ^' S% x" S6 d - return "error";7 @2 W" f5 i5 M# z* N
- }9 P+ [! V) i3 C# |! h0 J0 S% y
- return invocation.invoke();
0 ]+ M# c$ a6 w2 X' a j - }
, M+ i. U- \: O+ K3 v - }
复制代码 请求 WelcomeAction:/ b0 g" Q. c3 g3 T3 u# f4 c
- /**
6 K' U: R, H# ]2 d# N) ~9 n - * 测试action
% N4 n: O. W: a - * 创建者 张志朋' ^% `- ]9 X' c T2 n' q
- * 创建时间 2016年1月5日
* Q( z( @4 w) W - *
3 n6 e- C. U# u( e3 z - */
i; X9 C# V! v' y - public class WelcomeAction extends ActionSupport {
6 j; k+ S N% V- f - private static final long serialVersionUID = 752609025281512627L;
0 _( h2 M, i" H - private String message;
; D* A1 G' v% l - @RequestTypeAnnotation(RequestType.POST)
6 E/ H4 n$ ]- @/ ]" V - public String execute(){- j# F0 b2 t7 X# W W
- message = "只接受post请求";
* H# m2 y$ o" \- E5 W - return SUCCESS;
; O* K- S8 G$ T# R+ u* M - }
+ r* N' [) N' d( C; x- C/ U - /**
5 H8 ~$ `$ u2 m. \ - * @return the message* P7 b- g" W" {- Z- d
- */( u: _, E! _. @
- public String getMessage() {
! E d$ H; S, ?/ k) L - return message;
% X( B: C: M; S - }1 h) x5 e0 o& V0 W: U: [( y
- /**
T3 ^( _) B) [3 S: U: V$ m - * @param message the message to set8 T% S3 {: ~; K
- */. a3 N6 L% l" {1 r8 w7 Y
- public void setMessage(String message) {9 O$ p, j4 E, w- g' x3 u, f
- this.message = message;/ m7 O d! l% p* A, I7 L! r
- }
0 B6 `/ S- J1 ^/ o1 C% T( V, l+ n - }
复制代码 ! T0 G5 J- H& Z' q
struts.xml配置:- <struts>
2 m7 c% M: V& |, J( d0 h* H5 X - <constant name="struts.devMode" value="false" />1 a6 c+ x3 l6 C$ S" P/ S) i
- <constant name="struts.i18n.encoding" value="UTF-8" />: |: [3 i8 I0 g% \: O
- <constant name="struts.action.extension" value="action"></constant>
3 R! i1 r# j$ |0 M( M - <package name="web01" extends="json-default">
: B3 I+ C; Z ?1 _! ] - <interceptors>! f" T9 O |# B
- <interceptor name="requestType" class="itstyle.interceptor.RequestTypeInterceptor"></interceptor>
& O9 I( Z, P& w. ~; c3 h; O; s w9 i c - </interceptors>( U. |8 n4 k2 M5 {) ~! V
- <action name="welcome" class="itstyle.action.WelcomeAction">
0 |. l L9 Y+ ?9 A8 H3 Q - <result name="success" type="json">& n( [# O! s6 M# l9 ?% }
- <param name="root">message</param>* K u$ @- Y' t6 I8 n6 k
- </result>! I! `/ A) z0 ^( i& g% [
- <result name="input">/error.jsp</result>
. u" z& S6 m& w2 ^6 H2 { - <interceptor-ref name="defaultStack"></interceptor-ref>
$ A. ~. U' p5 G# ^0 z @+ r - <interceptor-ref name="requestType"></interceptor-ref> " R9 s; ^+ z5 R6 A1 s% f' O2 u
- </action> S: l: i; R. k' u, z+ u
- </package>6 u- A1 C. [/ U: r
- </struts>
复制代码
* @; X# u- d$ t! Q/ P, R项目源码下载地址: 注解实现struts2 action 只接受post请求
0 C% g5 p0 Z+ W' ^. Z s7 F/ |6 V1 Z
提取码:
; n* e9 g+ ^% k4 U1 Z
% S; ~$ N8 m' \6 E* k) O+ i4 d7 T$ P% v5 Y5 I2 i
|
|