最近做了一个项目,需要用到前台提交后台的方式处理表单数据,在使用ajax的过程中走了不少弯路,在此记录一下:
标准的Ajax请求包括5步:https://blog.csdn.net/a17634399794/article/details/82747520
而使用Jquery框架的话,相对比较简单一些,具体步骤如下:
附:尚硅谷Ajax视频教程:https://www.bilibili.com/video/av36990155/?p=7
<script type="text/javascript" src="https://libs.baidu.com/jquery/2.1.1/jquery.min.js"></script> //首先需要将js包加载完成
<script type="text/javascript">
$(function() {
$(":input[name='calculate']").click(function() {
// var val = $(this).val();
// val = $.trim(val); /去掉前后的空格
var Aar = $("#Aar").val(); //获得id=Aar的文本框中的输入值
var Sar = $("#Sar").val();
var url = "${pageContext.request.contextPath}/checkUserName";
//以post方法传递相关参数
var args = {"Aar":Aar,"Sar":Sar, "time":new Date() }; //加入time是为了避免缓存导致ajax检测到未做更改时,会不刷新页面
$.post(url, args, function (data) { //传送的参数,以json形式
$("#message").html(data); //返回的数据放到data中,并且以html的形式展示
// window.alert(data);
});
});
})
</script>
然后需要在该web工程——src上新建servlet(servlet名字与url中checkUserName相同),不然无法找到对应的servlet容器的路径。
勾选Get或Post方法(或者两者都勾选),然后在Post方法下使用request.getParameter("Aar")(Aar表示ajax中args参数名)得到json对象,用属性名取得对应的属性值即可。
1、Submit表单提交方式总会导致页面刷新,而button提交方式,如果结合Ajax技术可以达到局部提交效果。
<form action="" method="post">
<input type="button" name="calculate" value="计算"/>
<br>
<div id="message"></div>
</form>
<script type="text/javascript"> //ajax实现为name='calculate'的input标签添加click事件响应
$(function() {
$(":input[name='calculate']").click(function() {
//click事件响应代码段
}
</script>
2、Web项目中若提示can not find com.jdbc.Driver,可能有如下原因:
1)在java项目中,只需要引入mysql-connector-java-5.1.7-bin.jar就可以运行java项目。
2)在web项目中,必须把mysql-connector-java-5.1.7-bin.jar导入到tomcat或项目的lib目录下面!
当Class.forName("om.mysql.jdbc.Driver");时myeclipse是不会去查找字符串,不会去查找驱动的。所以只需要把mysql-connector-java-5.1.7-bin.jar 拷贝到tomcat或项目下lib目录就可以了。
3)没有把它添加到工程路径,右键lib->add to path即可。
3、tomcat端口被占用的解决方法。
如果启动服务器时提示如下界面信息,则tomcat端口被占用,
此时,需要查看占用相关端口的进行的PID(进程号)并结束对应进程,然后重新启动即可。
查看进行PID及结束对应进程方法:https://www.cnblogs.com/hjchoset/p/6027589.html
4、实现从数据库中查到数学公式,并替换变量进行计算
比如,我从数据库中查询到的表达式(字符串类型)如下:Aar*Aar*(-0.0004)+Aar*0.035+0.034+0.124*Sar,需要将其中的Aar和Sar替换为前端的输入值,并计算此表达式的值,在java中使用ScriptEngineManager这个类的方法来实现。具体代码如下:
import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
public class test
{
public static void main(String[] args) throws Exception
{
String expr = "x+y*10";
ScriptEngineManager manager = new ScriptEngineManager();
ScriptEngine engine = manager.getEngineByName("js");
engine.put("x", 5);
engine.put("y", 5);
Object result = engine.eval(expr);
Double re= Double.parseDouble(result.toString());
System.out.println(re*10);
}
}
5、XAMPP中MySQL和本地MySQL冲突的解决办法:(用修改注册表的方法)
https://blog.csdn.net/qq_20757489/article/details/86668190
6、使用ajax实现动态添加下拉框
参考:https://blog.csdn.net/tt336798/article/details/81304665
<script type="text/javascript" src="https://libs.baidu.com/jquery/2.1.1/jquery.min.js"></script>
<script type="text/javascript">
window.onload = function(){ //此方法可以在页面加载时同时为多个下拉框添加item
loadSelectItem('0610火电行业','tec','erjihangye');
loadSelectItem('0610火电行业','tec','yuanliao');
};
function loadSelectItem(hangyeName, colName,TagId) {
$.ajax({
type:"post",
async:false,
url:"${pageContext.request.contextPath}/getSlectedName",
dataType:"text",
data: {"hangyeName":hangyeName, "colName":colName, "time":new Date()},
success:function(rdata){
var data = rdata.split("|");
// window.alert(data);
for(var i=0;i<data.length;i++){
$("#"+TagId).append("<option value='"+i+"'>"+data[i]+"</option>");
}
}
});
}
</script>
后端代码如下所示:
package fireProject.servlet;
import java.io.IOException;
import java.sql.ResultSet;
import java.sql.SQLException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
//加载自己写的类
import fireProject.servlet.GetMysqlConn;
/**
* Servlet implementation class GetSlectedName
*/
@WebServlet("/getSlectedName")
public class GetSlectedName extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
ResultSet re = null;
String hangyeName = request.getParameter("hangyeName"); //从前端获取到传递的行业名
String colName = request.getParameter("colName"); //从前端获取到传递的行业名
String sql = "select distinct " + colName + " from " + hangyeName; //数据库查询语句
String result = null;
StringBuilder stringBuilder = null;
System.out.println(sql);
re = GetMysqlConn.getSqlResult(sql); //调用相关方法进行数据库查询
try {
while (re.next()) {
result = re.getString(colName);
if (stringBuilder == null) {
stringBuilder = new StringBuilder(result);
} else {
stringBuilder.append("|");
stringBuilder.append(result);
}
}
} catch (SQLException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
//返回给前端jsp页面计算结果
response.setContentType("text/html;charset=utf-8");
response.setCharacterEncoding("utf-8");
response.getWriter().print(stringBuilder.toString());
}
}
6、设置外网访问本地的javaweb项目。
可以使用花生过域名穿透服务。需要自己去注册一个账号,免费的每个月会送1G流量的,带宽为1M。