day11_jsp基础

		回顾重点内容:
			会话管理:管理浏览器与服务器之间会话过程产生的会话数据。 

			Cookie技术:  会话数据保存在浏览器端
				Cookie技术API:	
					1)创建Cookie对象,保存会话数据
						Cookie cookie = new Cookie("name","value"); 
					2)服务器发送cookie给浏览器保存(原理:响应头: set-cookie)
						response.addCookie(cookie);
					3)浏览器携带cookie数据访问服务器 (原理:请求头:cookie)
					4)服务器接收到浏览器发送的cookie数据
						Cookie[] cookies = request.getCookies();

		    Session技术:会话数据保存在服务器端
				Session技术API:
					1)创建HttpSession对象
							HttpSession session = request.getSession(true/false);   (原理:发送一个JSESSIONID																			的cookie)
					2)使用HttpSession对象保存会话数据
							session.setAttribute("name",Object);
					3)使用HttpSession对象获取会话数据
							session.getAttribute("name");
					4)使用HttpSession对象删除会话数据
							session.removeAttribute("name")
				
1 编程实战(上)
		通讯录程序
		需求: 
			添加联系人
			修改联系人
			删除联系人
			查询所有联系人

	职业发展:
		技术线:初级开发攻城狮 - > 高级开发攻城狮 -> 核心开发人员(系统分析师助理) -> 系统分析师
		非技术线:初级开发攻城狮 -> 高级开发攻城狮 -> 项目组长(项目经理助理)-> 项目经理

	1.1 需求分析(需求分析师)
			a) 功能需求:
					需求: 
						添加联系人
						修改联系人
						删除联系人
						查询所有联系人
			b)功能流程
				抽取业务模型: 图书模型: 名称,页码,出版社....     
				 功能流程图
	1.2 需求设计(系统分析师)
				a)美工设计(设计静态原型)
				b)系统设计
					1)设计实体
							class Contact{
								String id;
								String name;
								String gender;
								String phone;
								String email;
								String address;
							}
							
					2)设计“数据库”
							xml文件代替“数据库”

							设计contact.xml
					
    <?xml version="1.0" encoding="utf-8"?>
    <contact-list>
    	<contact id="001">
    		<name>张三</name>
    		<gender>男</gender>
    		<phone>13411112222</phone>
    		<email>[email protected]</email>
    		<address>广州天河</address>
    	</contact>
    
    </contact-list>

					3)设计接口
					面向接口编程:
						联系人DAO类:集中编写联系人实体对象的CURD方法。(数据访问对象)
						规则: 一个实体对象对应一个dao接口和类
						interface ContactDao{
							public void addContact(Contact contact);
							public void updateContact(Contact contact);  包含修改的id
							public void deleteContact(String id);
							public List<Contact> findAll();
							public Contact findById(String id); 根据id查询对应的联系人  
						}
					4)设计系统目录(包)规范
						 |-contactSys_web    根目录
							|-src
								|-gz.itast.contactSys_web.entity     存放实体对象类
								|- gz.itast.contactSys_web.dao       存放dao接口和类
								|- gz.itast.contactSys_web.web       存放servlet类
								|- gz.itast.contactSys_web.util        存放工具类
								|- gz.itast.contactSys_web.exception    自定义异常类
							|-images    存放图片
							|-css       存放css文件
							|-js        存放js文件

	1.3 编程实现(开发攻城狮)
				1)搭建项目环境
						a)项目建立
						b)建立目录结构
						c)导入第三方的包
				2)开发步骤:从底层往上层开发
					a)“数据库" (设计xml)
					b)实体对象(建立实体对象)
					c) DAO接口和实现类
					d)页面+servlet(跟用户直接相关的)					

	1.4 功能测试(测试攻城狮)
	1.5 性能测试(测试攻城狮)
	1.6 部署上线(实施攻城狮)
	1.7 系统维护(实施攻城狮)
					
					
2 Jsp基础
		2.1 简介
		Jsp,全称 Java Server Page java服务页面,能提供java服务的页面

		jsp vs html
		html: 由html标签组成的,输出静态内容。
		jsp: 可以写html标签,还可以java代码。
		2.2 特点
			1)既可以写html代码,也可以写java代码
			2)jsp页面需要交给tomcat服务器运行!!!  
		2.3 Jsp运行的目录
		tomcat的work目录,这个目录下存放jsp页面运行过程中产生的临时文件。
		
		2.4 体验jsp页面如何编写和运行	
			向浏览器输出当前的系统时间
			如何访问jsp页面?
			直接通过浏览器访问即可!!(把当前html页面访问)
			
		2.5 Jsp页面如何被tomcat服务器运行
			第一次访问jsp:
				1)tomcat服务器把jsp页面翻译成java源文件。(01.hello.jsp  -》  _01_hello_jsp.java)
				2)tomcat服务器把java源文件编译成class文件。_01_hello_jsp.java -> _01_hello_jsp.class
				3)读取class文件,创建类对象。_01_hello_jsp
				4)执行类中的方法。_01_hello_jsp类的方法

			第n次访问jsp:
				4)执行类中的方法。_01_hello_jsp类的方法
				直接走第4个步骤

		注意
				修改了jsp页面时,重新走翻译和编译的过程。

		问题:运行的class类是什么类?
				public final class _01_hello_jsp extends org.apache.jasper.runtime.HttpJspBase

	public abstract class org.apache.jasper.runtime.HttpJspBase extends javax.servlet.http.HttpServlet implements javax.servlet.jsp.HttpJspPage {			
					
				我们的jsp的源文件是一个servlet!
				结论: jsp就是一个servlet!!!!

				servlet的技术可以用在jsp上。

				servlet的生命周期:
					构造方法:
					init方法:
					service方法
					destory方法
				jsp的生命周期
					翻译(java文件)
					编译(class文件)
					构造方法
					_jspInit方法
					_jspService方法
					_jspDestroy方法
				
3 Jsp语法
			3.1 Jsp模板
			Jsp页面的html代码就是模块
			3.2 Jsp表达式
			语法: <%=变量或表达式%>
			作用: 向浏览器输出变量的值或表达式技术的结构
			注意:			
				1)原理是使用out.print()方法向浏览器输出内容
			3.3 Jsp脚本
			语法:<% java语句  %>
			作用: 执行java语句
			原理: 脚本就是原封不动地翻译到java文件的_jspServcice方法中执行。
			3.4 Jsp声明
			语法:<%! 变量或方法   %>
			作用:用于声明变量或方法
			原理: 声明的变量是成员变量,声明的方法是成员方法
			注意:
				1)不要声明和翻译后的java文件相同的方法名
				2)jsp脚本不能声明方法
			3.5 Jsp注释
			语法: <%-- jsp注释 --%>
			作用: 注释jsp页面内容
			注意:
					html的注释会被翻译和执行,而jsp的注释不会被翻译和执行。
					
4 Jsp的三大指令
		语法: <%@ 指令  %>
		4.1 taglib指令
		暂时不学,在jsp标签时学习
		4.2 include指令
		作用:用于包含其他页面
		
<%--包含头部页面 --%>
  <%@ include file="/common/header.jsp"%>

 原理: 
		直接把包含与被包含页面的内容先合并在一起,然后翻译成一个java源文件,最后编译执行。(先合并再翻译)
				(源码包含,也叫做静态包含)
		4.3 page指令
		作用:告诉浏览器如何翻译jsp文件
		
<%@ page 
	language="java"    -- 使用什么语言来翻译jsp文件
	import="java.util.*" --导包。导入多个使用逗号
jsp文件的编码相关的:
	pageEncoding="utf-8" -- 使用什么编码翻译jsp文件
	contentType="text/html; charset=utf-8" --服务器发送给浏览器的数据类型和内容编码格式
异常页面相关的:
	errorPage="/common/error.jsp"  -- 指定jsp错误处理页面
	isErrorPage="true"  --指定当前页面为错误处理页面,如果是错误处理页面,就可以使用exception内置对象,使用exception对象可以查询错误信息。
配置全局的错误处理页面
      在web.xml文件中配置:
<!-- 配置全局的错误处理页面 -->
	

    <error-page>
    		<error-code>404</error-code>
    		<location>/common/404.html</location>
    	</error-page>
    	<error-page>
    		<error-code>500</error-code>
    		<location>/common/500.jsp</location>
    	</error-page>
    
    	session="true"  -- 是否打开session功能,true:打开,false:关闭
    	buffer="8kb" -- jsp页面的缓存区大小
    	isELIgnored="false" --是否忽略EL表达式。true:忽略。false:不忽略。
    	%>


5 Jsp的最佳实践	
		servlet技术: 使用java语言开发动态网页。功能:写java代码,输出html代码
		jsp技术: 使用java语言开发动态网页。功能:写java代码,输出html代码

		分工问题:
			servlet技术: 写java代码(写普通java类)
			jsp技术: 输出html代码(类似于html页面)

		项目中涉及的功能:
			1)接收参数信息    (servlet做)
			2)执行业务逻辑(CURD)  ( servlet做 )
			3)返回结果,输出结果  (jsp做)
			4)跳转页面            (servlet做)


		案例:
			显示用户信息
		1)查询用户数据(servlet)
				List<User>  list
			  把用户数据保存到域对象,发送到jsp页面

		2)显示用户数据	(jsp)

6 Jsp的内置对象
			6.1 简介
		在jsp开发有些对象使用频率比较高,(例如:requesst,respone,session,servletcontext。。。)如果每次要使用这些对象都自己去获取对象才能使用,会显示太麻烦了。jsp把这些对象都创建或获取好了,我们开发者之间使用这些对象即可!!!这些对象就叫做内置对象。

			6.2 9大内置对象
			jsp对象名       类型
			 request      HttpServletRequest   请求对象
			response      HttpServletResponse  响应对象   
			 config       ServletConfig        配置对象
			application    ServletContext      servlet上下文对象     
			session       HttpSession          会话对象
			exception     Throwable            异常信息对象
			page           Object      代表jsp文件翻译后的java类
			out           JspWriter     代表输出对象,response.getWriter() PrintWriter
									   相当于带缓存功能的PrintWriter
			pageContext   PageContext    代表jsp的上下文对象

   	6.3 out对象
		out对象的类型JspWriter类,相当于带缓存功能的PrintWriter类

	6.4 pageContext对象
		   作用:
			1)通过pageContext对象获取其他8个内置对象
					场景:使用自定义标签的时候
		
			2)作为域对象使用
				2.1 保存到page域
					  pageContet.setAttribute("name",Object);
				2.2 保存到其他域
						pageContext.setAttribute("name,Object,PageContext.PAGE_SCOPE)
						PAGE_SCOPE
						REQUEST_SCOPE
						SESSION_SCOPE
						APPLICATION_SCOPE
				2.3 获取page域
						pageContext.getAttribute("name")
				2.4 从其他域中获取
						pageContext.getAttribute("name,PageContext.PAGE_SCOPE)
						PAGE_SCOPE
						REQUEST_SCOPE
						SESSION_SCOPE
						APPLICATION_SCOPE
				2.5 自动搜索四个域数据
						pageContext.findAttribute("name")
7 jsp的四个域对象		
			  request域: HttpServletREquest
			 application域: ServletContext
			 session域: HttpSession
			 page域: PageContext
			7.1 域对象的作用
				共享数据,保存数据,获取数据
			7.2 域对象的方法
					setAttribute()
					getAttribute()
					removeAttribute()
			7.3 域的作用范围
			从小到大:
					page域: 在同一个jsp页面中数据有效!
					request域: 在同一个请求中数据有效的!
					session域: 在同一个会话中数据有效的!
					application域: 在同一个网站中数据有效的!
			
		
总结:
	jsp基础
		1)jsp执行原理(翻译+编译+servlet)
		2)  jsp语法				(jsp表达式+jsp脚本+jsp声明)
		3)jsp的三大指令(include指令+page指令)
		4)jsp的9个内置对象
			(out对象+pageContext对象)
		5)jsp的最佳实践
				servlet+jsp

day11_jsp基础

day11_jsp基础

day11_jsp基础

day11_jsp基础