TA的每日心情 | 衰 2021-2-2 11:21 |
---|
签到天数: 36 天 [LV.5]常住居民I
|
java实现微信公众平台开发项目源码
9 I; r% \& Y$ b本文向大家介绍使用Java来实现微信公共平台功能,实现根据回复的内容返回对应的消息。供大家学习使用。
( p& Q5 F6 ]3 G( v; h1 i. E" [微信服务端收发消息接口:WechatServlet.java. G- ~" [- B; F6 h9 T
- package demo.servlet;/ X2 l0 P2 z) Z K/ S5 H
2 E4 T$ i# B Q- import java.io.BufferedReader;
# {% e' d6 K% g- Q, N - import java.io.IOException;
+ o$ S" G* \" I& O8 a - import java.io.InputStream;
% p, }" f; }2 r+ G) @7 A" I2 D& S9 N - import java.io.InputStreamReader;) B% K) j# p+ F* |& Q, T- P
- import java.util.Arrays;- l/ C8 A' _/ R8 d
; E' y& \: N$ A2 N! D- import javax.servlet.ServletException;
; s+ N* y' T Q+ |' P - import javax.servlet.http.HttpServlet;' l" x- L/ s) Q* o9 E1 q, ^; S; w
- import javax.servlet.http.HttpServletRequest;
6 |) L3 h0 e. Z8 w2 c0 {- b - import javax.servlet.http.HttpServletResponse;2 a Y" M* W6 v y/ O
6 o4 A6 b9 N3 f" l. v: V- import demo.process.WechatProcess;
5 ^( ?: [3 N, N( d - import demo.util.SHA1;
$ D9 ^ d& c5 @' V; H9 U/ O - /**
, P1 y+ K) b5 ]6 D - * 微信服务端收发消息接口! z6 b3 h! k$ K! _
- * 8 N. k4 k' B) r& S/ W5 Y7 ~
- * @author 科帮网
' _) `+ m8 g4 m) D7 E7 `" v% R* R - *
0 U' U" V4 s! h! @/ ~- t - */+ h; l% D; @7 F. S; w* p
- @SuppressWarnings("serial")- i$ M: `- m' ]5 `0 t$ q
- public class WechatServlet extends HttpServlet {1 y5 U7 V3 l# P% Q
l5 `: r1 t* z ^- // 自定义 token
: s8 y7 f4 ~# l" [4 J - private String TOKEN = "52itstyle";
8 H2 D$ V8 w% A# L' w - public void doGet(HttpServletRequest request, HttpServletResponse response)
, g, K0 h* ~- x" p - throws ServletException, IOException {
, }0 g( c+ _, P& i! r - String signature = request.getParameter("signature"); // 随机字符串* m* s6 Z. E- E: C+ S
- String echostr = request.getParameter("echostr"); // 时间戳
# e, m1 V0 g& }$ X- n - String timestamp = request.getParameter("timestamp"); // 随机数4 n) T7 f; u4 J5 H
- String nonce = request.getParameter("nonce");
1 a9 `1 H: X2 ]! J7 v4 b, i8 q - ?# A2 { I( u9 q" I5 R$ Y( w
- String[] str = { TOKEN, timestamp, nonce };' ~1 L% O( q# l2 O
- Arrays.sort(str); // 字典序排序2 U; |$ Q6 P- v, ^4 X
- String bigStr = str[0] + str[1] + str[2]; // SHA1加密% E$ X$ K1 N" i# `% |3 t
- String digest = new SHA1().getDigestOfString(bigStr.getBytes()).toLowerCase(); $ X# |8 `! w9 ]( s2 U8 m
- // 确认请求来至微信6 o% o; P; D! i& }2 F3 C
- if (digest.equals(signature)) {
5 T J# w! x- F1 ?# M! P# N - request.setCharacterEncoding("UTF-8");& K- M! l* \) Y
- response.setCharacterEncoding("UTF-8");5 V* w5 v* M" F* B6 A" N# ?) P
- 4 V9 Y5 p# a- N
- /** 读取接收到的xml消息 *// ]4 U3 c0 ?4 i& ^
- StringBuffer sb = new StringBuffer();
, |4 f1 z- ~' b) e8 ^$ G; p6 U9 N - InputStream is = request.getInputStream();8 J8 C/ G& A: z( D! G) I
- InputStreamReader isr = new InputStreamReader(is, "UTF-8");: |! @& r8 j3 i
- BufferedReader br = new BufferedReader(isr);
, g2 {+ h/ e! s - String s = "";# D) o3 o, J* Z5 ~( J$ T
- while ((s = br.readLine()) != null) {7 F; y5 K: N+ d( _+ ~. {
- sb.append(s);! a$ ]+ g9 F. W- C- M6 V1 e- A
- }
8 e2 O5 c/ k+ t2 q$ H0 q; ~ - String xml = sb.toString(); //次即为接收到微信端发送过来的xml数据7 z- r9 z1 }" }0 x3 ^
-
( o A1 b7 ]+ z& p; p - String result = "";
3 `1 }# c; p' \4 k% E! K9 @: C7 ?4 ` - /** 判断是否是微信接入激活验证,只有首次接入验证时才会收到echostr参数,此时需要把它直接返回 */* m0 u0 X+ r, M" o. [+ k+ \) c& K
- if (echostr != null && echostr.length() > 1) {5 {7 K8 W. b# a) H; Z8 f) J( a" k
- result = echostr;- L& X. p/ Z% n8 g
- } else { r/ p& \# F/ S1 ?- Y
- //正常的微信处理流程
+ i! u1 B1 f/ B6 r - result = new WechatProcess().processWechatMag(xml);" K' Y/ }9 q0 {7 j4 y
- }
8 R0 Y n! d0 G - System.out.println("说的什么"+result);0 x6 K: \2 o2 j* {0 j' b5 e0 n
- response.getWriter().print(result);( L$ \+ D# p; x( ~
- }
. R0 V1 H$ D9 K* d - }, J( i& X0 i1 y6 |6 }" v! d! Z0 `
6 `5 d* ?. |2 I4 w- /**
/ @7 Q8 v( G! l/ w - * The doPost method of the servlet. <br>0 {2 J: A* s/ I5 g" |6 Q
- * ) C1 @$ f" ^" ?- t
- * This method is called when a form has its tag value method equals to
2 W2 J9 D- M' Z% i' W0 r - * post.1 N. {; W' X: r: o0 C9 W" \ `+ @
- * 8 p, ^" W, e" Y6 k7 A
- * @param request- j O- j9 B2 r2 w
- * the request send by the client to the server$ w! @, b* G+ A: r! `1 f- z5 ~
- * @param response
7 R0 N7 J* C! M& _! U: l( }& q - * the response send by the server to the client
( @8 \7 Q/ q, A' C- _# q - * @throws ServletException& v2 d% l3 i0 {( l. C
- * if an error occurred, E2 w' f% f6 V7 a/ S2 w$ E
- * @throws IOException
0 ]" `$ Z, |0 S* `( r; c' ^2 s - * if an error occurred8 d1 G4 N% x7 L+ M
- */
0 u& k0 n& q. t# q/ F+ ?! N2 I - public void doPost(HttpServletRequest request, HttpServletResponse response)7 e5 B: Q. ~! r0 o
- throws ServletException, IOException {
0 x7 q* u" x# [) Q9 D - doGet(request, response);; h% f5 D! M2 y
- }
- y, J+ s$ f! h5 A& Y - - H+ u0 ^( d5 N9 L. B
- }
4 d2 p& f3 e0 L" p
复制代码 接收到的微信xml实体类:ReceiveXmlEntity.java6 \6 k: U/ D5 I' F+ Y
- package demo.entity;
+ ^( U* C% D# W# _2 ]& J - /**9 F5 ?' w$ C% q& d f9 W/ r5 x
- * 接收到的微信xml实体类. h. ?5 s, d) u% e; ~2 W
- * @author 科帮网) c, p' k5 {6 m4 @- D2 s1 p9 h
- *
. W0 b) h1 f7 m \, V+ a# Y - */) ?/ H' L, M* m7 R8 F4 s
- public class ReceiveXmlEntity {. m1 N) s3 l" F1 V
- private String ToUserName="";% b& Z( j1 O" s; T4 f0 s
- private String FromUserName="";
$ q2 X1 L+ n% G3 |( A% D - private String CreateTime="";
$ F( A0 R" J4 Z1 _7 x9 G6 h, C - private String MsgType="";8 K( K; P' {2 f& J, h
- private String MsgId="";; F+ e' P4 r9 j$ q# l
- private String Event="";" f" l5 h$ e7 W+ P' s/ _
- private String EventKey="";% A9 F; C- m k n
- private String Ticket="";
. D7 C; }* H/ P n2 k - private String Latitude="";% b3 @2 w4 A9 _7 X4 A
- private String Longitude="";& t& F3 m! L, ^4 x! ]( r/ g
- private String Precision="";* f+ Y5 g+ K" F: D. E" ?8 u. W
- private String PicUrl="";
$ `# b4 `# b* a - private String MediaId="";: J! o- z! o- l d& c6 k
- private String Title="";
7 {' w4 _: w: E6 }. i0 P) s3 y - private String Description="";
6 v$ o3 w/ \$ k: P& t - private String Url="";
1 }. T ^( l8 a0 Q! v& ~ - private String Location_X="";
1 u) z4 u8 e* `1 j) a0 J - private String Location_Y=""; D, p3 `' i N8 X4 Q$ \
- private String Scale="";
* F) `# [ W S. |" ?- V+ J - private String Label="";& z, f/ \/ \1 T E7 j
- private String Content="";
! }7 ?3 }% w& L/ u' a# v7 J' v - private String Format="";0 e/ H6 R9 h B8 [/ A
- private String Recognition="";6 Q Q" D" x* R5 C1 ^% H/ I v/ M$ p
-
: Q0 @; G2 U- Q+ i - public String getRecognition() {8 B- f$ n/ J. P
- return Recognition;. S2 k$ q) {- N
- }
. M9 o; O. H4 O$ d. O3 |1 R- B0 h - public void setRecognition(String recognition) {* }! {2 E" @# D, T9 K
- Recognition = recognition;! a) `, `. o7 U9 J) \* g( u4 {( {
- }0 m4 j' f& x7 i0 n" S9 j- b, r2 }
- public String getFormat() {
- N+ ~4 R" \4 @ - return Format;
- N! S* G3 }$ h0 D8 e6 Q: T: j - }) Y T0 w, X* A U$ |
- public void setFormat(String format) {* G u2 S9 F" t _1 ]
- Format = format;8 i2 @( a- {: m ~
- }: P: ?4 |0 o; j+ d7 b4 @2 ]$ L
- public String getContent() {6 e9 i: b% C/ w+ d6 z; Z
- return Content;8 ]$ u3 i C0 j
- }, a {# V0 M+ S1 @6 I
- public void setContent(String content) {/ c: \" |" v7 J
- Content = content;5 u, T3 f* C, z0 n- U: l' ~% I) |
- }
! Y" v/ ~: Q! y) h - public String getLocation_X() {
' v6 O& f/ A* v* |9 P. s6 z - return Location_X;& O+ b/ B! i4 P3 G) h- ^
- }/ S2 t& J/ Q% n! J! Y) j
- public void setLocation_X(String locationX) {$ i0 B: c) v/ z. @6 b
- Location_X = locationX;
) e, W* r4 a5 t - }
& E9 [( ~1 L' |$ Z! {, p - public String getLocation_Y() {
% n" A- H# F. G5 e. a$ M+ ~, _ - return Location_Y; ?9 S' Y% F3 F O3 Y6 m
- }) S0 O% n% }) f, _) }* C
- public void setLocation_Y(String locationY) {1 t. E7 \) T! F+ ]* Z3 _
- Location_Y = locationY;
1 r0 u' o' c+ D2 I7 ~1 ` - }
6 X1 g' M: h& K - public String getScale() {
& B6 R9 ^4 l% _" S: L" A' F - return Scale;8 b9 ?6 K% P$ V- k$ n5 M
- }% W; s2 _: y j7 w! v- G
- public void setScale(String scale) {
5 F$ y0 q) l8 X% P- M - Scale = scale;
f; ]( }9 t% u0 U* \& k6 \1 F - }
6 w* U7 w/ B8 m4 |# x1 x0 V - public String getLabel() {* ?3 Y C0 e* N, [# l
- return Label;
9 s7 D* v$ r P - }2 Z$ g" f& i% b" C+ X; I
- public void setLabel(String label) {3 p& k3 W( |9 d6 p
- Label = label;5 X0 A5 h; K P/ F+ o- R6 M
- }- S) e: n! O6 g: X/ g
- public String getTitle() {
4 v- ]1 I) U5 m' u- b2 s: C% ]" } - return Title;! V3 f( U* g F6 X' a
- }
5 S' m" [- h/ h, g) j5 i - public void setTitle(String title) {
5 @7 a b M8 [' l. s% i) h: t - Title = title;
- i: h8 A5 o4 Y+ ] - }. ]7 Y& d C/ d. H9 @- x8 A+ W& _, J
- public String getDescription() {( Y( u: q# s$ l% R9 K' U" v+ `1 L0 ?
- return Description;( @ T- c/ z( _2 ]) n/ ^
- }
% ^- L; l; w! ]1 i1 ? - public void setDescription(String description) {
7 H7 l/ n3 @# T* @6 x* W* y - Description = description;
f+ [# b/ Y1 C$ f, e- ^7 E: P. a - }
5 z+ ?3 E- H& m% P - public String getUrl() {4 Q0 e9 U4 g! C
- return Url;# Z( G' [0 S# P; s* {
- }) e; d _7 \& n
- public void setUrl(String url) {
1 w' A+ l! @9 ? - Url = url;
- H7 _/ S9 D5 m6 D6 y( w+ q, [% c- [ - }4 r( `2 O3 |9 ] K
- public String getPicUrl() {/ T8 t+ E! x5 g
- return PicUrl;! a( G0 b- C4 [9 G
- }1 f- [1 Y) G7 }
- public void setPicUrl(String picUrl) {
$ v- B) }' ~( F - PicUrl = picUrl;
9 t) e: p% `! F9 i: l; ~) c E - }! S( T) d, T& v2 g m
- public String getMediaId() {
1 w3 `! w. K* o/ @( z, S# a8 o E - return MediaId;
5 ~( r& g: U3 e+ X5 N" X2 `+ |. ^# S - }) D/ K7 i8 J" W. N6 |
- public void setMediaId(String mediaId) {) F5 K% \: C: _
- MediaId = mediaId;
3 W# g& J7 B& b; B6 p, { - }) v" ]0 L# R' O3 ?- ?3 ?
- public String getEventKey() {
* `, I1 _& m! x* Z$ r, f - return EventKey;2 A9 R y1 o4 {& m4 `
- }& \ B H. W3 l) |! ~( I4 X# l
- public void setEventKey(String eventKey) {/ A7 o' i& s, M' e8 l D
- EventKey = eventKey;' D5 \$ i& l8 y2 w
- }8 k. _/ U# v- f/ d4 x+ j) t7 U& v
- public String getTicket() {3 {; `0 g0 U! _ V
- return Ticket;
$ W, Q q0 H: q - }/ B$ D+ x% D* E' a
- public void setTicket(String ticket) {8 M# H* F+ C) q
- Ticket = ticket;
3 j1 }% c/ R& @8 G, ?, _ - }: S- e9 c' n* e o+ F
- public String getLatitude() {
$ ]6 V' _; g. j6 g. P3 G - return Latitude;7 A1 Y- w% W5 Q3 E
- }( g9 G% H8 K" w7 w- L. t
- public void setLatitude(String latitude) {
' G0 D+ _' b" c# J. y C, U" d( } - Latitude = latitude;
) M3 j- W3 M$ Z9 } - }& f' F5 Z+ N5 n( A. Q# S
- public String getLongitude() {
/ l! A( N* h0 R3 z - return Longitude;
1 \" {( X3 T5 ^ - }
0 B/ Q" k. S1 {1 J& j! F - public void setLongitude(String longitude) {
' h& X% I6 M6 y7 `+ k7 M* E; R - Longitude = longitude;
' s8 u/ u# I; a - }
9 F" u X. x8 X. F# t$ u - public String getPrecision() {
5 z5 j4 v' f! w& ] - return Precision;
; O, M ^2 s8 x# l E - }
- K3 j3 e% n# ~4 n - public void setPrecision(String precision) {0 [* h% x4 N2 [
- Precision = precision;
5 ]1 N, v3 }3 r) D8 ^) R& T5 x - }
7 E8 @0 X* ~, J9 M9 v - public String getEvent() {
" t5 ~# R! r* {3 t' ]8 c6 O - return Event;* i4 p& B) h2 E, V
- }5 w3 f' _: c% R, S; q* L
- public void setEvent(String event) {
$ {; M" g) @, C. t- Z) O# W" @ - Event = event;
( C- Q/ h8 v0 ~- e6 a* a& T* Q - }
T" x3 E- w6 x, i3 Q% r - public String getMsgId() {
/ @; s" }% }. h, C: m2 _( l - return MsgId;
7 Q5 a" d" w+ L2 _ L9 @ - }
4 J7 D6 ~0 X; r( C! I' E( j1 Q - public void setMsgId(String msgId) {; [/ ^: l. ?& ~( o0 h
- MsgId = msgId;5 O! }% t5 B$ M& I8 a8 \2 i
- }; ~' B- L4 S; c' e
- public String getToUserName() {4 o$ O, {( \/ l0 T/ p8 `# t
- return ToUserName;
! `# e+ W! a6 A! L8 h - }8 [2 D7 `7 O9 I, g0 R0 Y# I) p. L
- public void setToUserName(String toUserName) {
8 l# C# I2 c' G: {1 f" |" q6 s - ToUserName = toUserName;
) ~+ i) ]" E& b" h$ N - }! c9 z3 _, p/ _6 T& J
- public String getFromUserName() {
* j4 |7 @' S( p8 @: K6 e) s - return FromUserName;
* O( `* P, e9 }1 o - }1 G0 V2 H- |1 w$ Q
- public void setFromUserName(String fromUserName) {
, I" z. j, a- O2 d8 \6 V - FromUserName = fromUserName;
# e8 L5 ?( g& v! ?: K' W. O; B" |! q - }
/ x8 s C& S# {/ \) e' a# _ - public String getCreateTime() {6 w, x/ A) {/ s$ n6 A
- return CreateTime;! T2 R8 F. M. e- c# v0 r1 l$ l
- }
# G7 V: D ]$ t3 Q; |' c' @ - public void setCreateTime(String createTime) {9 Y6 U9 }3 c: L1 e
- CreateTime = createTime;, _0 H9 L) M9 L2 U
- }
0 D @$ F- E$ d& k+ { - public String getMsgType() {0 @. \; d$ n) l6 P& o; r$ q
- return MsgType;
- P. c+ ]2 ]& g2 m - }
2 K9 G2 M+ k3 ~+ o8 J+ l - public void setMsgType(String msgType) {. U9 ~4 @9 m% |$ z' n
- MsgType = msgType;
! ~3 w: N. G: G* P# N - }
9 f0 K" o. o+ `# A! a1 o - }
. W4 K$ ~, G* c, p/ \& |
复制代码 调用图灵机器人api接口,获取智能回复内容 TulingApiProcess.java( y0 P2 t' x- d% z. U; P; {% W1 a
% s0 u$ r. y1 a/ u6 Z
- package demo.process;
, B: K* U9 y6 Q( o6 t. C0 {
# C& b6 g) `: D8 z0 |- import java.io.IOException;
+ t4 H+ d. g5 `" @5 ]' Q! I$ S - import java.io.UnsupportedEncodingException;4 O4 O. I2 B# B6 u4 O) Y! ?1 Z
- import java.net.URLEncoder; |2 u1 ^; I5 _, p! c8 A( x3 a
; Y* r! }7 l' Z( z* w! Q7 |- import org.apache.http.HttpResponse;
; a0 P7 T+ `- G/ c1 x/ T' ~ - import org.apache.http.client.ClientProtocolException;2 I9 {4 {0 s7 A
- import org.apache.http.client.methods.HttpGet;
V) k# D: {8 d - import org.apache.http.impl.client.HttpClients;! @3 P( ?9 s4 B7 \7 j) `2 u8 m
- import org.apache.http.util.EntityUtils;
3 o5 Z0 |$ w$ a% ?" g+ V - import org.json.JSONException;- v1 S$ r& b! H! C- _+ b/ ]
- import org.json.JSONObject;" x! v9 P% Q; G7 ?1 O. G) R$ m
- 1 x" i6 ]# J( S% | z: `
- /**
% w' H" Q; m ]" X! e - * 调用图灵机器人api接口,获取智能回复内容: H3 e: E' q6 W" W% u8 }
- * @author 科帮网
5 l1 \: x1 C: ^0 @8 i/ ^ F$ m - *1 s5 ^5 E3 \3 d5 J5 i
- */4 ]) K3 N3 _8 W
- public class TulingApiProcess {
7 S/ z- e( |/ ?7 ?$ Z8 X ~ - /**
* t8 x% g, E! X - * 调用图灵机器人api接口,获取智能回复内容,解析获取自己所需结果- ?) b* U" c& B) @1 i- k+ w
- * @param content! ?, H* k6 ?0 [4 Z9 x ] W; t
- * @return8 k6 Q: K& X, ]
- */
& F; ~4 u5 y5 C" f; l& w - public String getTulingResult(String content){ k) g$ i/ i9 `1 z; n8 q, j
- /** 此处为图灵api接口,参数key需要自己去注册申请 *// B2 K- @' F- c2 X3 }) Q6 j
- String apiUrl = "http://www.tuling123.com/openapi/api?key=2a31b2f601f74b54ea13db1c82fe5d71&info=";; M2 A; E) `# T! f% w
- String param = "";
6 O) i; |0 z, b% { - try {+ e% x9 q4 c8 m7 G
- param = apiUrl+URLEncoder.encode(content,"utf-8");4 a+ @' }% L6 {. R; Z \/ Y
- } catch (UnsupportedEncodingException e1) {2 Y0 j+ Z }* M0 k; y! _ J
- e1.printStackTrace();
$ q9 G2 `# ^% m; _! V4 ?! k6 _ - } //将参数转为url编码( k5 c; M" P/ Y4 h/ a
- /** 发送httpget请求 */- P. W3 [% f1 }; d7 H8 u
- HttpGet request = new HttpGet(param);: x I* I7 e3 |" k+ K- W1 Q# z
- String result = "";
; T7 Y+ Y/ p9 f - try {
% q8 H! B* i* V0 i( M8 ~8 C/ J/ A - HttpResponse response = HttpClients.createDefault().execute(request);
! c; D- Z3 t0 Z) h6 a0 ~# K - if(response.getStatusLine().getStatusCode()==200){
- R# u6 o& y& S: I) S+ a; J' |( Z - result = EntityUtils.toString(response.getEntity());
5 s. C6 z" f# S6 [8 _! s0 D# I - }- s0 d+ @ \! o# t7 B
- } catch (ClientProtocolException e) {
+ l% |9 A' N% n! n0 m - e.printStackTrace();
- V1 _4 ^$ G% B - } catch (IOException e) {6 c3 H0 V( x# y" m1 n
- e.printStackTrace();/ Z \% a% S, }) S) Y8 _2 S
- }( y& U! R6 r6 }- f# C# n
- /** 请求失败处理 */- r4 X2 t" `$ H
- if(null==result){
) m* b5 [" {) E5 F5 J - return "对不起,你说的话真是太高深了……";
+ V. o( b7 H1 j7 j# F - }
* I, M7 u2 H- G1 I* H1 Y - 7 o2 Y* @4 W3 I# U Q
- try {
( {7 n& V- Z+ f; Q. |! l5 z# r - JSONObject json = new JSONObject(result);; U4 ~, O/ {: Y& C* \# q0 j% U
- //以code=100000为例,参考图灵机器人api文档1 G# F$ x/ c" @( I0 i: h3 ?* k
- if(100000==json.getInt("code")){
# y1 Q* h2 l5 m& j! o# P) K$ }' Y7 _ - result = json.getString("text");
. d/ f: i9 v# v5 j, f8 H% `, X R9 x- I - }1 K4 d0 ~* g+ y3 y6 k; o0 M/ P4 w7 R
- } catch (JSONException e) {
" K+ m! b1 N" n - e.printStackTrace();
4 w; l0 V6 a& u# c4 R% A - }
" g9 f9 Q# h# ] - return result;$ }4 [. \( t/ R! n
- }
4 Q a. L8 ]6 p - }9 X& q/ M2 g: ]4 t
复制代码 % L3 t6 I* A& P) b% C4 U2 @
web.xml 配置:
& m/ t$ _! _, U- <?xml version="1.0" encoding="UTF-8"?>; l! t1 j: V0 a$ V; V" F
- <web-app version="2.5"
2 [+ y# l2 a* z2 O: \4 f, f K - xmlns="http://java.sun.com/xml/ns/javaee"
" y# U" L0 K) m; ~/ ^- Z' F* q& J# z - xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
1 R, j- c8 p: v3 V - xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 3 s- d) _; ]: Z7 m3 t9 n1 H
- http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">/ W5 ?7 W0 I7 W/ [- \4 i/ z6 l
- <servlet>
' Y0 [3 }; N& v - <servlet-name>WechatServlet</servlet-name>; n* t1 S. }6 Y. o6 R$ j3 `
- <servlet-class>demo.servlet.WechatServlet</servlet-class>+ V, n9 z' Y- B* S! J7 C
- </servlet> n$ Y. l- J# G# o1 V# B6 j& {
: }3 z. G- C1 _2 w7 b$ z- <servlet-mapping># B2 |: J. m. f
- <servlet-name>WechatServlet</servlet-name>
0 f& h* m* k% e4 K3 |& ~ - <url-pattern>/wechat.do</url-pattern>
; k- h1 G9 r/ D( R - </servlet-mapping>
8 T+ C* T4 c- v2 B- h; S& M - <welcome-file-list>" f6 I. B. m* B% u; j+ ]
- <welcome-file>index.jsp</welcome-file>
2 c# F, _+ s% J* \9 t - </welcome-file-list>
- {2 u! t( y' O' w6 ] - </web-app>
2 ^9 p9 D& X% ?' R! |- W' n
复制代码
s% }6 X } {9 o9 o: T/ J项目源码下载地址:
1 ~1 j4 ]6 Q; a R. `# [1 M2 ^: n* k2 y& \
( c3 Z8 y" V7 b$ U' R" Y& p( F8 r |
|