TA的每日心情 | 衰 2021-2-2 11:21 |
---|
签到天数: 36 天 [LV.5]常住居民I
|
大家都知道springMvc 都有注解配置 实现请求方式比如:
( ]9 |/ |' k* U@RequestMapping(value = "/index", method = RequestMethod.GET)! B* x g( S- k& {* ^( c
这样的话 用户只能发送get请求。3 ` Y# X: A9 |' C
但是struts2 大多是基于配置实现的、注解的方式用的很少、下面通过struts2实现Http只允许POST请求。
$ m W( J2 [0 y9 O! w9 w# }
$ {! s+ j6 N' a7 \+ i注解 RequestTypeAnnotation:- @Target({ElementType.PARAMETER, ElementType.METHOD}) * r) _* F- B6 U5 Q; K
- @Retention(RetentionPolicy.RUNTIME)
! v$ M/ l X! w8 t' D9 s - @Documented
' e, p6 x) n% ~; W" \2 ? - public @interface RequestTypeAnnotation {
\1 ?' p7 S* E* D+ j! J$ ? - RequestType value();
1 p$ m) b5 n. v, v- f+ E - public enum RequestType {& I+ y3 q j8 }( [& u
- /**$ i% I- w2 w; L, B8 C
- * post方式的http请求7 f4 o E+ [6 L8 S
- */' [; R" y$ B" R L7 D0 m
- POST,
, S9 G# E+ X0 x1 r1 Y8 s - /**
/ C; b! Y& n* `( D- h* R - * get方式的http请求
8 o2 e0 @/ q& b9 y - */9 T% S8 b8 q7 a
- GET0 ]4 @% D+ c c
- }8 l3 F3 l; u! E, l2 R6 J
- }
复制代码 拦截器 RequestTypeInterceptor:- /**) w- f" I6 ~$ _4 g& g
- * 拦截器
" T4 ]1 ~( p2 V) l! Y: z - * 创建者 张志朋
: o) Y0 e9 k6 e3 c0 R+ { - * 创建时间 2016年1月5日
6 F! S) h. v& O) R" x - *
+ f" t7 ~4 s1 p8 e - */
, g! u K- T* V - public class RequestTypeInterceptor extends AbstractInterceptor {
+ U- a3 [ P# I3 Y& i5 S1 B3 _- i/ _ - private static final long serialVersionUID = -4204585527913002611L;
1 |3 O5 }3 n$ e8 J - 0 S0 M1 \( `* ?8 a3 P
- public String intercept(ActionInvocation invocation) throws Exception {
! ~+ _" [1 y& d, B
+ C/ B- u& j0 G- Action action = (Action) invocation.getAction();# n Y* U) o3 a
- try {/ |+ w8 d/ n) }, m* X; F( D: e
- Method method = action.getClass().getMethod(invocation.getProxy().getMethod(), new Class[] {});6 Z2 x2 v5 p3 q% }$ d4 m# A9 J1 x
- Annotation[] annotations = method.getAnnotations(); }4 C S1 f- A7 D) Q4 m: K
- String methodName = ServletActionContext.getRequest().getMethod();
. A4 Y& S: l4 h4 I9 ? - for (Annotation annotation : annotations) {" u5 V$ m) {* m8 U1 ?9 ~* e# D9 F. G
- if (annotation instanceof RequestTypeAnnotation) {1 Y+ C. p' C7 j9 Y
- RequestTypeAnnotation reqTypeAnnotation = (RequestTypeAnnotation) annotation;
# f8 M% p1 O( d& v0 c9 n - if (!reqTypeAnnotation.value().name().equalsIgnoreCase(methodName)) {
) g" ^( K( _" z5 R9 ^8 S4 H1 e - return "input";7 P% N$ ~2 O, U
- }2 `( W- o* X4 u3 Q# L; r7 W
- }5 b7 ^4 C; q' D1 }7 o4 x' s
- }
8 {* I V( u, ]1 Z# J) [% U - } catch (Exception e) {+ O( P# a1 n# q
- return "error";3 ?" i& v% d5 r% L: W
- }
9 O- V/ @; y# |4 x9 G1 ?- I - return invocation.invoke();& b* ?7 v' y% `$ T3 }+ y1 n5 ^
- }
9 L+ u* F$ ]: B, m! b" S" p; K3 K1 C - }
复制代码 请求 WelcomeAction:$ u7 ~1 \1 W0 [! d" P% [5 ]
- /**# g" g; c* c# S+ p$ T% @
- * 测试action( B$ c) I: ^8 z) J) J
- * 创建者 张志朋
' n, Z1 o( B: W1 x$ _ - * 创建时间 2016年1月5日
0 W8 M& L1 S, }) p g) Q1 C+ e - *
3 V# J' O1 W2 W - */
1 ]/ j$ |. t& R4 b- f - public class WelcomeAction extends ActionSupport {. X' t- B4 z+ \, ?
- private static final long serialVersionUID = 752609025281512627L;
, S: r; _5 i$ W - private String message;
; ?# E {% b) Q3 @& T - @RequestTypeAnnotation(RequestType.POST)
5 R: d( O% n# E - public String execute(){
) c. K+ L8 _9 X$ ?5 A4 W h - message = "只接受post请求";
* ^) N6 \" K$ t5 I4 r0 j; o - return SUCCESS;2 i' d- \7 K& E& q/ O+ P% Q4 L) F
- }
! n% [1 l6 s/ V1 l5 e; M. q. P% ]4 v - /**4 j. _7 D8 Z' y" J0 x
- * @return the message
2 F# `3 E! M, |. Z" F' {3 R - */
- l4 q- d( k2 [, N) j1 w - public String getMessage() {
' s: F6 @+ U' h& i: q - return message;
- j D! O1 z/ E+ F( h) C - }
/ }" z6 a4 p5 {: g- F1 G4 R - /**
# ] m. M2 T$ c - * @param message the message to set4 h$ K' S. l& O) h5 f1 n; j& k6 e
- */
- e" E3 |/ y$ ]2 l, M - public void setMessage(String message) {
1 a& |8 Q$ X3 s+ z7 y w - this.message = message;
# V% d( U! a5 [4 C& I( _7 B r( v - }
7 s* ?1 x/ u% a7 z+ x! U - }
复制代码 # B+ f/ F) W( |; ~( a
struts.xml配置:- <struts>- d0 S. p# n, u1 P
- <constant name="struts.devMode" value="false" />. E1 [% }2 A5 Y6 M
- <constant name="struts.i18n.encoding" value="UTF-8" />0 `( o6 X7 ], ] p) A$ j4 o
- <constant name="struts.action.extension" value="action"></constant>
8 ^/ }, K( b- ? e; |- ]- P. u - <package name="web01" extends="json-default">! o- U! } A2 C' f. C
- <interceptors>. o' e" n O* y
- <interceptor name="requestType" class="itstyle.interceptor.RequestTypeInterceptor"></interceptor> ! g) i9 \0 X3 j2 c5 {; L
- </interceptors># f* Z g' W: f% r1 Q
- <action name="welcome" class="itstyle.action.WelcomeAction">- q/ T/ E% K( Z. K! ]. A7 k
- <result name="success" type="json">" W4 l) }5 s, O) X. K
- <param name="root">message</param>
/ I) b1 p1 {& e0 t. m/ `4 v - </result>
3 }$ }+ n! u( k, Q - <result name="input">/error.jsp</result>
% }+ l- z: G/ c6 o( E' g - <interceptor-ref name="defaultStack"></interceptor-ref> 5 I- @% \& l( \) S2 [$ B
- <interceptor-ref name="requestType"></interceptor-ref>
2 X. E4 o4 u( @) Z \ - </action>4 K; B, w1 m" O7 I
- </package>, x8 c6 ]" A' O. U$ h9 ]0 R
- </struts>
复制代码 / R# J2 r8 p+ r- H; }; g
项目源码下载地址: 注解实现struts2 action 只接受post请求
, u r/ {7 T/ \
) M! J) ~2 o( M- }7 K. m提取码:7 H' u1 \6 q, V
) k: x4 N' s6 j; x' v5 C! q
8 w7 _" f6 t, h: L% }8 t5 o- Q" _. S |
|