js获取数据的方式
第一种方式是request.getParameter("key");
如下代码:
<%
String s=(String)request.getAttribute("name");//可以传递任何数据过来,所以类型强制转换
out.print(s);
%>
结果是:
因为还没有传输,所以是null。
但是如果我把数据是写在后端的request作用域里边的:
后端代码:
req.getRequestDispatcher..这个是跳转到某个jsp页面,把req是指request,resp是值response变量都传过去。
数据是写在了request域里边,那么在demo.jsp中用request.getAttribute就可以直接进行获取了。
那么前端就能够直接获取到,刷新就是如下:
获取到这个值后在js中的使用:
如下代码:
<%
String s=(String)request.getAttribute("name");//可以传递任何数据过来,所以类型强制转换
out.print(s);
%>
<script>
var a="<%=s%>";
alert(a);
</script>
el和jstl表达式
直接使用jsp太麻烦了,可以使用el表达式:
使用el表达式之前需要现在jsp页面的头部写上如下代码,表示启动el表达式。
如:
开启后,用el表达式就不要上述那一堆代码了,直接在body里边写${key}
如下代码:
<hr>
${name}
结果:
只有request域才能够直接写{域.key}的方式。
例如session域:
后端代码是把值保存到域里:
//session作用域
HttpSession session=req.getSession();
session.setAttribute("sessionKey","I am session'value");
前端能使用代码如下:
<br>------session域--------<br>
${sessionScope.sessionKey}
sessionScope指的是session域。是jsp的隐藏全局变量,直接用就可以的。
结果:
其他域里边的数据也是一样的,以上述类推。
js中使用el表达式
其实和jsp的页面使用是一样的,直接用就可以的。只是一定要加"",否则会报错,无法识别内容。
输出结果是:
jstl的使用:
jstl是在el的基础上进行的锦上添花的操作。
jstl使用的话,也是需要进行启动的,在页头顶部加上如下代码:
<%@ taglib uri="http://java.sun.com/jsp/jstl/core"prefix="c" %>
这个注意的是 prefix="c"。
但是uri的路径会报错,所以需要后端安装依赖,就可以解决:
<!-- https://mvnrepository.com/artifact/javax.servlet/jstl -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.glassfish.web/jstl-impl -->
<dependency>
<groupId>org.glassfish.web</groupId>
<artifactId>jstl-impl</artifactId>
<version>1.2</version>
</dependency>
jstl表达式以循环为例:
后端给request域的数据是,代码如下:
//后端给的数据是集合
List list=new ArrayList();
list.add(1);
list.add(2);
list.add(3);
//保存request域
req.setAttribute("list",list);
前端使用的代码是:
<br>--------jstl的表达式----------<br>
<!-- var是循环中的每个值,items指是要循环的 -->
<c:forEach var="value" items="${list}">
<h2> ${value} </h2>
</c:forEach>
结果是:
第二种方式是后端以输出数据的方式
以servlet为例说明。还是之前的doServlet,只是把内容改了下,改成了如下。
后台代码:
//这种输出的是输出内容到页面上,前端要用数据就需要用ajax这样的请求。
resp.getWriter().print("I am a dog");
如果是接口的方式输出,那么前端要获取的话,就需要js中的ajax或者是其他的请求方式。
以jq为列说明:
如下代码:
<script src="./jq.js"></script>
<script>
$(function (){
$.ajax({
url:"http://localhost:8080/demo5_war/demoServlet",
success:function(res){
alert(res);
}
});
});
</script>
结果是:
关于域
有时间再写吧。
遇到的bug
idea没有识别out.print
注意:在这里可能会遇到一个问题是out.print编辑代码软件无法识别的问题。需要在idea中把jdk和tomcat在当前的项目下绑定。
按如图的顺序操作:
第一张图:
第二张图:
第三张图:
最后是选中tomcat后确定就可以。