【趁热打铁写个笔记】
写了个简单的程序测试 从android 提交 数据到 web 上的mysql 数据库
总不成功.其实问题不在于程序在于部署.!
1.Tomcat 8的坑
如何激活服务器.实际上就是环境变量的设置的问题.为了避免,
CATALINA_BASE 与 CATALINA_HOME 不在一个目录的坑,
设置一个 批处理文件.启动web服务器.就无需使用环境变量
set "CATALINA_BASE=%cd%"
set "CATALINA_HOME=D:\tomcat8.5"
set "EXECUTABLE=%CATALINA_HOME%\bin\catalina.bat"
call "%EXECUTABLE%" start
tomcat ins2 是分开的 Tomacat8.5 的实例分身(工作目录)
除了lib,bin 等主要目录,都复制到这个工作目录.
开始运行的时候启动 刚才写的配置批处理 startup.bat
2.web 缺省目录的坑 分烦人.网上的说的太复杂,反倒是坑越挖越大.
修改 tomcat ins2 下 conf 下的 Server.xml文件
虚拟目录
<Host name="localhost" appBase="webapps"
unpackWARs="true" autoDeploy="true">
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
prefix="localhost_access_log" suffix=".txt"
pattern="%h %l %u %t "%r" %s %b" />
<Context path="" docBase="StudentERP" debug="0" />
</Host>
主要 < context path="" docBase=“studentERP” /> 这个.
其他的方法以后再说.主要就是将 你的工程 studentERP 目录代替了 ROOT 目录
3.jdbc:mysql 库文件包jar的坑. 提示无法解析类名的坑
解决办法就是
放入 Tomcat 主目录下的lib目录下 mysql-connector-java-8.0.16.jar
工程目录下WEB-INF下的 lib 目录 ,这个目录放入 库文件貌似没有用.
网上,谈的是 Editclipse 的WDA 工程发布所以借鉴不大.
4.客户的 Android 程序
我用的是
Android studio 在
模块
插件.直接访问服务器.
import com.android.volley.RequestQueue;
....
mRequestQueue= Volley.newRequestQueue(RegisterManActivity.this);
...
private void insertUser(final String sid1, final String sname1, final String age1, final String mobile1, final String email1, final String pass1,
String ip1) {
String url1="http://";
stringip=ip1;
String contextURLpath="/register.jsp";
String finalurl=url1+stringip+contextURLpath;
//http://192.168.2.138:8070/register.jsp
mStringRequest =new StringRequest(StringRequest.Method.POST, finalurl, new Response.Listener<String>() {
@Override
public void onResponse(String response) {
if (response.equals("record inserted")) {
//完成 数据的发送 成功
showMesage("Send ok saveed successfully");
}
}
}, new Response.ErrorListener() {
@Override
这部分没有问题,
- 服务器端 register.jsp文件 还有一个 与 java 1.8 以下不兼容的坑.
于是我将环境变量从 1.7升级到1.8 问题解决
脚本才正确识别 mysql-connector-java-8.0.16.jar 这个版本
try{
Class.forName("com.mysql.jdbc.Driver");
conn=DriverManager.getConnection("jdbc:mysql://localhost:3306/mydb","root","773abc338");
st=conn.prepareStatement("insert into studentInfo(sid,sname,age,mobile,email,pass)values(?,?,?,?,?,?)");
//set the parameters
st.setString(1,sid);
st.setString(2,sname);
st.setInt(3,Integer.parseInt(age));
st.setInt(4,Integer.parseInt(mobile));
st.setString(5,email);
st.setString(6,pass);
//execute the query
int res=st.executeUpdate();
if(res==0){ //process to result
System.out.println("record not inserted");
out.println("not rni");
}else{
System.out.println("record inserted");
out.println("record inserted");
//response to anroid app / browser windows
}
- 其实如果 Android 客户的直接使用 jdbc 驱动访问 mysql 数据也会出现这个坑
只要在模块中加入强制编译 到 jdk 1.8 就可以编译通过.
最后看看,