TA的每日心情 | 衰 2021-2-2 11:21 |
---|
签到天数: 36 天 [LV.5]常住居民I
|
大家都知道springMvc 都有注解配置 实现请求方式比如:
# Z( T5 i- g) P9 F@RequestMapping(value = "/index", method = RequestMethod.GET)* s' U2 b: D/ ?& f
这样的话 用户只能发送get请求。
* b+ c9 \1 m$ [( |9 w) ?. t但是struts2 大多是基于配置实现的、注解的方式用的很少、下面通过struts2实现Http只允许POST请求。- r" t$ T9 L- l4 t1 S
% Q: Q) `$ F0 {
注解 RequestTypeAnnotation:- @Target({ElementType.PARAMETER, ElementType.METHOD}) $ U2 X1 }8 m7 d" ]
- @Retention(RetentionPolicy.RUNTIME) 0 ~$ {: ^: x7 q* O, Z1 b% W& l9 v
- @Documented & |- T9 g; w2 Q- |. H& ~7 ]# b
- public @interface RequestTypeAnnotation {2 s4 p; b% o4 N% [# }" C
- RequestType value();% A$ D0 h' P1 B/ ^+ a7 l
- public enum RequestType {
$ @) E9 g+ B/ r' s2 b3 v3 O+ E - /**9 C+ m2 v) V/ N7 _" @, x3 a
- * post方式的http请求
7 Q) z! O+ a3 V7 D2 o% d$ @2 I7 \, w - */0 n6 S8 b! e) r" h6 a$ F- W2 b
- POST,
! [3 u; w1 g5 {- x; W* h - /**
1 f, v' N% ~* N8 W4 a - * get方式的http请求; E& ]) |$ n% y$ F$ X
- */
( N9 _# @5 j$ S- Y# w - GET
( O# I% i! h A9 X - }
& C3 ^2 P9 O6 x L - }
复制代码 拦截器 RequestTypeInterceptor:- /**$ Y' S( d( v& X. j
- * 拦截器
# A" w) R6 h5 ?+ d1 X - * 创建者 张志朋
9 c; \$ a2 E' ^' D - * 创建时间 2016年1月5日. c+ }) e+ U+ S
- *
( z% @0 l4 m. w( m* r - */! W8 {: o+ O7 t1 A
- public class RequestTypeInterceptor extends AbstractInterceptor {$ ~7 d/ D% x; d+ k" V
- private static final long serialVersionUID = -4204585527913002611L;
) P: {8 V6 G" t* e
* ~4 L9 J9 s6 a4 A- public String intercept(ActionInvocation invocation) throws Exception {
' _+ R% y9 p: T - 8 u- U) R/ F8 f8 ^. X l, }: {- d
- Action action = (Action) invocation.getAction();4 {& \- @+ Y2 m- F6 U( S. R
- try {& Z. x" O2 L% D2 s W
- Method method = action.getClass().getMethod(invocation.getProxy().getMethod(), new Class[] {});6 B' }9 h* o- i) M+ E h6 l1 @
- Annotation[] annotations = method.getAnnotations();9 ?( Q4 ?4 D! R$ [( j
- String methodName = ServletActionContext.getRequest().getMethod();. W7 g' X( Q E0 Q( }9 i: [
- for (Annotation annotation : annotations) {7 h9 I, M; Z( Z4 a; ]! J
- if (annotation instanceof RequestTypeAnnotation) {
4 j. [5 P0 z5 m* s, {( M - RequestTypeAnnotation reqTypeAnnotation = (RequestTypeAnnotation) annotation;% t& c. g; [5 V& R0 ` V2 m
- if (!reqTypeAnnotation.value().name().equalsIgnoreCase(methodName)) {# G! M3 f; L6 y$ R
- return "input";' |6 p% }1 K, j# ]* {# ~6 {) f
- }
5 `+ {3 f% q1 \& x9 m1 U; [ - }
( O4 x. L# ^9 X2 b. N3 d - }
' _! ~3 P1 A- C, w+ | - } catch (Exception e) {& Z7 i7 U5 ?- K- ]$ A9 N7 k7 H
- return "error";0 @. i% k5 g4 _) Y
- }
6 B o; i, j- T- o+ E% `4 _+ U: Q - return invocation.invoke();
8 c% j, z% i+ @. ? - }" O4 V- v8 ~6 n- V
- }
复制代码 请求 WelcomeAction:
5 v3 m X0 [& }( p- /**
6 o$ N, y, b4 G. t! u1 g - * 测试action
/ o0 \" m/ d" V4 X& e# t - * 创建者 张志朋
! X) c6 \/ V8 R2 ?) c. X% L - * 创建时间 2016年1月5日 q" V+ W: V# t9 o
- *6 J) ^6 u- A9 W$ }+ V/ q( H5 T
- */5 N- w! Q- f% q* l; I
- public class WelcomeAction extends ActionSupport {
" f4 m9 |8 i8 J# j: l$ [+ Z - private static final long serialVersionUID = 752609025281512627L;5 h& B+ C) i. ^% o$ |$ a. i
- private String message;# n3 @. Q8 U3 Q- a5 x3 y
- @RequestTypeAnnotation(RequestType.POST)
. j7 X& Y2 x+ T$ `" d V - public String execute(){
) I2 _$ s- R; S7 \; I$ @; G1 G7 I* N - message = "只接受post请求";
$ u: A9 G5 d j# z - return SUCCESS;
2 _& W* H" w4 T U - }; P3 I+ _( L# f
- /**
# A J) K9 j- ?& h6 F& @/ t+ A1 c - * @return the message2 J1 @+ ?& \' Y: D
- */* Z" M# H; w; |2 B6 ~7 s( H m
- public String getMessage() {
# R+ g" l# W }( ?+ p% m9 B! `0 V - return message;8 U- d5 I* x* W9 E
- }" b" I/ x) _' B" u- L3 \* S- _
- /**0 a( J9 R* \! R
- * @param message the message to set. O( l& T8 d1 g" W1 @
- */
. L z" q( W7 D; Q - public void setMessage(String message) {
& H g, [& w; ^7 F" V# Q: l - this.message = message;8 v0 R- d5 {; n3 N) {3 M3 h
- }4 d$ U+ Q/ ]: h6 d9 n
- }
复制代码
1 ~, P2 \$ h3 M( V2 B/ y3 hstruts.xml配置:- <struts>
/ j& q6 Y) a5 o! ` - <constant name="struts.devMode" value="false" />) N1 | X, |: r/ Q
- <constant name="struts.i18n.encoding" value="UTF-8" />
7 l6 Y8 L" X/ r0 F0 S- E - <constant name="struts.action.extension" value="action"></constant>. S6 Z: u2 f" \4 S, F: ]
- <package name="web01" extends="json-default">
7 d% q$ R! j2 w) h ]3 _ - <interceptors>
% o5 S1 H8 `! p2 w/ \5 a - <interceptor name="requestType" class="itstyle.interceptor.RequestTypeInterceptor"></interceptor> 7 w6 J* m/ z/ p) k5 Z' V: r
- </interceptors>. G P3 {: k1 Z; O8 L
- <action name="welcome" class="itstyle.action.WelcomeAction">
( p6 [: Q8 v$ k. Y) }/ l7 y# y - <result name="success" type="json">
4 |7 O) K9 K& j - <param name="root">message</param>
8 \- l- [4 A9 n; W5 ^ - </result>, S" ~2 K0 U7 U0 ?+ Q; B" w
- <result name="input">/error.jsp</result>
3 f: {% C' v! g$ u! l0 d - <interceptor-ref name="defaultStack"></interceptor-ref> 5 y/ ~; G, L2 S5 m [7 c) w
- <interceptor-ref name="requestType"></interceptor-ref>
8 U4 r. S4 I7 }8 b$ X7 d9 T+ t1 ^/ P - </action>! N/ I- _ i4 Z# @3 j, g/ Z) L% @
- </package>
/ k' u. E, F, \9 q) d; g4 a3 | - </struts>
复制代码
* j$ L# r6 ?7 Z& X. j2 V项目源码下载地址: 注解实现struts2 action 只接受post请求
& Q* r- W* r. b
9 w6 V: f% D7 d提取码:/ B; a7 C2 f3 h( L! Q0 O- v
. \0 F `* \0 e( c L& a1 M/ b) F# d1 C2 L8 j# H* W
|
|