TA的每日心情 | 衰 2021-2-2 11:21 |
---|
签到天数: 36 天 [LV.5]常住居民I
|
大家都知道springMvc 都有注解配置 实现请求方式比如:7 Y6 n7 Y3 |9 O. M
@RequestMapping(value = "/index", method = RequestMethod.GET), ?) l+ X. {% _' w! p' O: E
这样的话 用户只能发送get请求。
8 {" \8 t' Y8 _& o但是struts2 大多是基于配置实现的、注解的方式用的很少、下面通过struts2实现Http只允许POST请求。
2 M* g- b6 `' O* X% `
* v) b& j- Q4 U5 F注解 RequestTypeAnnotation:- @Target({ElementType.PARAMETER, ElementType.METHOD})
% O$ I' P) g. h* {" x x - @Retention(RetentionPolicy.RUNTIME) , X1 c$ g( E2 Q' l8 X1 C9 \
- @Documented 7 k, H2 J& S! L" b, R3 B
- public @interface RequestTypeAnnotation {4 _; I) f" I$ H) `, U
- RequestType value();" w. o% A: \: B# y0 o( H
- public enum RequestType {
' M& \1 {# W+ x4 V - /*** y2 R5 M9 ]7 a- F
- * post方式的http请求# ^# H' ~: ]5 z
- */& c0 c9 R/ n* o% Q
- POST,$ \$ ~" a9 e( U: n1 S% h- g
- /**
3 Q3 H2 O3 G3 \) j8 W F( u, G - * get方式的http请求
# y: f6 d3 }" M/ D% x, P4 R2 N - */5 K. }. v8 ^# x
- GET! I5 r) a9 I2 n' s' J
- }
6 |6 ^/ C7 c/ z( a$ @, O - }
复制代码 拦截器 RequestTypeInterceptor:- /**8 r% g, `$ G, R) R! O, D% ^
- * 拦截器
( H5 c3 F9 q A* n& S, H1 ] - * 创建者 张志朋
4 V; M( O( n! C - * 创建时间 2016年1月5日
; A: K- j& B; ] - *
* Q8 }: m& Z7 O8 | - */! ~& ]- `1 x' ]1 Y
- public class RequestTypeInterceptor extends AbstractInterceptor {
9 e# d' S6 M1 N3 b5 W - private static final long serialVersionUID = -4204585527913002611L;
; Y4 }9 a8 C& x# ]( [$ u - & [- V& z. G- W, A
- public String intercept(ActionInvocation invocation) throws Exception {# A& ~. ?6 i- p: E1 `
- , J: d9 E; _ W {
- Action action = (Action) invocation.getAction();
8 I F1 R. ?% L: H* p - try {
- r3 I) ^1 I3 J- C% J" Y - Method method = action.getClass().getMethod(invocation.getProxy().getMethod(), new Class[] {});6 o" _1 Z* \; d. @" v( s, @ O
- Annotation[] annotations = method.getAnnotations();
5 O- o5 l: P0 d6 Y% K - String methodName = ServletActionContext.getRequest().getMethod();
8 d: U4 u% Z% o. e, F5 K - for (Annotation annotation : annotations) {5 N# D! D% n3 [0 ]# i
- if (annotation instanceof RequestTypeAnnotation) {& W- U) H& R, v
- RequestTypeAnnotation reqTypeAnnotation = (RequestTypeAnnotation) annotation;2 O G+ a ]2 J
- if (!reqTypeAnnotation.value().name().equalsIgnoreCase(methodName)) {
0 n. `: u: C9 m; H/ K& u3 F+ P - return "input";
" D+ c! e' p# V- n4 G9 G - }
/ \- v. w/ X# Y; I/ u* p! u! V - }6 q& }3 i8 a3 r6 B
- }
' E. I2 Q" F; S7 q* W$ W - } catch (Exception e) {4 S8 ]6 _! D/ K2 _! h
- return "error";
7 l. A: {$ p" }; J - }
" ]+ A/ H. q) g y- @- T - return invocation.invoke();
$ \' D7 K) X7 z) b @+ C, D% ? - }( k1 h7 i C% q1 L$ D
- }
复制代码 请求 WelcomeAction:& U3 F7 v1 r3 g
- /**
& O6 M% M" o' K J7 G/ R+ Q - * 测试action2 y: }6 B+ `, ~" I: Y) I
- * 创建者 张志朋
3 f% P, ~+ u- L5 ^: U* r - * 创建时间 2016年1月5日
& P5 a& A0 J8 d0 B - *
. O+ }* |8 M# n U* V2 B4 G( M - */, m- i9 f' E8 j$ Z0 K4 u5 ^
- public class WelcomeAction extends ActionSupport {9 _& ]6 c! o1 A5 h
- private static final long serialVersionUID = 752609025281512627L;* C* U- O1 B/ Z; D
- private String message;; @7 ?. k: r! P( `
- @RequestTypeAnnotation(RequestType.POST)
3 L+ Z+ u# ]& V" w5 F" v: } - public String execute(){5 b+ y( N- k+ z& D$ E
- message = "只接受post请求";4 N9 x1 j S; ]. \- o3 y* O# M
- return SUCCESS;/ k% F- l1 t! ?5 z
- }; X) l: B' x9 p0 Q, J' N
- /**
t) T4 W0 g/ I7 G9 D: r1 _ - * @return the message7 m9 N/ X" ]5 W/ Q4 t) j
- */
x3 e5 w/ j" c$ H G - public String getMessage() {
1 A4 o' \" v3 K4 j( c* H) _. n9 S) l - return message;
" F9 S+ c5 x9 d" @ - }( ]. L: t6 n; q5 m
- /**
8 I8 s- T- g& x - * @param message the message to set- X% F5 _8 s! P2 [2 k7 R5 g
- */
" j. O/ g }$ t$ J( j - public void setMessage(String message) {- F1 Y W2 A4 b4 M" p. W7 d0 `
- this.message = message;+ h( G# i2 s4 Y. F4 X
- }
/ [$ J/ [* e& J9 D8 c0 {$ P - }
复制代码
3 F$ y9 K, f' T* q. {, Gstruts.xml配置:- <struts>7 C1 {! F8 T E
- <constant name="struts.devMode" value="false" />4 O9 ^, ?0 ~+ ?
- <constant name="struts.i18n.encoding" value="UTF-8" />" y) l+ ]+ o E5 h
- <constant name="struts.action.extension" value="action"></constant>0 j6 {( H2 p2 K% j0 ~5 N) q
- <package name="web01" extends="json-default">
9 w* ]; X# X! `5 D$ l - <interceptors>
' S& n5 O& h. s; W- G - <interceptor name="requestType" class="itstyle.interceptor.RequestTypeInterceptor"></interceptor> 1 @) r6 D7 d' A
- </interceptors>
- @( H' w) m" l( T2 U - <action name="welcome" class="itstyle.action.WelcomeAction">. i5 F: c8 m# x# ^
- <result name="success" type="json">
" ?; S1 z0 Z' \4 ]5 N9 w - <param name="root">message</param>
) k5 p3 F/ X2 Y9 I - </result>( C( x( j5 r: o3 i/ ~; C
- <result name="input">/error.jsp</result>) ^* O# Q2 J- g, S; K/ g
- <interceptor-ref name="defaultStack"></interceptor-ref>
" w' H9 J5 I+ p1 @0 ?3 G - <interceptor-ref name="requestType"></interceptor-ref> 5 s* L) j& x8 C+ i0 \' J- @* g
- </action>1 N, L4 L8 L& ]9 J
- </package>8 s5 C, |- n7 s% W+ E8 p
- </struts>
复制代码
: U. r8 s! a$ s项目源码下载地址: 注解实现struts2 action 只接受post请求4 b2 |) u$ m( ]& x- I: D/ A0 X5 G o* z; l
3 C8 g: g* w& \: y- A7 q
提取码:
( Z: Y4 N7 q' U- h( J9 r( q" l0 a* ?. t3 h* Q" l
6 a Y" L6 J! B( |
|
|