TA的每日心情 | 衰 2021-2-2 11:21 |
---|
签到天数: 36 天 [LV.5]常住居民I
|
大家都知道springMvc 都有注解配置 实现请求方式比如:- s& q3 b7 K! L; e% g
@RequestMapping(value = "/index", method = RequestMethod.GET)* j7 d4 V- |" ]8 ^6 N& _
这样的话 用户只能发送get请求。
% w2 h( S8 w3 M: N2 \; L6 b. O# w但是struts2 大多是基于配置实现的、注解的方式用的很少、下面通过struts2实现Http只允许POST请求。 E+ X3 Z5 v( X( \5 B
' S, l8 U7 B- g2 \
注解 RequestTypeAnnotation:- @Target({ElementType.PARAMETER, ElementType.METHOD})
8 `5 p0 W( C+ U- o" B" }" z - @Retention(RetentionPolicy.RUNTIME)
" r% s6 E; e4 D - @Documented * j; o, s3 K7 J1 h8 K# @$ k( L
- public @interface RequestTypeAnnotation {1 H9 ?/ I- ]4 h
- RequestType value();* n* w& p2 _1 i% N. @& n7 D
- public enum RequestType {
! B- q3 e* K- v; C% l - /** \7 b1 W7 |# p% Y
- * post方式的http请求
9 i4 s6 h- ]4 ~. O; t - */
4 R! k) ?' b, O% M% }8 N0 r - POST,5 g v1 {" D4 x/ p
- /**1 ^' r6 F3 l u, }+ j5 i
- * get方式的http请求
6 t( r1 V2 e) l& q6 E8 O - */3 B6 _, G* c+ {5 P. Y: M! h
- GET/ J4 { o, b1 S1 g9 X
- }$ ]# d p6 f& q% H' s
- }
复制代码 拦截器 RequestTypeInterceptor:- /**
; q9 Z9 O A( z# F - * 拦截器
9 E0 ~0 z% e; f5 k- m- x! r$ [* Y - * 创建者 张志朋
' K2 d- ]7 e0 D R. A - * 创建时间 2016年1月5日- ?7 b" N2 e2 X: W- o7 B
- *
5 W. |/ s7 m' I/ u. A/ q2 b, t$ | - */0 [6 ?3 v! A% R4 Q7 X
- public class RequestTypeInterceptor extends AbstractInterceptor {/ A: _, ]; m/ S2 Y0 k1 o& C
- private static final long serialVersionUID = -4204585527913002611L;0 A2 i, f: J( a8 L4 S v
- ) _* N# X1 a3 z6 K$ [
- public String intercept(ActionInvocation invocation) throws Exception {
1 j* h4 O' r8 @6 X( L: s7 ]
- u i6 H7 f3 x/ j# |- Action action = (Action) invocation.getAction();% {/ g0 R5 T3 y, g& P7 n
- try {# p! Z ^% W. i k6 e
- Method method = action.getClass().getMethod(invocation.getProxy().getMethod(), new Class[] {});" k: W7 i. A9 b l* B* _0 U
- Annotation[] annotations = method.getAnnotations();
- k% T" N! p# t5 f) I. j4 d- m - String methodName = ServletActionContext.getRequest().getMethod();
% W$ \5 T2 K) B( z) P+ @* P, n1 L' g - for (Annotation annotation : annotations) {$ g; y% D1 c7 q! M4 H
- if (annotation instanceof RequestTypeAnnotation) {) y: V: |! z3 @% u2 c
- RequestTypeAnnotation reqTypeAnnotation = (RequestTypeAnnotation) annotation;
6 I+ ?( ?: H7 w - if (!reqTypeAnnotation.value().name().equalsIgnoreCase(methodName)) {/ d/ l8 Y, i0 Y, J
- return "input";
# o" n9 _- C# b- r0 k* D( @( c - }! w* n- ?( Y; y2 s% J
- }1 M% I$ K/ F- p
- }6 q& {; \" G$ j& R% O
- } catch (Exception e) {/ O, L9 J; r0 C' v4 j$ y( k
- return "error";5 T& c( o) R8 p! b
- }+ M( n u! i. P+ S
- return invocation.invoke();
& o: c- p5 M$ K$ Z+ c0 E - }* k u v* E( w" B
- }
复制代码 请求 WelcomeAction:. ^( m5 R6 p3 c
- /**2 o, S& t# ?$ d; d
- * 测试action5 }7 w/ p! y' O! q* k8 j
- * 创建者 张志朋- ^* U& N& u9 N
- * 创建时间 2016年1月5日
" ?2 H* d2 n r9 P8 n; Z - *
; w! v) A8 c! u) ` - */
v; E0 z, @7 _2 h* d+ K8 L - public class WelcomeAction extends ActionSupport { N: v; M ], B# J/ m
- private static final long serialVersionUID = 752609025281512627L;
. ], k- i \# Y5 d# ]# L3 J - private String message;' H0 |" ?. S1 L0 D2 n0 P; B+ f
- @RequestTypeAnnotation(RequestType.POST)
5 k f# A o# q$ s& ^1 j7 I - public String execute(){
$ C8 ^' E1 E! Z( r! u5 N - message = "只接受post请求";
' U$ h9 d4 H! X/ S - return SUCCESS;
" w& o: V5 d9 u" @/ Y - }. q: _& @, d9 E1 T8 a
- /**
+ Y+ p. l7 v" U* D* g/ R$ j8 F! a9 W - * @return the message
. l9 E3 v3 ]# b8 E - */5 k1 N6 I/ n7 S8 \' O6 I. _
- public String getMessage() {
& R9 z) {1 ]8 Y2 w) m( @8 ]8 g - return message;
+ U0 l) ] T' `2 Q/ k - }( X7 [5 ]# b1 H9 |
- /**
9 r+ `! L" b: e8 V. r - * @param message the message to set
8 j2 P; v) A6 `, w, }1 } - */; N1 t7 i! c9 e$ B
- public void setMessage(String message) {* u- z. c& \; S m! e: B5 Q/ H. _) S
- this.message = message;
' g8 K8 v2 {0 P4 a6 j - }
! k! c+ O% o& J$ ?2 k& |# T - }
复制代码 ; J. z( d0 i& a% C, d, M
struts.xml配置:- <struts>
1 ?6 j2 H( S" ^" `! N8 R' V; { - <constant name="struts.devMode" value="false" />
, F% G0 n; j' _6 |; A2 N+ V. g- P - <constant name="struts.i18n.encoding" value="UTF-8" />* W- S. j. h2 y& W/ j% q2 Y
- <constant name="struts.action.extension" value="action"></constant>; |- }( l3 R- F- g
- <package name="web01" extends="json-default">
* P% f$ V" }! l" }/ r5 d e+ n. Z - <interceptors>& m* [; G. P( n, a6 E; Y2 ^
- <interceptor name="requestType" class="itstyle.interceptor.RequestTypeInterceptor"></interceptor> 2 N& l+ T$ _6 k, Q& o; q) S, ~' b& l
- </interceptors>) }% U3 ]8 q7 U. c! E5 B9 e
- <action name="welcome" class="itstyle.action.WelcomeAction">
4 s/ C" S& {* s! r/ U5 q; M( o - <result name="success" type="json"># ?' l. [0 ?& E* V& `* X- N: O
- <param name="root">message</param>. r& L2 F3 F3 w
- </result>
8 f) g- R4 F5 f- [. @' J$ Y' P - <result name="input">/error.jsp</result>9 Z' R( c+ t: H$ l: F
- <interceptor-ref name="defaultStack"></interceptor-ref>
9 p7 }7 w( |) |4 b - <interceptor-ref name="requestType"></interceptor-ref>
* f8 g% `; d9 t, N) K - </action>
8 \$ a- p" {) V: X8 O# P8 s% N - </package>0 F8 r& [7 \" b) R {# @" k% _2 o
- </struts>
复制代码
9 \' b }; f% e* I/ I项目源码下载地址: 注解实现struts2 action 只接受post请求
. d# c, i. W% y2 G
3 ^. `: Q. w" F9 R- Y$ b! [- P提取码:$ d9 l P- C% ~9 a) n4 p' O- t
# S! F+ h5 @! B
. l" @0 Q9 P4 \1 Y7 ] |
|