TA的每日心情 | 衰 2021-2-2 11:21 |
---|
签到天数: 36 天 [LV.5]常住居民I
|
大家都知道springMvc 都有注解配置 实现请求方式比如:
# p. t8 Q' ^+ b4 i@RequestMapping(value = "/index", method = RequestMethod.GET)1 s' B a/ b X }3 D
这样的话 用户只能发送get请求。
( M3 `3 [" `5 T( T, n4 r但是struts2 大多是基于配置实现的、注解的方式用的很少、下面通过struts2实现Http只允许POST请求。; j. v: h l3 @ b2 g: h
- g4 a$ C" M- d: ~- @2 ~
注解 RequestTypeAnnotation:- @Target({ElementType.PARAMETER, ElementType.METHOD}) 7 [- a% ^$ E3 v' |. K. X4 B
- @Retention(RetentionPolicy.RUNTIME) 7 A) U* s! a1 D9 B, Z7 ~/ [
- @Documented
$ L% o( f; j2 P - public @interface RequestTypeAnnotation {
8 R5 }% ^3 G( A( P1 u7 ^8 J$ e% U `' w - RequestType value();
8 x3 O- O. M. H1 W' n9 f; q - public enum RequestType {. B& _( X Q4 _6 I- K0 W1 v
- /**
# M1 [, j7 ]3 q* S& K6 d% X - * post方式的http请求
4 G4 K. J& q6 b+ n1 a- f - */
8 e/ o! h( o; d7 w" I- {6 y7 m - POST,
9 g% K$ n6 ?: o9 @3 p( X - /**
6 ^! e. Z. C" l6 [6 @% z$ Q% r' V - * get方式的http请求8 [4 h& k, ~, ]% i9 Y( A1 q9 b
- */8 c! m. d7 R4 J! Z$ a
- GET
& ~7 R3 i6 u# t6 ` - }
. G0 I# s; R, P& I d K# @, ?/ y - }
复制代码 拦截器 RequestTypeInterceptor:- /**. Y' H5 Z2 P x+ x
- * 拦截器' P! t2 E4 a6 e6 d0 T* R8 v
- * 创建者 张志朋5 X3 T1 G1 b! K3 D; [
- * 创建时间 2016年1月5日
$ `4 m" Y4 v% A0 G* F* B! k - *$ ~8 K; @1 C) o# \
- */% r0 J* y1 s/ s: f5 ?7 U! u
- public class RequestTypeInterceptor extends AbstractInterceptor {' x( C7 K$ k8 ]
- private static final long serialVersionUID = -4204585527913002611L;
. r9 m# @) ~+ l" H6 v. X - * b; s0 D" c2 @0 w4 R7 a
- public String intercept(ActionInvocation invocation) throws Exception {
6 g- J3 t2 w. x8 J0 y. D- ~/ E - z5 ^/ u, V& E7 G# ~) w
- Action action = (Action) invocation.getAction();
& ]! b R! M2 C - try {# E* @( ^( H7 ^) u4 W# Q
- Method method = action.getClass().getMethod(invocation.getProxy().getMethod(), new Class[] {});9 H; }" g- o( x; ?: x
- Annotation[] annotations = method.getAnnotations();" d2 q+ S) r' d
- String methodName = ServletActionContext.getRequest().getMethod();( z9 w0 j; o X3 E c3 {
- for (Annotation annotation : annotations) {9 A. I: G: P1 ?$ r1 C. F0 ]
- if (annotation instanceof RequestTypeAnnotation) {: l+ @1 b% z6 ^6 |
- RequestTypeAnnotation reqTypeAnnotation = (RequestTypeAnnotation) annotation;
7 w4 c8 u4 S+ K6 { C% i# d - if (!reqTypeAnnotation.value().name().equalsIgnoreCase(methodName)) {
1 Q- _0 ` [' y/ q& E2 B - return "input";% `3 L7 R+ y7 z) s0 u0 Q
- }5 `( O0 T9 K/ d6 g3 j
- }( X x9 @* i1 S9 H5 o7 X+ ^2 m7 K
- }
( Q/ f: g7 a- N - } catch (Exception e) {
# U7 f: U. }/ M - return "error";6 R" X. }* h. _
- }
6 `, q9 x9 x v6 ] - return invocation.invoke();
$ x5 y0 \7 d" ~/ ]$ u# b- L% w" a9 q - }# s- p+ B5 w# `& |
- }
复制代码 请求 WelcomeAction:; X* C9 F) b8 n$ R Z7 L8 V* S
- /**
- `: [; {, c! P* v$ ~" w& { - * 测试action
2 N+ r4 x; ^5 D$ q - * 创建者 张志朋4 Z L# I, k4 j6 `
- * 创建时间 2016年1月5日6 {# s1 M+ d/ q( l* }& h. a
- *
8 i: L) u2 ?/ H5 C# E2 |+ d - */
- U' g1 S. h9 F) T - public class WelcomeAction extends ActionSupport {
" f! V* ~1 H1 i - private static final long serialVersionUID = 752609025281512627L;5 _: w& S; M, _; Z
- private String message;
, ~( P7 B$ A6 W E' ? - @RequestTypeAnnotation(RequestType.POST)
8 @9 l. O6 @. ^2 i - public String execute(){/ U2 f6 ?& {1 m) ^
- message = "只接受post请求";9 x l) _0 W4 w4 p
- return SUCCESS;- g( z" N0 w( e6 y' o {
- }
1 L& T2 a1 u5 i7 h* ?: P - /**$ P8 V5 o8 [* W, ?
- * @return the message9 ~& Y- A6 X' B
- */; b/ t0 c x2 G5 k4 g3 w
- public String getMessage() {+ d1 r: r- i+ `/ U) }: z
- return message;; M9 n- y1 r4 d3 ?; a" I/ n2 [
- }4 i6 c; e) Z1 v% M
- /**
( c" r8 N8 p% `* O; [ - * @param message the message to set' a- I6 S& Y2 g
- */* ~# e5 k& q2 |, {) C
- public void setMessage(String message) {, `9 X8 |2 \5 \9 |3 @; e- N9 n
- this.message = message;+ ~0 e# O) r6 Z0 I( C
- }4 F$ d0 V! w; p% s
- }
复制代码 % q3 c' Z$ N: L6 B0 u ]. j
struts.xml配置:- <struts>
0 h/ W4 x$ [$ ^% j# l* n9 G - <constant name="struts.devMode" value="false" />
1 ^1 }) E k; A - <constant name="struts.i18n.encoding" value="UTF-8" />+ p+ Z# P$ o: L
- <constant name="struts.action.extension" value="action"></constant>4 N3 \; N0 C& ^. f, p; W
- <package name="web01" extends="json-default">
6 d( t+ e7 F9 c$ s - <interceptors>& i$ h; J4 j- m1 T- F
- <interceptor name="requestType" class="itstyle.interceptor.RequestTypeInterceptor"></interceptor> ! i1 ?, P2 D5 P$ c9 A& B, H
- </interceptors>
Y2 b, U0 c4 K j4 { - <action name="welcome" class="itstyle.action.WelcomeAction">
, g. o( d. k6 c! f7 o - <result name="success" type="json">
8 u j5 `7 `5 B0 R/ N - <param name="root">message</param>9 i4 q# r: X! {
- </result>! r2 f; T' x) W$ G# z% R) M7 E( z
- <result name="input">/error.jsp</result>0 w4 ?' p4 n" |3 _
- <interceptor-ref name="defaultStack"></interceptor-ref> * v& t8 c9 k, I# n' D/ U% P
- <interceptor-ref name="requestType"></interceptor-ref>
# d5 q Q$ \. P - </action>
8 E' N5 M* z) B+ {( v9 C' R - </package>
' K& t: Y3 i5 a Z8 F% B - </struts>
复制代码
& }+ E: h8 V9 z' S" b1 B) R; l项目源码下载地址: 注解实现struts2 action 只接受post请求
! o( Z) U' C& j2 ~) l0 B9 ]( X" X9 {2 s& l, s
提取码:
1 v6 ]) E* `& G5 c F4 x. `! A6 } ]3 A7 | K& [9 H
+ H" v B5 B. A& W9 d |
|