JSP(java Server page)Java服务器页面
1、 Servlet:看做是嵌入HTML标签的类(数据的控制)
JSP:看做是嵌入Java代码的HTML(数据的显示)
2、 JSP的工作原理:
当页面第一次被请求时,把Java代码转换成Servlet,然后响应回去,之后请求,如果页面没有变化,直接响应就可以,如果Servlet发生变化,再请求时,重新转换成Servlet,然后再响应
3、 JSP转换将文件放在Tomcat的work文件下
4、 JSP的经典语法:
注释:<%-- --%>浏览器不可见
<!-- -->查看源文件,浏览器可见
声明:<%! %>声明方法和成员变量
脚本段:<% %>句子和局部变量,如if循环语句
表达式:<%= score %>输出到浏览器,等价于<%out.println();%>
指令:<%@ %>
迭代语句:跨脚本段 遇到Java代码跳入脚本段,遇到HTML标签跳出脚本段
普通语句
<%
int score=12;
if(score==100){
out.println("<h1><font color=\"red\">去公园玩</font></h1>");
}else{
out.println("<h1><font color=\"blue\">在家反省</font></h1>");
}
%>
迭代语句
<%
int score=100;
if(score==100){
%>
<h1><font color="red">去公园玩</font></h1>
<%
}
else{
%>
<h1><font color="blue">在家反省</font></h1>
<%} %>
5、page指令 设置当前页面的信息
language:语言
contentType:设置当前页面的编码格式,默认为ISO-8859-1
pageEncoding:设置当前页面的编码格式,默认为ISO-8859-1
import:导包 可以出现多次,如果写在一个import中,中间用逗号间隔
session:当前页面是否有session对象,默认为true
extends:JSP页面生成的Servlet类的父类
buffer:表示缓冲器大小,默认8kb
autoFlush:默认为true是否自动刷新缓冲区
isThreadSafe:是否是线程安全的,默认为true
isELIgnored:默认为false不忽略,是否忽略EL表达式
isErrorPage:默认为false,页面是否为错误页面
errorPage:后面跟错误页面的URL路径
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" buffer="1kb" import="java.sql.Connection"
autoFlush="false" isELIgnored="false"%>
6、include指令
include指令(静态包含)与include动作(动态包含)的区别
include指令:只转换成一个Servlet,转换成Servlet时就包含进来,不可以使用表达式
<%@include file=”header.jsp”%>
include动作:转换成多个Servlet,响应时包含进来,可以使用表达式
<jsp:include page=”<%=header.jsp%>”></jsp:include>
7、taglib指令JSP三个指令:page、include、taglib
8、JNDI:数据库连接池
在web应用下的META-INF下新建context.xml配置文件
<?xml version=”1.0” encoding=”UTF-8”?>//告诉我们是一个xml文件
<Context>
<Resourse name=”jdbc/mysourse”
auth=”Container”
type=”javax.sql.DataSourse”
driverClassName=”oracle.jdbc.driver.OracleDriver”
url=” jdbc:oracle:thin:@YLMF123-3131857:1521:orcl”
username=”scott”
password=”tiger”
maxActive=”30”
maxIdle=”5”
maxWait=”10000”
/>
</Context>
//name表示Resourse资源的JNDI的名字
//auth表示这个资源的管理者Application(web应用创建和管理Resourse)、Container
(容器创建和管理Resourse)
//type表示Resourse所属的Java类
//maxActive数据库在此服务器上打开的最大连接数
//maxIdle数据库在此服务器上打开的最小连接数
//maxWait最大的等待时间,毫秒
使用:
Context context=new InitialContext();
DataSource ds=(DataSource)context.lookup("java:comp/env/jdbc/mysource");
conn=ds.getConnection();
9、jsp下的转发
<jsp:forword></ jsp:forword>
10、jsp的9个内置对象
1)request HttpServletRequest
request.getAttribute(“”);
request.getParameter(“”);
2)response HttpServletResponse
response.sendRedirect(“”);
response.encodeURL(“”);
response.getWriter();
3)session HttpSession
session.setAttribute(“”);
4)application ServletContext
application.setAttribute(“”,””);
application.getAttribute(“”);
5)config ServletConfig
config.getInitParameter(“”);
6)out 默认值为null JspWriter
7)page 默认值为this,指的是当前Servlet Object
8)exception Throwable是一个类,与exception是继承关系
9)pageContext PageContext
pageContext:
1) 产生其他内置对象
2) 存储page作用域范围内的数据,以及其他作用域(request、session、
application)范围内的数据
10、JSP四个领域范围(作用域范围)
1)page:当前页面有效
2)request:同一请求范围内有效
3)session:同一会话范围内有效
4)application:web应用范围内有效
11、JavaBean:是一种规范,是一种可移植的组件
12、成为JavaBean的规范
1)必须是公开类
2)必须是无参的构造方法
3)属性xxx必须是getXxx或者SetXxx命名
4)实现Serializable接口
5)该bean放在某个包中(前三个条件必须满足)
程序如下:
public class Users implements Serializable{ private int id; private String username123; private String password; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getUsername() { return username123; } public void setUsername(String username) { this.username123 = username; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } }
13、用jsp对bean进行赋值和输出
<jsp:useBean>相当于new一个对象
<jsp:setProperty>赋值
<jsp:getProperty>取值
程序如下:
<body> <jsp:useBean id="u" class="com.neusoft.bean.Users" scope="session"></jsp:useBean> <jsp:setProperty property="*" name="u" />
//属性的名字应与表单域中的name相同,可以用*通配符
//否则用以下代码
<jsp:setProperty property="id" name="u" param="id"/>//相当于u.setId(12); <jsp:setProperty property="username" name="u" param="name"/> <jsp:setProperty property="password" name="u" param="pwd"/> Id:<jsp:getProperty property="id" name="u"/><br/><!-- u.getId() --> Name:<jsp:getProperty property="username" name="u"/><br> Password:<jsp:getProperty property="password" name="u"/> </body>
14、EL表达式:通常与JSTL一起使用
1)语法:${} 花括号里面可以使用.或者[]
如:${requestScope.user.id }
2)有些情况必须使用[]:数组、List集合、Map集合、变量中有特殊字符(如na$me需要
用[“na$me”])
数组:${requestScope.arr[1] }<br>
List集合:${requestScope.list[0].username }<br>
Map集合:${requestScope.map["m2"].password}
3)el的隐含语法:
<%=request.getParameter("name") %>//取表单域的值
${param.name }//取表单域的值
${header.host }//获得报头信息,主机名字
${cookie }//获得cookie
4)运算符:+、-、*、/(div)、%(mod)
${18 div 10} //输出1
${2==4} //false
${2<4 && 5>3} //true
15、JSTL(JSP Standard Tag Library)标签库
1)导包:
在WEB-INF的lib导入standard-1.1.2.jar包(现成的)
在jar包下的META-INF的c.tld找到uid路径,复制粘贴到
<%@taglib uri=”复制” prefix=”c”%>
2)out 标签 输出
<body>
<jsp:useBean id="user" class="com.neusoft.el.User" scope="request">
</jsp:useBean>
<jsp:setProperty property="id" name="user" value="12"/>
<jsp:setProperty property="username" name="user" value="abc"/>
<jsp:setProperty property="password" name="user" value="123"/>
<!-- out标签 -->
<c:out value="admin"></c:out>
EL表达式:${requestScope.user.password }
out标签:<c:out value="${requestScope.user.password }"></c:out>
default属性:<c:out value="${name}" default="qqq"></c:out>
//value对象存在,即输出,不存在即返回default设置的默认值
<%
String str="<address>";//xml标签
request.setAttribute("str", str);
%>
//是否屏蔽xml标签,默认值为true,即屏蔽
escapeXml标签:<c:out value="${str }" escapeXml="false"></c:out>
</body>
3)set标签 声明变量
<c:set var=”u” value=”guest” scope=”session”></c:set>
Set标签:${sessionScope.u}//输出guest
//针对JavaBean的属性,target指的是JavaBean的id
<c:set target=”${user}” property=”username” value=”John”></c:set>
${user.username}
4)remove标签 删除
<c:remove var=”u”>
5)if标签 判断,只能放一条if语句
<c:set var=”age” value=”2300” scope=”request”></c:set>
<c:if test=”{${age<0 || age>200}”>年龄不合法</c:if>
6)choose标签 多条件判断
<c:choose>
<c:when test=”${age<0 || age>250}”>年龄不合法</c:when>
<c:when test=”${age<50 || age>250}”>中年人</c:when>
<c:otherwise>老年人</c:otherwise>
</c:choose>
7)forEach标签 遍历数组、集合
//item:集合的名字
//var:遍历集合是所遍历到的元素的名字
//begin=“1” end=“4”部分遍历
//step 步长值 默认为1
//varStatus 状态值变量 index下标 count第几个元素
<!—遍历数组 -->
<c:forEach items=”${arr}” var=”item” varStatus=”aa”>
${item}||${aa.index}||${aa.count}||${aa.first}||${aa.last}
</c:forEach>
<!-- 遍历List集合 -->
<c:forEach items=”${list}” var=”item”>
${item.id}||${item.username}//list集合里面是user对象
</c:forEach>
<!-- 遍历Map集合 -->
<c:forEach>
${item.key}||${item.value.username}//value是user对象
</c:forEach>
16、MVC架构模式(可重用性、可维护性)
发送请求,Servlet(属于控制层)负责处理请求,jsp只负责显示(属于View视图层),
JavaBean负责逻辑部分
M(JavaBean):数据的逻辑,与数据库的交互逻辑(dao层和service层)
V(jsp):数据的显示
C(Servlet):数据的控制
a. 处理请求
b. 根据请求,找到某个业务逻辑处理
c. 根据业务逻辑的结果,找到某个视图响应回去
Ajax(Asynchronous JavaScript And XML)
1、步骤
var xmlhttp;
function val{
1)获取表单数据
var username = document.getElementsByName(“username”)[0];//得到一个数组
2)创建XMLHttpRequest对象
if(window.XMLHttpRequest){//除了ie7以下版本,浏览器中都有XMLHttpRequest对
象,如火狐、搜狗等
xmlhttp = new XMLHeepRequest();
}else if(window.ActiveXObject){//ie6,ie6.5
xmlhttp = new ActiveXObject(“Microsoft.XMLHTTP”);
}
3)建立与服务器的连接
if(xmlhttp){//判断是否创建成功
xmlhttp.onreadystatechange = callback;//注意后面不加括号,设置状态变化时调用
callback方法
xmlhttp.open(“GET”,”GetServlet?,true);
//method:提交方式,URL:提交到的目标页面,async:是否异步(true表示异步)
//POST方式提交
xmlhttp.open(“POST”,”POSTServlet”,true);
xmlhttp.setRequestHeader(“Content-Type”);
xmlhttp.send(“username=”+username.value);
4)发送请求
xmlhttp.send(null);
}
}
5)编写回调函数,用于存储服务器响应回来的数据
function callback(){
if(xmlhttp.readystate==4){
if(xmlhttp.status==200){
var text = xmlhttp.responseText;//获取服务器的数据
var s = document.getElementById(“s”);
s.innerHTML = “<font color=red>”+text+”</font>”;
}
}
}
2、XML可扩展的标记性语言
格式良好的XML文件
1) 大小写敏感
2) 标签要求正确嵌套
3) 属性值必须被“”修饰
4) 标签必须成对出现
5) 必须要有根元素<?xml version=”1.0”?>
3、DOM(Document Object Model):文档对象模型