TA的每日心情 | 衰 2021-2-2 11:21 |
---|
签到天数: 36 天 [LV.5]常住居民I
|
大家都知道springMvc 都有注解配置 实现请求方式比如:# V* P, Z( g; o( S
@RequestMapping(value = "/index", method = RequestMethod.GET)
7 r5 i; J# T5 z. x) P: B0 v+ A这样的话 用户只能发送get请求。
3 n$ u4 b2 w9 a+ v0 H但是struts2 大多是基于配置实现的、注解的方式用的很少、下面通过struts2实现Http只允许POST请求。. B y4 m6 y7 E. k
- `+ X. f# W f z& O& W
注解 RequestTypeAnnotation:- @Target({ElementType.PARAMETER, ElementType.METHOD})
- L! S) H) K3 M5 ]! w' e - @Retention(RetentionPolicy.RUNTIME) 6 g# b3 Z a! I, h
- @Documented
2 c, R) |+ \1 M% o - public @interface RequestTypeAnnotation {
1 \6 K4 ^( w5 v: y0 a( y0 Q' _ - RequestType value();8 \: c& e0 q8 I3 Z
- public enum RequestType {6 P& N% i2 N9 [* y0 V+ I+ i
- /*** L9 q# ^$ u [' I2 y
- * post方式的http请求4 ~( p2 x o- x5 k& m
- */
& B# F$ \3 }/ x8 w - POST,
3 X$ |$ R# ^% v4 A& `1 [7 C4 q9 N - /**; |6 N5 z$ J3 j3 E' H
- * get方式的http请求
/ V% A2 {6 h6 w - */
( X2 w9 e& N2 Z: w0 o1 r - GET
- R6 B9 R! J' F - }
1 N+ Y2 I' U. P' l1 \1 C7 V - }
复制代码 拦截器 RequestTypeInterceptor:- /**& Y9 {# d0 O0 p
- * 拦截器
; }+ f9 v6 v; h9 A. w; X4 U# U - * 创建者 张志朋9 [; ^0 w* l% l X) U
- * 创建时间 2016年1月5日
+ L; `/ {& A! c) R+ `; L9 U( ? - *
5 d9 F, u+ N+ `9 t% E( S, v - */5 J; O( I" k: ^' g
- public class RequestTypeInterceptor extends AbstractInterceptor {
5 a/ ~9 y4 J6 T& \6 S - private static final long serialVersionUID = -4204585527913002611L;% s1 B" C+ W+ T5 \$ E @( F
- 5 c2 s7 F2 W+ }0 c) F# R( m
- public String intercept(ActionInvocation invocation) throws Exception {
0 h( p) \. O; k( O- m1 x( B; W) @
- @1 @. e1 V+ h& w- Action action = (Action) invocation.getAction();
. I* c7 r. Z2 y6 y& p9 B - try {9 y( i9 @; x( ^. u- J
- Method method = action.getClass().getMethod(invocation.getProxy().getMethod(), new Class[] {});
$ M8 m$ i+ K5 M9 o - Annotation[] annotations = method.getAnnotations();
; J0 V! C6 l3 M, u - String methodName = ServletActionContext.getRequest().getMethod();
) K/ ?2 ~+ Q- L4 h - for (Annotation annotation : annotations) {& ^$ B6 [- k+ J; \7 ~% |! i+ _
- if (annotation instanceof RequestTypeAnnotation) {
: A, m% `0 ~# ~# n8 W0 i - RequestTypeAnnotation reqTypeAnnotation = (RequestTypeAnnotation) annotation;: I* N& z2 j$ @6 n2 _
- if (!reqTypeAnnotation.value().name().equalsIgnoreCase(methodName)) {
- o. I0 V( Z. U _ - return "input";% |2 s7 H1 s2 _
- }' @; @* {, h% ^6 X( X% c/ n- W! I
- }* }7 K- h; |/ H
- }8 S3 [1 v, ~+ w$ m" U+ W' @8 I
- } catch (Exception e) {
2 t6 t+ K/ ]! E9 o8 ]/ O' @ - return "error";
- ]6 h: s. m. @1 ^' N9 t0 X& J - }
' r; ?3 [' c+ v5 R0 S8 Y6 \ - return invocation.invoke();! W3 h9 q" t6 I4 A1 R. A% I/ u
- }
" w4 }' i. }/ S( z - }
复制代码 请求 WelcomeAction:
4 l. f1 p! _' @- /**
. E& e0 x& D0 K" w% k. m$ [ - * 测试action
2 R! I1 ]! C7 T4 n - * 创建者 张志朋9 F O; D4 u8 x% U" f
- * 创建时间 2016年1月5日* a) E4 k i5 y
- *- U8 u0 @4 ~3 k! F. P
- */
( m' Q, Q# x& C+ i6 A( k- i - public class WelcomeAction extends ActionSupport {) B7 i# h/ W8 f- d7 G
- private static final long serialVersionUID = 752609025281512627L;
: O C. \8 e" W1 ~! e; ~) K - private String message;
4 e; N8 v$ H0 ~" r - @RequestTypeAnnotation(RequestType.POST)9 f0 v( |8 i$ {; B
- public String execute(){) t1 D& U% B, O' `) @5 G8 ~8 g) P
- message = "只接受post请求"; c- e6 U }! D2 B4 ~/ v; h2 D
- return SUCCESS;3 y$ G" Y: i8 r: @: D, i
- }6 ?7 {2 h" q. Y7 `& F
- /**, E- I5 v$ |) R) }8 Q3 k
- * @return the message
, i" `3 T3 M# O P, b - */+ e" m1 e/ }' k
- public String getMessage() {4 p; D6 a; Q1 [0 V" S9 N A: b
- return message;+ J4 n# z4 |% r! I ~
- }% j8 N6 ] z( e/ q1 [$ q
- /**4 Z9 ^* ^- ^7 |; q( e4 ?
- * @param message the message to set8 d3 m- n3 P3 L1 m) q! V
- */8 E; X# ~% C4 q, O, S3 f( q5 e
- public void setMessage(String message) {
$ w& H8 g$ B' e% @. m' T7 ~. i - this.message = message;) ^8 P# y% M7 a$ U* p' A
- }5 e% b- s) q0 e$ r
- }
复制代码
7 t2 {. o8 }" R/ kstruts.xml配置:- <struts>
0 E! p* A/ \9 B$ @ - <constant name="struts.devMode" value="false" />
5 S* f7 s6 x2 `0 ] L5 p! ^& K - <constant name="struts.i18n.encoding" value="UTF-8" />, l' W5 m6 [: C
- <constant name="struts.action.extension" value="action"></constant>
?$ m, a2 g$ B. C! ? - <package name="web01" extends="json-default">
$ ^! R1 f% F; r. A$ @, Q - <interceptors>
, I& K2 b' x3 d( m2 Q - <interceptor name="requestType" class="itstyle.interceptor.RequestTypeInterceptor"></interceptor>
1 {( p/ R: j9 z" B - </interceptors>
# O3 d3 x( x3 l: Y: s0 A, @* Z4 a) w - <action name="welcome" class="itstyle.action.WelcomeAction">
! L. h! J! s& p5 s - <result name="success" type="json">
! P& W% _ o& D3 C. z5 @. y - <param name="root">message</param>
/ R! M. N% `- P6 R9 |3 [ - </result>
) c. r6 H: r- ?3 Z0 `: | - <result name="input">/error.jsp</result>7 }2 Y$ f" Z' J6 k" o0 g
- <interceptor-ref name="defaultStack"></interceptor-ref> ( ^ X5 J5 p% r3 [) l# G- ]9 H
- <interceptor-ref name="requestType"></interceptor-ref>
$ x, w* V! h0 ^# x( x - </action>! t& @2 e. V# Q u4 @5 F8 F( e
- </package>
3 C% F) N$ g: ~ - </struts>
复制代码 ; ]: q7 k0 P3 T$ e
项目源码下载地址: 注解实现struts2 action 只接受post请求: Z* J0 R* _/ G# y" h4 j6 P: j" K
4 X% b1 b0 G, K$ \2 o" \: c提取码:
9 Y9 m/ S: }: ?2 N
7 `$ B( R. A$ `% Q& I. W% F4 g
" d. `0 [" j( z |
|