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