TA的每日心情 | 衰 2021-2-2 11:21 |
---|
签到天数: 36 天 [LV.5]常住居民I
|
java实现微信公众平台开发项目源码
o" k# Q5 g( b) S' {% A' g: O本文向大家介绍使用Java来实现微信公共平台功能,实现根据回复的内容返回对应的消息。供大家学习使用。
7 M* v# m- x9 g$ Y) z& a8 _9 Y; K微信服务端收发消息接口:WechatServlet.java
3 @ w0 e+ T, {* X9 j0 M; r; g: _- package demo.servlet;
5 ]( p, o, [( W- p2 [. J3 W - ! x) c, ~. S$ f! b
- import java.io.BufferedReader;
8 V, g6 |# w) w0 g5 { m% C4 ] - import java.io.IOException;
3 p; J- Y; C7 W. u5 V9 Y - import java.io.InputStream;- T% S" ^" n) p7 R7 E7 P
- import java.io.InputStreamReader;. {3 g& \ o+ t* P2 H; i6 v
- import java.util.Arrays;- ]% M( ?. R A" y% s# K7 Q& f4 e
- q6 @# Z9 B( F
- import javax.servlet.ServletException;/ B( \' x( i4 Z, Y! N, y
- import javax.servlet.http.HttpServlet;- J2 X9 E# f+ F' H& X e/ h
- import javax.servlet.http.HttpServletRequest;
, a$ n( e. m8 U - import javax.servlet.http.HttpServletResponse;$ y% R4 m3 a8 J6 `. b7 q
$ _; R4 \8 O9 E- import demo.process.WechatProcess;
( z' P: l, ~- r3 ~6 V5 t) X - import demo.util.SHA1;$ h8 C; s% c( ]
- /**1 d' g+ f3 X/ Q. n& @
- * 微信服务端收发消息接口
2 r1 `* l. R9 p! ~) E. k - *
2 q3 e! `- `8 x0 k0 K - * @author 科帮网3 ]/ q3 x$ Y/ b) b' u
- *
3 ^' T+ q& m9 t/ a+ R - */* U% ?3 U d c
- @SuppressWarnings("serial")
4 ^3 b+ D/ T+ ^1 O9 ^ - public class WechatServlet extends HttpServlet {5 @9 W( f+ \2 P& |( K; y+ o+ z! o
2 b" m' c& W M; T5 w$ W2 l- // 自定义 token
P2 F) ~- \" l$ x- j0 m7 x - private String TOKEN = "52itstyle"; , N3 v+ V& p: d6 g* X! |
- public void doGet(HttpServletRequest request, HttpServletResponse response)
" C- |+ @5 g) C" V% ?& y+ z - throws ServletException, IOException {
# D }$ W9 k. \" ]7 m' ?) e - String signature = request.getParameter("signature"); // 随机字符串2 _1 H/ j" \: x0 J
- String echostr = request.getParameter("echostr"); // 时间戳
" g8 _. B6 u1 `3 ]% i) [0 W+ L7 a - String timestamp = request.getParameter("timestamp"); // 随机数. j, g: j2 N" j" k8 y
- String nonce = request.getParameter("nonce");! _4 X3 s( {0 E# |3 y$ Z
-
* {7 b, f8 t/ A1 c" ~# z( ] - String[] str = { TOKEN, timestamp, nonce };: U( [- i, O. ~+ N5 O' I, K' w
- Arrays.sort(str); // 字典序排序+ |* O6 A* _4 ~
- String bigStr = str[0] + str[1] + str[2]; // SHA1加密& x# q8 l) d) ~; ~
- String digest = new SHA1().getDigestOfString(bigStr.getBytes()).toLowerCase();
) D) t( d( h7 t" ^( K - // 确认请求来至微信
* o: S, V+ m/ d2 p1 h. J' V" D0 }' Q - if (digest.equals(signature)) {
. R2 k+ F! H% |& B9 N, U' E - request.setCharacterEncoding("UTF-8"); w; Q2 P% y3 b$ L* \# U- `) u
- response.setCharacterEncoding("UTF-8");* G( J( j, j h0 n7 d* l8 _9 q
-
, P( R7 L& o# W. t) I& x - /** 读取接收到的xml消息 */" a! `' @) N. I& P3 c# n
- StringBuffer sb = new StringBuffer();) z2 u3 M. W) d1 }6 S: D
- InputStream is = request.getInputStream();9 m+ I# v3 _6 I: P- y4 G
- InputStreamReader isr = new InputStreamReader(is, "UTF-8");
4 W7 @, t7 ~3 x2 t! z - BufferedReader br = new BufferedReader(isr);
+ A# q, }$ ?* h - String s = "";
L3 w" s/ s H1 l$ q( H3 C - while ((s = br.readLine()) != null) {
; e' X+ H' k( d9 [, d6 b) s, N9 S8 V - sb.append(s);. `( V: h+ T( i2 V
- }
' c) d; Q- K+ I2 M7 g9 }2 g- s - String xml = sb.toString(); //次即为接收到微信端发送过来的xml数据
) ~) |6 D/ y" b* b -
+ _% L' T E5 t) F6 b( v2 g+ N7 t - String result = "";
4 N0 m0 ^3 v: O0 J8 o - /** 判断是否是微信接入激活验证,只有首次接入验证时才会收到echostr参数,此时需要把它直接返回 */( U* ?% C8 ?* h. \
- if (echostr != null && echostr.length() > 1) {
& `8 X) T: v5 X! `8 V7 T - result = echostr;# W+ x/ Y- A3 D' S8 M
- } else {8 S# W9 ^( ~$ w4 D% r d7 S0 c- C
- //正常的微信处理流程* E7 B1 P. u. z# O6 x) u
- result = new WechatProcess().processWechatMag(xml);
: P7 B) b) c. g, o& u+ i - }# G, a7 ]( v+ ^4 f* g9 N
- System.out.println("说的什么"+result);* @# x. s' Q: F5 x9 I8 ~( E
- response.getWriter().print(result);% m/ C1 O. m, H L
- }
8 d/ c5 X+ N) u - }
2 ?/ S/ e7 B6 b6 e: V
; A8 g: l# O# p) w+ d7 H O- /**
" a8 X4 u9 i$ T6 V - * The doPost method of the servlet. <br>
* y P& W3 p. [! t: K C+ } - *
H- I2 I* ^! g. l2 ^1 _ - * This method is called when a form has its tag value method equals to
/ S, o) Q: E7 z: n! y( n0 b6 B - * post.. z* U7 g0 t% r7 B+ c% `- h
- *
8 {& |) n3 [- G- y( n1 p - * @param request
+ Z, z7 }8 l. J0 B- _& F( N' P - * the request send by the client to the server$ x, H$ y% f( D
- * @param response4 i1 k4 D# `3 C" q3 o5 H% W" d
- * the response send by the server to the client
: H% G# P- U/ B - * @throws ServletException/ q: E: n- i9 U& N2 {; \& I
- * if an error occurred1 R( ]! j. Y8 j" g
- * @throws IOException: r! T& @; F1 L
- * if an error occurred
3 N0 D& }% e& N; N - */
5 D* l5 N2 ~7 \9 d- y1 o6 ^ - public void doPost(HttpServletRequest request, HttpServletResponse response)# \) P% m# n( w5 q/ i( r
- throws ServletException, IOException {
- @" n! i! u4 T( }0 | - doGet(request, response);) o* R. p) y, f% O4 v
- }6 u7 l" Z w! }1 N. ^! H
- 8 W; @2 {2 G/ @
- }* w6 p F% I) D( W" u
复制代码 接收到的微信xml实体类:ReceiveXmlEntity.java
2 {; E6 X% c$ H8 W- Z/ i- package demo.entity;
( `2 n V# ~. @/ g9 b - /**6 g0 |4 [1 _( A6 g; n
- * 接收到的微信xml实体类8 U/ X/ @! s9 L9 K* t1 K
- * @author 科帮网
+ c" M% O. {) q( I! P! T - *7 D* B! A7 s3 q8 L: B9 C9 \
- */
% \; R ]+ _& j. g9 _# }1 o, b - public class ReceiveXmlEntity {) U$ j( J" l" ^( @
- private String ToUserName="";+ ]+ a/ e/ f+ w M' _
- private String FromUserName="";5 E7 l( e, E2 h
- private String CreateTime="";8 T& K9 Q; c6 y* T- f( N
- private String MsgType="";
7 ]% g" k" G0 V: J4 D7 E8 @ - private String MsgId="";# t3 A) O: U# A4 l9 [+ v" }& c
- private String Event="";2 ?4 n: {. u9 ?; C$ A K9 U
- private String EventKey="";
* D* o% r9 ]2 Z% V* Y9 E" E - private String Ticket="";
* m, ?0 {( |$ j# L1 d; m6 F. d. b - private String Latitude="";9 @5 m8 f* n2 |1 p9 L+ x5 ~, C; Y1 M
- private String Longitude="";
! Y1 g5 v% b2 V - private String Precision="";# n- L" i" V; h4 C
- private String PicUrl="";0 S: u$ F4 o* Y/ K4 O7 ?
- private String MediaId="";" h% }7 o1 f& Y! j5 D
- private String Title="";
1 q4 C. S6 _9 @ - private String Description="";
' y( p7 V9 w1 I - private String Url="";. b& P6 c* r3 [$ ^* ]" u
- private String Location_X="";5 k% l% J9 f" p$ ~6 k( r
- private String Location_Y="";
' @2 P1 c/ a5 y* W5 O - private String Scale="";
8 p' x6 Q' k. K# `& U/ _) } - private String Label="";9 F! E) Z3 t3 Q' Q# H" J* q/ d
- private String Content="";8 b _6 v" Q7 d- q2 m
- private String Format="";
$ h1 B4 Q9 l& S - private String Recognition="";8 `" Z% g( r* s
- : i! ?' b+ x( w+ ^( h
- public String getRecognition() {
1 i! A7 q' n: d* {" P - return Recognition;0 K9 _/ v S+ k* v) E) q) O6 A; Z
- }
9 j. S0 l4 h3 b/ b4 o" [ - public void setRecognition(String recognition) {2 Y2 h9 V" h9 A
- Recognition = recognition;
6 Y$ y5 @- f& \1 [* ^* z - }' r7 h9 m- p9 `( ?1 W7 n
- public String getFormat() {* P+ V- i4 I1 u' b$ ^, U
- return Format;
3 p! Y, g, Z+ L! X - }5 n: v, g( j7 p' e: E7 Z
- public void setFormat(String format) {9 ]1 }2 n' D. | f4 q" _
- Format = format;+ Y1 x8 i3 Y6 r6 L& N- L, q U$ f5 |
- }
, P2 t1 c5 J% i! Z' H( [8 A0 ? - public String getContent() {
\& k, e* v) K0 w; g- n - return Content;- M3 p, |, Q7 n% W; c A% @
- }
; p& T; @8 J7 t9 [; D& q - public void setContent(String content) {4 ^# A/ o3 s; M; e/ d& ?
- Content = content;6 ?5 ]/ |% {" H* r y6 g
- }" R- @$ |5 S6 f4 e1 I1 F5 _6 O" B
- public String getLocation_X() {
+ b9 z$ `2 s3 Y$ p, N) R - return Location_X;
2 O% H7 A( Q1 q7 ]4 ]" l9 z - }
p) X' t8 _; q/ o) ?6 ^, A - public void setLocation_X(String locationX) {
+ w0 U' S& { p( i( z, }( }, [ - Location_X = locationX;9 o( p8 L! h z: h$ I9 L
- }6 D% C L* g" Y, r6 c5 U
- public String getLocation_Y() {
]; l1 l; Y- A3 ^1 \9 E0 p - return Location_Y;
$ J6 a0 \: {6 p M - }
3 f, j4 n, l; C0 N8 H - public void setLocation_Y(String locationY) {
# p" Z, a" k u6 z1 F- a; |7 U& j - Location_Y = locationY;
" @6 p/ U( `. a, K7 ~ O% N - }
1 t" R6 ^7 u5 Q/ S6 m7 g. g - public String getScale() {
6 m+ T# F- l, ]& S/ O' n5 J - return Scale;3 q. v: G, u7 G! B% ?
- }% p; }; a0 ?- ^ Z' L) Q1 G
- public void setScale(String scale) {6 Q/ R% W6 v3 M2 D7 }
- Scale = scale;( \7 P8 @) k" u; V6 |1 ^' f
- }( t% D% a7 H1 ~3 q& p8 e; F
- public String getLabel() {4 d0 p8 T8 @+ ]/ c% x; r
- return Label;9 d8 P' S1 \# Q; P
- }
8 \8 l; \/ h* `0 M6 F - public void setLabel(String label) {
1 l& T$ W7 S+ Q, i - Label = label;
* R: j* E4 I$ b, o - }+ R3 x4 }3 m6 Y4 g4 D% q* ?+ [
- public String getTitle() {$ T/ ^, ^6 _) v) N& r7 b6 V
- return Title;
+ e5 j5 U6 l3 {6 {% o - }! [9 ~# s) s/ |" i; v! _$ u! R# }
- public void setTitle(String title) {! \$ g# u: F9 r! v% X
- Title = title;, j6 I j: m1 b! P2 H% \: g
- }
2 X" E, D4 r+ H. o/ U - public String getDescription() {
5 g4 s) m Y- k% o& I K - return Description;
) P6 ^. ]* M3 O/ X - }- R+ l! r, y- j
- public void setDescription(String description) {
9 S( e8 w3 K; Z& _ - Description = description;
6 L1 G. k$ ]. X2 O& ?4 o - }" D/ ~9 V) y8 ?% g% I1 p+ [
- public String getUrl() {( a3 s: `" m$ R/ V" a1 [7 v9 r
- return Url;
1 P' Y5 v- p3 }4 y' U" C4 a8 Y - }) t c. O$ p! }4 o" x
- public void setUrl(String url) {
# {( \1 F6 N/ _5 x - Url = url;
, b; x2 ?$ \+ m/ c5 Y$ }( n5 U - }- @1 n1 e( C) z$ g+ _" B
- public String getPicUrl() {
y; J& ~$ t0 z) K4 c' l) Q- A - return PicUrl;+ D) Q R; v! a" L" a0 e
- }
* w4 O- u. v% t4 [4 a6 {' ?2 A - public void setPicUrl(String picUrl) {5 o3 \, Z3 i( s" @, h S$ ~- K3 P
- PicUrl = picUrl;! C) c% A2 z3 I \6 b* ?
- }' G- G1 V- O0 v! m. @0 O$ V H
- public String getMediaId() {2 @5 X' x; b. R3 W7 r! D
- return MediaId;/ H0 P* Z. p4 M, g- |0 A0 j6 u2 V
- }/ ~* }- W) l$ y3 D ]# s; ~# m$ g; m
- public void setMediaId(String mediaId) {
9 j# Y- v& Y. S5 z$ I! M$ v9 } - MediaId = mediaId;
' R7 I9 u6 ?- I9 r% ?# S0 ^ - }
0 Z/ }! u% J/ b L+ p - public String getEventKey() {
( S4 P0 M) A. |3 l - return EventKey;7 r( l- |& I/ V% {/ i) ]
- }
1 f* v+ ?# M" ~& h7 M4 S - public void setEventKey(String eventKey) {
/ m4 b* l7 q. s& o! |3 @ - EventKey = eventKey;
! r0 B/ |$ [" E! q/ ]0 ~; | - }' D/ S" V( F1 |" [
- public String getTicket() {0 P6 ~8 ?* i9 A1 r/ }" L$ N. b
- return Ticket;
4 t9 m: V- x" _- o. k0 g, y, ?! r+ i - }$ P( p- {% @6 @7 w1 A$ ~- ]
- public void setTicket(String ticket) {
/ b W# h" j- a5 [7 | - Ticket = ticket;, _) ]& _- N0 X1 ~- ~
- }
; p" d5 S# u- b- i% p - public String getLatitude() {
1 W7 ^$ B& ~# t# j4 L# r4 C; a - return Latitude;
K' Q6 K& ^& X" Q) E - }
4 a# d/ r: D9 N9 R - public void setLatitude(String latitude) {
8 ~' y9 Y$ d# X& c8 ]+ A {) i - Latitude = latitude;) O. `' v$ @. I4 T0 j
- }2 B( ~( ^/ p; I$ y
- public String getLongitude() {, V3 v( U0 M8 x+ G
- return Longitude;
7 X! k) t* ] q Y+ ~ - }
$ u. W! {" I! D6 ?$ i" R - public void setLongitude(String longitude) {, f3 J. J: n9 Q8 j9 B
- Longitude = longitude;# W2 C( K0 a0 v$ b' [
- }* V9 y) }/ B- j3 H7 [7 g
- public String getPrecision() {
8 D& {5 V- z; o. P/ o7 e - return Precision;* W* i- J) d8 h& S% t2 `8 m
- }; d8 C+ g" e- `" M2 s7 Q2 P3 ^: o' W8 g
- public void setPrecision(String precision) {
" n8 u! _9 t, a2 X( F7 [% R7 x - Precision = precision;
& T7 }; x" v& n2 I! ~ - }
; h/ i4 k: ?1 g+ v! z) `! b - public String getEvent() {
7 v+ W: ~, }! q/ L - return Event;
) E1 \7 \2 Z; \' V. |- `6 |% s/ @ - }
7 w1 }0 \# n* x$ O' y3 i - public void setEvent(String event) {# u2 n" v+ }/ M* V' W" a2 K
- Event = event;
; M. v7 {9 p) h5 a: `9 j - }
: Y- T( \* R! O" w+ B - public String getMsgId() {" E. _; L" y- S, P* z
- return MsgId;
& `. z. X, @7 F! n1 ]8 H5 e - }
& B: z* ~& k' n0 r - public void setMsgId(String msgId) {
0 f, D! f2 I8 S1 N* z - MsgId = msgId;; |$ R/ n# u5 e- k' `$ o$ M+ a9 R
- }
1 M' u, k, B, Y6 l) o. ^$ z4 |$ m1 u7 V - public String getToUserName() {1 a- F# R N$ t5 M
- return ToUserName;
( t; X% I# ~+ Q7 A - }
! ^2 R* Z; t0 |. {( q, k) E - public void setToUserName(String toUserName) {2 r1 N3 l& e! o2 _: g
- ToUserName = toUserName;
8 l3 |! T9 p3 ^; T9 M. P - }
. R/ k' R7 Z# L7 r - public String getFromUserName() {, c/ {) X4 P9 M/ m5 L. }
- return FromUserName;
8 C% c# L0 {, \7 p - }
" E' u% M* T: g0 I& ^! X+ T - public void setFromUserName(String fromUserName) { ^9 g- s2 V; D2 t) S
- FromUserName = fromUserName;
1 L6 B1 c& M# ~* t+ |$ Y - }
( z# N6 n0 f d6 C B - public String getCreateTime() {
; s( F' [ y' } - return CreateTime;% a, q; A) d5 r0 ~) Y9 t
- }' ?0 w9 h4 @- F; i6 j4 a
- public void setCreateTime(String createTime) { H4 K% K# [3 R* f
- CreateTime = createTime;0 d+ X6 a' u" M: m7 X; {
- }
- I# x7 r$ s; ]. y. x$ K/ F) ^; g - public String getMsgType() {
7 G" _# t& r. c, ^" C j% s - return MsgType;
8 ~4 _0 C% v; g- v - }) V1 G& j( o- z9 |3 g
- public void setMsgType(String msgType) {
; H: l& c# R$ P8 `; G' l) D# l - MsgType = msgType;
c* A1 W: \! ]+ X7 B) L/ P - }& X9 q9 Y: k9 m
- }9 v: R9 F$ I% I; ]/ `- Y! i
复制代码 调用图灵机器人api接口,获取智能回复内容 TulingApiProcess.java
# t) y; y- E& F2 D4 A4 {/ q+ {. \& `# y4 w# o7 g; }% i! ?
- package demo.process;* n7 A# g! ?# C8 ^ m) q8 n
! [+ N# P5 v! ]/ v1 X9 Z- import java.io.IOException;
$ H ]8 R! j* A2 [ - import java.io.UnsupportedEncodingException;
" `# O7 u# d4 X3 q- ]% L! G; m! Q - import java.net.URLEncoder;
1 Z+ T) A4 v+ F: S( z6 D
: k1 M' i7 J* j0 P1 t6 ?5 h- import org.apache.http.HttpResponse;3 Q% a/ X; ^' h& {9 v! p# G/ q
- import org.apache.http.client.ClientProtocolException;& V. _& f2 x' Z* I
- import org.apache.http.client.methods.HttpGet;
; Z# X9 z+ a' P - import org.apache.http.impl.client.HttpClients;# N- j9 o+ p7 w( \. S
- import org.apache.http.util.EntityUtils;
# p6 O6 O4 \# N# [ - import org.json.JSONException;
9 q/ ^1 r8 p4 j/ J( g: l+ p1 z - import org.json.JSONObject;8 L: Y- Z& y$ X$ U
- 7 a. V% m3 \7 S3 b) j
- /**
' a: G- l& L1 N; |6 M3 W7 c! X- I - * 调用图灵机器人api接口,获取智能回复内容
& ] C) [# P' M, f- @* w O - * @author 科帮网
) t% \% f) W3 k: {" @9 V& M - *. J* T5 A |) D
- */
' m! Z D0 o) s P - public class TulingApiProcess {
$ g) R- \; P2 F7 p/ y - /**
3 ^( a9 Q1 e. J2 p; R0 u - * 调用图灵机器人api接口,获取智能回复内容,解析获取自己所需结果5 O/ I1 l) f) s/ N' Y2 ]4 C3 _
- * @param content% A3 ^8 b1 w' A1 A1 M N
- * @return: e t3 T* h6 l- H: d
- */* l! z u! U0 _, G% ]' \3 K
- public String getTulingResult(String content){
/ ~$ ~7 C% [- |! O - /** 此处为图灵api接口,参数key需要自己去注册申请 */
( z) M% Z: w6 a) l; h, u3 |6 d - String apiUrl = "http://www.tuling123.com/openapi/api?key=2a31b2f601f74b54ea13db1c82fe5d71&info=";4 K5 m W& B) x5 z$ m0 ?
- String param = "";2 v( @2 \' x. `3 i; D* _- ^
- try {7 P+ O# ~: Z0 O- W' x6 e! m5 i
- param = apiUrl+URLEncoder.encode(content,"utf-8");
# q7 A) }/ I% I3 z$ v - } catch (UnsupportedEncodingException e1) {
. A7 W% ^& V' x t. f2 R/ M/ t - e1.printStackTrace();
9 D4 U" K# |, p+ Q- q$ ? - } //将参数转为url编码
: B, {3 o4 u# x4 n7 `! o8 j - /** 发送httpget请求 */, [( h2 e# f6 G1 ~ z
- HttpGet request = new HttpGet(param);+ t) U& r; ~; r9 i5 Y' O- M& p7 v' f
- String result = "";
( }' U; G0 r# u& {' \& n' M - try {
! ]' T" o7 I( p8 R* \6 _ - HttpResponse response = HttpClients.createDefault().execute(request);
( H8 e' K0 J! u+ h E9 y - if(response.getStatusLine().getStatusCode()==200){4 J* L- `( c+ j' g K" ^
- result = EntityUtils.toString(response.getEntity());
' c. m) D1 B( H. U! ~' u# b( b' Q - }
$ a U# Q! v, }8 _, J% j* ?" z7 @) v& A8 u - } catch (ClientProtocolException e) {
6 N6 {' G8 w4 J3 n& } - e.printStackTrace();
3 y/ x) v6 e. u$ ]1 x$ d0 ? - } catch (IOException e) {9 M4 e; o& _. a2 A) Q) _
- e.printStackTrace();
$ x" j; u8 H1 @9 O- v - }
! O7 Q* V7 M; M$ `" Y3 i4 j - /** 请求失败处理 */7 G% l1 C4 R7 p z1 G2 E: ~8 q1 l
- if(null==result){, `4 t& {( m; x/ w/ ~5 J% g: L
- return "对不起,你说的话真是太高深了……";
% `0 ]+ @, @2 z. z - }
4 ?, ] e* F6 d) u+ W E - " t: F" @5 Y# n$ E4 j5 z
- try {% `9 a* [2 x9 W, n+ [7 c
- JSONObject json = new JSONObject(result);
* Z9 y5 u3 f) V8 e0 C/ b& j9 e - //以code=100000为例,参考图灵机器人api文档+ {5 n8 S/ D% O. u$ |4 ?7 E+ {5 D
- if(100000==json.getInt("code")){
0 e7 G& T- l: b5 g% T - result = json.getString("text");
& N& D& X6 S5 e* h( R6 b - }
' ~! {( U \* p- A9 y3 R' q - } catch (JSONException e) {* W6 e2 |0 p7 k( Y, H" A$ V
- e.printStackTrace();
- T% c+ _9 R0 h j) B/ Z - }0 v; C |8 `9 \& Z
- return result;5 K: d: m' B' P. w3 l9 F
- }
0 I: Y F: U# {( {" J - }
2 ?! F, ?5 ^# h. v
复制代码
' k6 T4 ~# }; {2 J+ ?web.xml 配置:
! Y3 S0 f& X5 z' j2 d- <?xml version="1.0" encoding="UTF-8"?>3 I7 H7 X f4 H, m+ M- X8 _% g% [
- <web-app version="2.5"
* g! ~4 i$ b" d; Y8 l" U - xmlns="http://java.sun.com/xml/ns/javaee" & S3 ^. ?- I- y6 n1 s
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- z! q4 l& b, V3 x - xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
2 G& n' j2 i, ^9 | - http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">, ~0 v) F7 c' z& b+ r
- <servlet>
9 E1 s6 A; I7 H! P6 o - <servlet-name>WechatServlet</servlet-name>
1 r& i8 Y4 @ W0 s# Q9 w - <servlet-class>demo.servlet.WechatServlet</servlet-class>
6 {8 j2 K( c& `8 T - </servlet>
3 r7 n) R1 e6 b
% d1 j: o3 e1 O3 J* C) q- <servlet-mapping>
0 N0 v8 Q! F! t - <servlet-name>WechatServlet</servlet-name>
1 R3 k3 ^5 Y$ ?' l6 q - <url-pattern>/wechat.do</url-pattern>0 Q- Z: i' C7 v) c1 v' f l
- </servlet-mapping>$ c3 w# H: J ^8 L1 k
- <welcome-file-list>
6 h4 y# N. l; A% B5 V E* F- x9 \ - <welcome-file>index.jsp</welcome-file>6 b3 X# Z0 M, \ k8 T4 V9 Y4 E. H
- </welcome-file-list>
/ U- n$ ^( c" h. o. M/ X* w - </web-app> z7 t V- b/ L
复制代码
. z) @1 a- v, I& Z项目源码下载地址:
" Y8 E( X' B# n% x7 {- p6 h. k6 o5 F, N0 N4 Q
! u+ H8 N V8 i, k, b7 C2 ? |
|