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