JSP
Servlet是运行在服务器的,专门用于处理客户端发来的各种请求
之前了解了整个浏览器到服务器之间交互的过程,交互的开始从请求开始,结束到响应结束,那么Servlet程序同样存在自己的声明周期,服务器虽然在一直运行,但是Servlet程序可不能一直运行啊。
Servlet生命周期:
开始----》实例化----》初始化---》服务---》销毁---》不可用---》结束
1,第一次请求,创建Servlet对象
2,执行init方法初始化
3,根据相应的请求执行服务Service
4,处理完请求执行destroy销毁方法
5,结束
Servlet是多线程的~
ServletAPI结构:
Servlet 接口
实现类:GenericServlet通用基类
HttpServlet拥有Http协议特性类
编写的任意Servlet类都继承与HttpServlet
处理服务的方式:
doGet
doPost
两个处理方式都存在解析请求和响应的能力:
request 请求
response 响应
两种Java响应页面的方式:(跳转)
request.getRequestDispatcher("index.jsp").forward(request, response);请求转发(可以往下一级传递这一级的信息)
response.sendRedirect("index.jsp");重定向(不可以往下一级传递这一级的信息,将上一级的信息清零,清除缓存)
字符集问题:
Java中接收相同的字符集文本
request.setCharacterEncoding("UTF-8");
response.setCharacterEncoding("utf-8");
页面中先要确定好字符集:
html<meta http-equiv="content-type" content="text/html; charset=UTF-8">
JSP<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
JSP标签 <%@ %>声明标签
<% %>方法标签
<%= %>赋值标签
<%! %>注释标签
JSP中下面的两个标签,如果不写,使用的是相对路径,如果写了是绝对路径:
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<base href="<%=basePath%>">
而在项目中常用的是绝对路径,相对路径用的少
使用el表达式来编写代码:
1,现在JSP中声明那句话下面一行添加上:
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
2,想要往浏览器中传递数据:就需要在Java代码中放置已有的作用于的传递范围
request.setAttribute("aaa", user);
引号里面的是浏览器展现的那么名字${aaa},user写的是Java中传递的变量或者确切的值。
request域,只在当前页面中使用,不可向下传递,一旦servlet生命终止,那么之前的数据只活在当时。
session域,可以在整个服务中使用,但是不能脱离开浏览器。
cooke域,可以活在所有的浏览器中
要想从域中获取信息,那么就要先把信息放入到域中setAttribute
想要获取getAttribute存在域当中的信息
<c:forEach var="list" items="${clientList}">
使用set可以改变session的值
<c:set var="idnameValue" value="${fn:split(temp.supplier,'/')}" ></c:set>
使用if做判断
<c:if test="${idnameValue[0] == list.clientId}">
option选择
<option value="${temp.supplier}">${list.clientName}</option>
</c:if>
</c:forEach>
if(xml.readyState==4)
0 - (未初始化)还没有调用send()方法
1 - (载入)已调用send()方法,正在发送请求
2 - (载入完成)send()方法执行完成,已经接收到全部响应内容
3 - (交互)正在解析响应内容
4 - (完成)响应内容解析完成,可以在客户端调用了