這裏先明確幾點:
- 小程序前後臺是分離的,前臺用微信開發者工具開發,後臺使用自己的技術開發;我這裏用的是JAVA
- 剛瞭解到上面那一點的時候,很奇怪,這不是跨域訪問麼?怎麼可以?後來查詢了資料,知道是小程序前臺 —>微信後臺—>你的後臺。
- 基於上一點,必然要保證訪問的安全性,所有服務都需要驗證身份,這裏微信提供了用戶登錄機制和驗證機制。
一、微信前臺AJAX
- 微信封裝了AJAX,官方API文檔有,照樣畫葫蘆就可以了。
/**
* 生命週期函數--監聽頁面初次渲染完成
*/
onReady: function () {
wx.request({
url: 'http://localhost:8080/wxCode/wx_getDB',
data: {
phoneNum: '13738042310'
},
method: 'GET',
header: {
'content-type': 'application/json' // 默認值
},
success: function (res) {
var data = res.data;
console.log(data)
},
fail: function (res) {
console.log(".....fail.....");
}
})
},
- 設置本地測試時,不驗證https和域名,這樣才能先在本地測試(設置——項目設置)。
二、後臺JAVA配置
- 這裏使用的是struts2框架,myeclipse 2017
- 需要配置fastjson(阿里json包),sqljdbc4(SQLSERVER JDBC包) ,struts Action映射,tomcat 數據連接池。
- 測試完成。
- 創建一個web項目,直接在項目中右鍵加入struts框架。
2.網上下載fastjson,sqljdbc4包,導入項目中。
3.新建一個包與類,最後形成如下目錄,名字自取。
4.配置Action映射,將方法映射成可以訪問的servlet,需要操作struts.xml文件。
如下:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd">
<struts>
<package name="default" namespace="/" extends="struts-default,json-default">
<action name="wx_*" class="com.rx.action.HelloWorld" method="{1}">
<result name="success" type="json">
<param name="root">data</param>
</result>
</action>
</package>
</struts>
<package>裏就是配置,這裏直接配置的json數據作爲返回對象,和小程序交流你也用不到界面。繼承struts-default,json-default<action>中 name就是外部鏈接地址的訪問對象: http://localhost:8080/項目名/wx_方法名,這裏用了映射,wx_加上方法名就可以直接訪問指定的方法。配置這一條就夠用了。
<action>中 class指定包;
<result>內部如上就行了,data是參數名。
5.配置tomcat數據連接池。
- 打開項目空間內,tomcat服務配置。
- 配置context.xml,尾行前加入
<Resource
name="jdbc/DBNAME"
auth="Container"
type="javax.sql.DataSource"
driverClassName="com.microsoft.sqlserver.jdbc.SQLServerDriver"
url="jdbc:sqlserver://localhost:1533;DatabaseName=DBNAME"
username="sa"
password="123456"
maxActive="10"
maxIdle="5"/>
- 配置web.xml
<resource-ref>
<description>DB Connection</description>
<res-ref-name>jdbc/DBNAME(與context中name相對應)</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
- 編寫後臺文件HelloWord
public String data=""; //返回參數data,與context中配置名相同
@Override
public String execute () throws Exception{
System.out.println("正在執行Action!");
return SUCCESS;
}
public String getDB() throws SQLException{
Connection dbConn=null;
String username="";
try {
HttpServletRequest request = ServletActionContext.getRequest(); //獲取請求頭
String phoneNum=(String)request.getParameter("phoneNum"); //獲取參數phoneNum與微信前臺傳入參數
System.out.println("獲取參數手機號:"+phoneNum);
Context ctx=new InitialContext();
DataSource ds=(DataSource)ctx.lookup("java:comp/env/jdbc/DNAME");
dbConn=ds.getConnection();
//以上獲取context中配置的數據庫連接
System.out.println("成功連接數據庫");
String sql="select * from app_user where sjh= ?";
PreparedStatement pstmt = dbConn.prepareStatement(sql);
pstmt.setString(1, phoneNum);
ResultSet rs = pstmt.executeQuery();
while(rs.next()){
username=rs.getString("yhm");
}
//以上根據手機號獲取姓名 (JDBC)
} catch (Exception e) {
e.printStackTrace();
}finally{
dbConn.close();
}
JSONObject obj=new JSONObject();
obj.put("name", username);
data=obj.toString();
//以上將值賦予data,返回成功。
return SUCCESS;
}
6.測試 前臺成功根據手機號讀出用戶名:
後臺成功獲取參數,並連接數據庫
7.總結
主要就是配置了servlet和數據庫連接池,還有針對小程序的一些特殊點;
如果是自己本來就做java web項目,這種後臺估計都不用配了。這部分內容對於前端比較陌生,所以這裏寫一下。
如有錯誤和改進,請提出,謝了。