jsp中的EL表达式:
EL表达式都是以${开始,以}结束,如username{username.firstName}
有算数操作符,逻辑操作符(下面例子中有)
条件和Empty操作符:
- 条件操作符:
${A>B?B:C} - Empty操作符:
${emptyB}
判断一个值是否为null或empty
操作符的优先级:(从高到低)
- []
- ()
- not ! empty
- / div % mod
- < > <= >= lt gt le ge
- == != eq ne
- && and
- || or
- ?:
隐含对象 内容
—— 与范围有关的隐含对象
applicationScope应用程序范围内的scoped变量组成的集合
sessionScope所有会话范围的对象的集合
requestScope所有请求范围的对象的集合
pageScope页面范围内所有对象的集合
—— 其他隐含对象
cookie所有cookie组成的集合
headerHTTP请求头部,字符串
headerValuesHTTP请求头部,字符串集合
initParam全部应用程序参数名组成的集合
pageContext当前页面的javax.servlet.jsp.PageContext对象
—— 与输入有关的隐含对象
param所有请求参数字符串组成的集合
paramValues所有作为字符串集合的请求参数
在EL中,对于自定义变量的查找是通过PageContext.findAttribute(String)方法来完成的。如:${username}。这个表达式将按照page,request,session,application范围的顺序查找username,如果没有找到将返回null.我们也可以利用pageScope、requestScope、sessionScope和applicationScope指定范围。如:${requestScope.username}
表达式语言中允许定义函数,函数定义和使用的机制与标签库是一样的。首先自己写一个java类,它的函数必须是静态的
Demo01:
例子:
记得写一个对应的User的类:
package com.pojo;
public class User {
String uname;
String upwd;
public User(){}
public User(String uname,String upwd)
{
this.uname=uname;
this.upwd=upwd;
}
public String getUname() {
return uname;
}
public void setUname(String uname) {
this.uname = uname;
}
public String getUpwd() {
return upwd;
}
public void setUpwd(String upwd) {
this.upwd = upwd;
}
}
--------------------------------------------------------------------
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@page import="com.pojo.*" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>EL_demo</title>
</head>
<body>
EL表达式
<%
pageContext.setAttribute("user","cccc");
request.setAttribute("user","admin");
session.setAttribute("user", "adminsession");
application.setAttribute("user","adminapplicatoin");
com.pojo.User user=new com.pojo.User("lisi","123");
session.setAttribute("person", user);
%>
<h1>${3+2}</h1>
<h1>${10%3}</h1>
<h1>${10/3}</h1>
<h1>${str=="admin"}</h1>
<h1>${user}</h1><!-- 相当于Servlet中的getAttribute,不过是自动匹配是哪一种类型的 -->
<h1>${sessionScope.user}</h1><!-- 相当于Servlet中的session.getAttribute -->
<h1>${sessionScope.person.uname}</h1><!-- 相当于Servlet中的session.getAttribute的getuname -->
</body>
</html>
Demo02:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<h1>获取请求报头的值</h1>
<h1>${header["Host"]}</h1><!-- 得到对应报头的值 -->
<h1>${header.host}</h1><!-- 得到对应报头的值 -->
<h1>${headerValues.headerValues}</h1><!-- 试一下是什么作用 -->
<h1>${cookie.JSESSIONID.value}</h1><!-- 得到cookie -->
<h1>${param.uname}</h1><!-- 得到对应的变量的值 -->
</body>
</html>
JNDI:
把一个对象绑定到一个名字上,通过这个名字就能得到这个对象
一个项目用一个连接池;
现在想让Tomcat管理连接池,项目启动以后,向Tomcat申请这个链接
Tomcat启动的时候把连接池准备好,Tomcat把连接池的DataSource绑定到一个名字,
我们可以通过这个名字可以得到连接池对象,从而得到链接
在META-INF里面有一个Context.xml,在这里的这个配置相当于是全局的一个配置,相当于是给Tomcat服务器的一个配置。这样Tomcat启动的时候就已经把实例化javax.sql.DataSource的对象并且绑定到这个jdbc/test名字的事情做了。
Context.xml:
<Context>
<Resource 数据源
name="jdbc/test"
auth="Container"
type="javax.sql.DataSource" 类型,如果以后配置c3p0的话这里就是ComboPooledDataSource什么的,
这里要参考对应的文档
Tomcat的文档中有JNDIResource
maxActive="100" 连接池的一些属性,最大
maxIdle="30" 最小
maxWait="10000" 等待时间
username="root" 用户名
password="mysql" 密码
driverClassName="com.mysql.jdbc.Driver" 驱动
url="jdbc:mysql://localhost:3306/emps"/> URL,链接它
</Context>
在Servlet中:
InitialContext ic = new InitialContext();//实例化一个InitialContext对象
//这里就用“jdbc/test”这个名字得到DataSource对象,用实例化的InitialContext对象来调用lookup方法
DataSource ds = (DataSource) ic.lookup("java:comp/env/jdbc/test");
Connection con=ds.getConnection();//得到链接对象
ResultSet rs=con.createStatement().executeQuery("select * from emp");
…
记得把驱动类(就是C3p0的jar包什么的放到Tomcat的lib文件夹下)
Ajax
其实就是嫩异步处理,就是在不用点刷新页面的时候,浏览器后台偷偷传消息给服务器并且得到服务器的回应。
在看代码的时候不懂的话可以多看看说明文档,里面说的很清楚。
Index:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<script type="text/javascript">
var xmlhttp;//XMLHTTPRequest
//创建xmlhttp对像
function createXmlHTTP()
{
if (window.XMLHttpRequest)//如果浏览器支持的话
{// code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp=new XMLHttpRequest();//实例化一个XMLHttpRequest对象
}
else//浏览器不支持的话
{// code for IE6, IE5
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");//实例化一个ActiveXObject对象
}
}
function check()//check函数
{
var email=document.getElementById("email").value;//得到页面中email传过来的值
createXmlHTTP();//创建xmlhttp对像,ajax要用的
//xmlhttp.readyState一共有5个值,分别代表不同的状态,解释如下:
/*
0 (未初始化) 对象已建立,但是尚未初始化(尚未调用open方法)
1 (初始化) 对象已建立,尚未调用send方法
2 (发送数据) send方法已调用,但是当前的状态及http头未知
3 (数据传送中) 已接收部分数据,因为响应及http头不全,这时通过responseBody和responseText获取部分数据会出现错误,
4 (完成) 数据接收完毕,此时可以通过通过responseBody和responseText获取完整的回应数据
*/
//当xmlhttp.readyState 发生改变一次,都会触发此事件
xmlhttp.onreadystatechange=function()//这个事件后面的 =function()是一个函数,就是这个事件每触发一次,就执行一次这个函数
{
var show=document.getElementById("tip");//得到id为tip的节点
if(xmlhttp.readyState==4&&xmlhttp.status==200)//status是状态码,是服务器返回来的
//常用状态码:200 OK; 404 Not Found; 302 Found
{
var re=xmlhttp.responseText;//将响应信息作为字符串返回,也就是将Servlet返回来的信息得到。
//还有responseXML 将响应信息格式化为Xml Document对象并返回
//responseStream 以Ado Stream对象的形式返回响应信息
//responseBody 以unsigned array格式表示直接从服务器返回的未经解码的二进制数据。
if(re==1)//如果得到的是1(在Servlet中写好的)
{
show.innerHTML="<span style='color:red;'>不可以注册</span>";//在HTML中显示
}else//如果得到的不是1(在Servlet中写好的)
{
show.innerHTML="<span style='color:green;'>可以注册</span>";
}
}else
{
show.innerHTML="<span style='color:green;'>正在给服务器发请求</span>";
}
}
//创建一个新的http请求,并指定此请求的方法、URL以及验证信息
//括号中的意思:选择Get方法,对应哪个Servlet,并且把email传进去,是否为异步方式。
xmlhttp.open("GET","checkEmail?email="+email,true);
//xmlhttp.open("GET","hello.txt",true);
xmlhttp.send();//发送请求到http服务器并接收回应
}
</script>
</head>
<body>
<center>
<!-- 这个Email输入框要实现输入邮箱之后,和现有的邮箱账号匹配,如果有的话这个邮箱就不能再进行注册
在转移焦点的时候就要提示出来 -->
Email:<input type="text" id="email" onblur="check();"/><span id="tip"></span>
<!-- onblur就是转移焦点,意思是转移焦点的时候执行check函数 -->
<!-- 这里定义span用来显示返回来能不能用这个邮箱注册 -->
<br/>密码:<input type="password" id="pwd"/>
</center>
</body>
</html>
Index对应的Servlet:
package com.servlet;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet("/checkEmail")
public class CheckServlet extends HttpServlet
{
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
resp.setContentType("text/plain");
PrintWriter out=resp.getWriter();
/*try {
Thread.sleep(5000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}*/
String email=null!=req.getParameter("email")?req.getParameter("email"):"";
if("admin@163.com".equals(email))//如果符合这个邮箱就返回1,就是不能注册
{
out.print(1);
}else//如果不是就返回0,就是能注册
{
out.print(0);
}
out.close();
}
}
用jQuery的index3:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<script type="text/javascript" src="jquery-1.11.1.min.js"></script><!-- 导入一个已经写好的jQuery -->
<script type="text/javascript">
//jQuery的例子:
/*
* $(this).hide() - 隐藏当前元素
$("p").hide() - 隐藏所有段落
$(".test").hide() - 隐藏所有 class="test" 的所有元素
$("#test").hide() - 隐藏所有 id="test" 的元素
*/
$(function()//这里是执行这个函数的意思吗,这个函数怎么执行呢?
{
$("#email").blur//当id是email的元素失去焦点的时候,执行下面写的函数
(function()
{
var email=$("#email").val();
$.get("checkEmail",{'email':email},function(data)//请求checkEmail这个Servlet,并且根据这个Servlet的返回值做判断
/*
jQuery.get(url,[data],[callback]) 通过远程 HTTP GET 请求载入信息。
返回值是XMLHttpRequest
参数:
url (String) : 待载入页面的URL地址
data (Map) : (可选) 待发送 Key/value 参数。
callback (Function) : (可选) 载入成功时回调函数。
显示 test.php 返回值(HTML 或 XML,取决于返回值)。
jQuery 代码:
$.get("test.php", function(data){
alert("Data Loaded: " + data);
});
*/
{
if(data==1)
{
$("#tip").html("<span style='color:red;'>不可以注册</span>");
}else
{
$("#tip").html("<span style='color:green;'>可以注册</span>");
}
});
});
});
</script>
</head>
<body>
<center>
Email:<input type="text" id="email"/><span id="tip"></span>
<br/>密码:<input type="password" id="pwd"/>
</center>
</body>
</html>
本文介绍了JSP中的EL表达式的使用方法,包括基本语法、操作符、隐含对象等内容,并通过示例展示了如何在JSP页面中使用EL表达式。此外,还介绍了Ajax的基本原理及其在网页中的实现方式。

1376

被折叠的 条评论
为什么被折叠?



