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