JSP简明记录

JSP全名为Java Server Pages,中文名叫java服务器页面,其根本是一个简化的Servlet设计,它是由Sun公司倡导、许多公司参与一起建立的一种动态网页技术标准。


一、:Page指令

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属性的例子index.jsp:其中几乎覆盖了上面所以的page指令,并且其中一个条错误语句 int i = 1/0; 所以会报错,因为我们配置好了 errorPage = "/page/error.jsp",所以会跳转到error.jsp页面。

<%@ 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() %>

二、:JSP的9大内置对象

(1)对象列举

对象名称		对象类型
request			HttpServletRequest
response		HttpServletResponse
session			HttpSession
exception		Throwable
application		ServletContext
config			ServletConfig

page			Object         没用.
out			JspWriter      用于向浏览器输出信息
pageContext		PageContext	9大内置对象的首领.

(2)pageContext可操作的四个域

可以设置键值,根据键获得值,删除和查找,最后是打印出设置的键值。

<%@ 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


三、:JSP中的动作标签

下面是两种跳转方式,都可以跳转到指定页面,但是我们常用的是第二种的方式

(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);
    --%>
  


四、:JSP中表单提交和转换

(1)首先定义一个demo.jsp页面

在该jsp页面中,我们定义了四个输入框,用户名、密码、年龄和入职日期,对应的action = day10-jsp/AServlet
method = "post";
<%@ 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
    
	
	
	    
	
	
	

  
  
  
   	
用户名:
密码:
年龄:
入职日期:

(2)AServlet接收处理表单信息

使用Servlet接收jsp传递过来的表单信息有两种方式,第一种使用的是我们注释掉的方式,也就是使用request的接收方式,第二种是使用BeanUtils工具类的方式。
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);
	}

}

(3)表单传递的User对象

建立一个User对象,包括name、password、age、hiredate等
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 + "]";
	}
}

(4)定义一个MyDateConverter转换器

因为BeanUtils工具类中没用对应的date转换器,所以我们要自己定义一个date转换器,并在AServlet中注册这个转换器,来实现转换date的目的。
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中打印表单锁提交的信息。
如:User [name=tom, password=123, age=22, hiredate=Wed Jun 15 00:00:00 CST 2016]

五、:JSTL标签库

JSTL全名为JavaServer Pages Standard Tag Library,JSTL是由JCP(Java Community Process)所制定的标准规范,它主要提供给Java Web开发人员一个标准通用的标签函数库。

(1)if 判断标签

  
    
    
    My JSP 'demo1.jsp' starting page
    
	
	
	    
	
	
	
  
  
  
   <%
   		request.setAttribute("num1",10);
   		request.setAttribute("num2", 100);
    %>
   	
		num1 比较大!!   		
   	
   	
   	
		num2 比较大!!   		
   	
  

输出结果:num2 比较大!!

(2)if else标签

  
    
    
    My JSP 'demo1.jsp' starting page
    
	
	
	    
	
	
	

  
  
  
  
   <%
   		request.setAttribute("num1",1000);
   		request.setAttribute("num2", 100);
    %>
    	
    		
    			num1 比较大!
    		
    		
    			num1 与num2 相等!
    		
    		
    			num2 比较大!
    		
    	
    
  

输出结果:num1 比较大!

(3)forEach标签
第一个是使用forEach来画一个表格,第二个是遍历数字


  
    
    
    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}
输出结果:一个表格和一串数字,并且使用CSS来改变了颜色
JSP简明记录_第1张图片

(4)fmt格式化日期


  
    
    
    My JSP 'ftm1.jsp' starting page
    
	
	
	    
	
	
	

  
  
  		
    	
    		
    	${requestScope.date}
  
输出结果为:2016/06/15 02:41:09

(5)fmt格式化数字


  
    
    
    My JSP 'ftm1.jsp' starting page
    
	
	
	    
	
	
	

  
  
  
  		
    	
    	
    	${requestScope.num1}
${requestScope.num2}
输出结果为:0003.14159260000
3.1415926



以上是对传智老师视频讲课内容的总结,方便自己以后当做笔记来查看

你可能感兴趣的:(【Java,Web】)