Java Web项目遇到的问题总结

 

最近做了一个项目,需要用到前台提交后台的方式处理表单数据,在使用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。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值