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