加载jsp页面的顺序
jsp中的Java代码是服务端代码;
js代码是客户端代码。
java是在服务器端运行的代码,jsp在服务器的servlet里运行,而JavaScript和HTML都是在浏览器端运行的代码。所以服务器端先执行,执行后将信息传给客户端。
.jsp实际上也是java一个类,html中的标签通过这个类中的一个方法通过out.write()显示在页面上,而.jsp文件中通过<%... %>方式穿插的java代码则是直接写在该类中。
加载jsp页面的执行顺序是java->jsp->js,加载jsp的时候先编译java代码,有错误的话直接报错,没错的话会执行jsp代码,最后加载js代码。
测试代码如下:
<!DOCTYPE html>
<html>
<head>
</head>
<body>
<button id="btn" Onclick="test()">click</button>
<script type="text/javascript">
function test(){
alert("这是一个弹窗");
System.out.println("输出测试");//无法识别但不影响代码运行
<%System.out.println("输出到控制台");%>
}
</script>
</body>
</html>
ps:第二行代码直接在js中写java语句,不加<%…%>虽然不会影响代码的运行但是当你把页面跑到浏览器按F12检查页面元素会发现:
自动触发且再次触发无效
在.jsp文件中编写java语句在编译时都会立即执行所以onclick事件不用单击就直接触发了,但是当再次点击按钮会发现java语句无效。
解决办法
将按钮改成一个submit的imput标签,通过表单提交,将需要实现的java代码写在Servlet中。
或者
通过表单提交一个标志flag到本页面,通过request.getParameter()获取该标志,然后利用该标志的值判断是否执行java代码
servlet中实现弹框且点击确认后跳转页面
在做一个jsp和servlet的项目时,由于动态生成信息的页面时servlet,则需要出现弹框且点击后实现页面跳转,最开始直接写了
//错误code
PrintWriter out = response.getWriter();
out.print("alert('success!')");
发现直接输出了符号串:alert(‘success’),并未实现弹窗功能,百度了解之后更改代码。
PrintWriter out = response.getWriter();
out.print("<script>alert('登录success!');window.location.href='跳转页面'</script>");