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