JSP全名为Java Server Pages,中文名叫java服务器页面,其根本是一个简化的Servlet设计,它是由Sun公司倡导、许多公司参与一起建立的一种动态网页技术标准。
page指令用于设置一些页面的基本属性
language="java" 页面中使用的语言为java.
import="java.util.*" 就是导包. 是所有属性中唯一一个可以在页面中出现多次的属性.
pageEncoding="UTF-8" 页面保存到硬盘编码.
contentType="text/html; charset=UTF-8" 发送给浏览器的编码 .
以上两个码表最好一致. 但是一般设置一个属性即可.另外一个属性自动设置.
autoFlush="true" 如果缓冲区装满是否自动刷新到浏览器. 如果装满并没有选择自动刷新,那么会抛出异常.
buffer="8kb" 决定jsp输出缓冲区大小为8kb
errorPage="" 配置当前页面的错误页面
isErrorPage="false" 指定当前页面是否是一个错误页面
<%@ page language="java" import="java.util.*,java.io.*" pageEncoding="UTF-8" contentType="text/html; charset=UTF-8"
autoFlush="true" buffer="8kb" errorPage="/page/error.jsp" session="true"
%>
<%@ page import="java.util.*" %>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
session.getAttribute("");
int i = 1/0;
%>
My JSP 'index.jsp' starting page
This is jsp page.
下面是其对应的error.jsp,当我们访问index.jsp时,会跳转到本页面并打印对应的错误信息/by zero
<%@ page language="java" import="java.util.*" pageEncoding="ISO-8859-1"
isErrorPage="true"
%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
My JSP 'error.jsp' starting page
This is my Error page.
<%=exception.getMessage() %>
(1)对象列举
对象名称 对象类型
request HttpServletRequest
response HttpServletResponse
session HttpSession
exception Throwable
application ServletContext
config ServletConfig
page Object 没用.
out JspWriter 用于向浏览器输出信息
pageContext PageContext 9大内置对象的首领.
可以设置键值,根据键获得值,删除和查找,最后是打印出设置的键值。
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
My JSP 'pageContext01.jsp' starting page
<%
// PageContext可以操作4个域
//增
pageContext.setAttribute("name","requestTom", PageContext.REQUEST_SCOPE);
pageContext.setAttribute("name","sessionTom", PageContext.SESSION_SCOPE);
pageContext.setAttribute("name","applicationTom", PageContext.APPLICATION_SCOPE);
//根据键获得值
pageContext.getAttribute("name", PageContext.REQUEST_SCOPE);
//删
pageContext.removeAttribute("name",PageContext.REQUEST_SCOPE);
//查所有键
pageContext.getAttributeNamesInScope(PageContext.REQUEST_SCOPE);
// find 从4个域中找 ,从小到大.一旦找到立刻停止,并返回找到的.
pageContext.findAttribute("name");
%>
request: <%=request.getAttribute("name") %>
session: <%=session.getAttribute("name") %>
application: <%=application.getAttribute("name") %>
findAttribute:<%= pageContext.findAttribute("name") %>
其打印结果如下:
request: null
session: sessionTom
application: applicationTom
findAttribute:sessionTom
下面是两种跳转方式,都可以跳转到指定页面,但是我们常用的是第二种的方式
(1)forward方式:
<%-- JSP动作标签
分担jsp页面的java代码
--%>
<%-- //下面的代码相当于上面的标签
request.getRequestDispatcher("/index.jsp").forward(request, response);
--%>
(2)include方式:
<%-- JSP动作标签
分担jsp页面的java代码
--%>
<%--
// jsp 动态包含
request.getRequestDispatcher("/index.jsp").include(request, response);
--%>
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
My JSP 'demo.jsp' starting page
import java.io.IOException;
import java.lang.reflect.InvocationTargetException;
import java.util.Date;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.beanutils.BeanUtils;
import org.apache.commons.beanutils.ConvertUtils;
public class AServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// 创建User对象
User u = new User();
// 将表单参数封装到User对象
//参数1: 填写User对象
//参数2: 填写需要封装到User对象的参数Map
try {
//如果我们需要BeanUtils支持非8大基本数据类型.我们只要给BeanUtils添加类型转换器即可
//注意:注册类型转换器,必须写在populate方法之前.
ConvertUtils.register(new MyDateConverter(), Date.class);
//BeanUtils在封装时可以完成类型转换. 自动转换的范围 只限于 8个基本数据类型
BeanUtils.populate(u,request.getParameterMap());
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
System.out.println(u);
/* //1 获得参数
String name = request.getParameter("name");
String password = request.getParameter("password");
//2 封装参数 User
User u = new User();
u.setName(name);
u.setPassword(password);*/
//-------------------------------------------------------
//3 将User对象交给业务类处理
//4 根据处理结果
//成功=>在session加入成功标识,并重定向到成功页面
//失败=>回到登录页面.提示错误信息
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
}
import java.util.Date;
//javaBean
//1.要求为属性提供get/set方法任意之一
//2.需要有空参构造
//3.实现串行化接口(可选)
public class User {
private String name;
private String password;
private int age;
private Date hiredate;
public Date getHiredate() {
return hiredate;
}
public void setHiredate(Date hiredate) {
this.hiredate = hiredate;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
@Override
public String toString() {
return "User [name=" + name + ", password=" + password + ", age=" + age
+ ", hiredate=" + hiredate + "]";
}
}
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import org.apache.commons.beanutils.Converter;
public class MyDateConverter implements Converter {
//我们填写转换代码
//参数1: 没用, 告诉实现者,需要转换成什么类型
//参数2: 待转换表单参数
//返回值: 转换结果
public Object convert(Class arg0, Object arg1) {
//1 创建sdf
SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd");
//2 转换参数2
String dateStr = arg1.toString();
try {
Date date = sdf.parse(dateStr);
//3 将转换结果返回
return date;
} catch (ParseException e) {
e.printStackTrace();
return null;
}
}
}
最终的结果是,我们成功在console中打印表单锁提交的信息。
My JSP 'demo1.jsp' starting page
<%
request.setAttribute("num1",10);
request.setAttribute("num2", 100);
%>
num1 比较大!!
num2 比较大!!
My JSP 'demo1.jsp' starting page
<%
request.setAttribute("num1",1000);
request.setAttribute("num2", 100);
%>
num1 比较大!
num1 与num2 相等!
num2 比较大!
My JSP 'demo1.jsp' starting page
<%
List list = new ArrayList();
list.add("tom");
list.add("jerry");
list.add("jack");
list.add("rose");
request.setAttribute("list", list);
%>
用户名
当前遍历索引
当前遍历计数
是否是集合第一个元素
是否是集合最后一个元素
${name}
${st.index}
${st.count}
${st.first}
${st.last}
${num}
My JSP 'ftm1.jsp' starting page
${requestScope.date}
输出结果为:2016/06/15 02:41:09
My JSP 'ftm1.jsp' starting page
${requestScope.num1}
${requestScope.num2}
输出结果为:0003.14159260000