JAVA遇上HTML-----JSP 篇基本概念
Java Web简介
1.什么是WEB应用程序:
Web应用程序是一种可以通过Web访问的应用程序。Web应用程序的一个最大好处是用户很容易访问应用程序。用户只需要有浏览器即可,不需要再安装其他软件。
Web应用程序开发,是目前软件开发领域的三大方向之一。
软件开发领域:
1、桌面应用程序(C/S架构)
2、Web应用程序(B/S架构)
3、嵌入式应用程序(移动开发等)
2.静态网页和动态网页:
静态网页
表现形式:网页中的内容是固定的,不会更新
所需技术:HTML,CSS
动态网页
表现形式:网页中的内容通过程序动态显示,自动更新,学习制作动态网页。
所需技术:HTML,CSS,数据库技术,至少一门高级语言(JAVA,C#,PHP),JavaScript,XML等。主流的动态网页脚本技术(JSP/ASP.NET/PHP)
3.Tomcat安装步骤:
1、解压Tomcat安装包到指定目录
2、配置Tomcat环境变量
变量名:CATALINA_HOME 变量值:Tomcat根目录即解压目录
3、运行startup.bat 不要关闭这个窗口
4、打开浏览器测试 http://localhost:8080/
4.Tomcat服务器的目录结构:
/bin 存放各种平台下用于启动和停止Tomcat的命令文件
/config 存放Tomcat服务器的各种配置文件
/lib 存放Tomcat服务器所需的各种JAR文件
/logs 存放Tomcat的日志文件
/temp Tomcat运行时用于存放临时文件
/webapps 当发布Web应用时,默认会将Web应用的文件发布到于此目录中
/work Tomcat把由JSP生成的Servlet放于此目录下
5.WEB-INF目录详解:
WEB-INF是java的web应用的安全目录。所谓安全就是客户端无法访问,只有服务端可以访问的目录。
如何让hah.jsp成为欢迎界面?
在web-inf文件夹中配置项目部署文件web.xml。
添加标签
<welcome-file-list>
<welcome-file>/hah.jsp</welcome-file>
<welcome-file-list>
修改完web.xml,需要重启Tomcat
6.myeclipse配置jre:
window->preferences->java->installed jre->add->java(jdk的安装目录)
myeclipse集成tomcat:
window->preferences->myeclipse->servers->tomcat->选版本->选enable(并引入tomcat的安装根目录)->在版本下选择jdk
7.修改tomcat默认端口号:
tomcat > conf > server.xml 文件中找到下面代码
<Connector port="8080" Protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443"
/>
JSP基础语法
1.Jsp简介
1、JSP:Java Server Pages,其根本是一个简化的Servlet设计,它实现了在Java中使用HTML标签。
2、Jsp是一种动态网页技术标准,也是JEE标准
3、Jsp与Servlet一样,是在服务器端执行的。
4.jsp 页面元素构成:
[静态内容,指令,表达式,小脚本,声明,注释]
2.常见动态网站开发技术对比:
JSP 基于java平台 跨平台,安全高,适于企业级web
Asp.net 简单易学 安全性差 跨平台性差
php 简单 高效 成本低 开发周期短 适合中小型企业web应用开发
3.Jsp指令:
1、page指令:通常位置jsp页面顶端,同一个页面可以有多个
(1)语法格式:<%@ page 属性1="属性值" 属性2="属性值1,属性值2"...属性n="属性n"(键值对)%>
(2)常用属性
• language 指定JSP页面使用的脚本语言 默认值为java
• import 通过该属性来引用脚本语言中使用的类文件 默认值为无
• contentType 用来指定JSP页面所采用的编码方式 默认值为text/html,ISO-885901
如:<%@ page language="java" import="java.util.*" contentType="text/html; charset=utf-8"%>
2、include指令:将外部文件嵌入当前文件,同时解析这个页面的JSP语句,是包含指令
3、taglib指令:使用标签库定义新的自定义标签,在JSP页面中启用制定行为
4.jsp 注释:
<!-- html注释 --> //客户端可见
<%-- jsp注释 --> //客户端不可见
jsp脚本中使用java注释
//单行注释 //客户端不可见
/**/多行注释 //客户端不可见
5.JSP脚本:
在JSP页面中执行的java代码。语法:<%Java 代码%>
6.JSP声明:
1、指在JSP页面中中定义变量或者方法
2、语法:<%! java代码 %>
7.jsp表达式:
<% = 表达式 %>中不以分号结束
调用声明的变量或函数
8.生命周期:
1、生成字节码文件,执行jspInit()只在第一次请求时执行,重复请求仅只执行一次。生成的文件在work里,【每次修改会重新编译,生成新的字节码文件】
2、jspService()用于处理用户请求,对于每一个请求,JSP引擎会创建一个新的线程来处理该请求【JSP多线程:降低资源需求,提高系统并发量及响应时间,但注意同步问题】。
3、由于该Servlet常驻于内存里,所以响应速度非常快。
JSP内置对象
1.内置对象简介:
1、JSP内置对象是Web容器创建的一组对象,【不使用new关键字】就可以使用的内置对象。例如:out
2、JSP九大内置对象:
out(输出),request(请求),response(响应),session(回话),application(应用)(五大常用对象)
Page,pageContext,exception.config(四个不太常用对象)
2.out对象:
1、void printLn() 向客户端打印字符串;
2、void clear() 清除缓冲区内容,如果在flush之后调用会抛出异常。
3、void clearBuffer() 清除缓冲区内容,如果在flush之后调用不会抛出异常。
4、void flush() 将缓冲区内容输出到客户端。
5、int getBufferSize() 返回缓冲区以字节数大小,如不设缓冲区则为0.
6、int getRemaining() 返回缓冲区还剩余多少可用
7、boolean is AutoFlush() 返回缓冲区满时,是自动清空还是抛出异常
8、void close() 关闭输出流。
【out.flush();
out.clear();
这样会产生异常
】
3.提交表单get与post区别:
1.get:以【明文】方式,通过URL提交数据,数据在URL中【可以看到】。提交数据最多不超过【2KB】。安全性较低,但效率比post方式高。适合提交数据量不大,且安全要求不高的数据:比如:搜索、查询等功能。
2.post:将用户提交的信息封装在HTML HEADER内。适合提交数据量大,安全性高的用户信息。如:注册、修改、上传等功能。
4.Request对象
解决提交参数乱码,不能URL中文乱码
request.setCharacterEncoding="utf-8"
5.Response对象
PrintWriter比out对象先打印。调用out.flush()可以解决
PrintWriter outer=response.getWriter();
6.请求转发与请求重定向的区别:
一、请求重定向:服务端responce.sendRedirect("xx.jsp")重定向。【客户端行为】:即客户端会访问两次,第一次访问后会立即跳转到第二个重定向页面上,【从本质上讲等于两次请求】,而前一次的请求封装的request对象不会保存,地址栏的URL地址会改变。
二、请求转发:服务端request.getRequestDispatcher("xx.jsp").forward(request,response)请求转发。forward(request,response)用于保存内置对象request和response。【服务器行为】:服务器会代替客户端去访问转发页面,【从本质是一次请求】,转发后请求对象会保存,地址栏的URL地址不会改变。
7.session对象
一、什么是session
1、session表示客户端与服务器的一次会话
2、Web中的session指:用户在浏览某个网站时,从进入网站到浏览器关闭所经过的这段时间,也就是用户浏览网站所花费的时间。
3、从上述定义中可以看到,session实际是一个【特定的时间概念】
4、服务器的内存中,保存着同用户的session。
session存在于服务器端,并且每一个用户对应一个session;
(1)session是JSP的一个内置对象,是HttpSession类的实例。
(2)从客户打开浏览器并连接到服务器开始,到客户关闭浏览器窗口断开与服务器的连接,这一过程成为一个会话。
(3)当客户在同一个网站的不同页面之间进行切换并访问时,服务器是通过session来判断这些请求是否来自同一个客户。
(4)session一般有时间限制,长时间不操作可能会导致session失效。session失效后原session中保存的属性值会全部丢失。
(5)setMaxInactiveInterval(int i) 该方法可直接设定session的生存时间,超过该时间session会重新创建。(单位:秒)
session的常用方法如图。在获取创建时间时,可通过以下格式类获取标准格式的时间:
SimpleDateFormat sdf = new SimpleDateFormat(yyyy年MM月dd日 HH:mm:ss);
Date d = new Date(session.getCreationTime());
sdf.format(d);
session的生命周期 活动:
某次会话当中通过超链接打开的新页面属于同一次会话
只要当前会话页面没有全部关闭,重新打开新的浏览器窗口访问同意项目资源时属于同一次会话。
除非本次会话的所有页面都关闭后再重新访问某个新的jsp或者servlet将会创建新的会话。
注意事项:
注意原有的会话还存在,只是这个旧的sessionId仍然存在于服务器端,只不过再也没有客户端会携带它然后交予服务器端校验
session销毁的三种方式:
1:调用session.invalidate()方法
2:session过期(超时)
3;服务器重新启动
设置session超时的两种方式:
tomcat默认session超时时间为30分钟
1:session.setMaxInactiveInterval(时间);//单位是秒
2:在web.xml配置
<session-config>
<session-timeout>
10
<session-timeout>
<session-config> //单位是分钟
8.application对象
application介绍:
1、实现了用户间数据的共享,可存放全局变量。(类似静态对象)
2、开始于服务器启动,终止于服务器的关闭(生命周期)
3、在用户的前后连接或不同用户之间的连接中,可以对application对象的同一属性进行操作
4、在任何地方对application对象属性进行操作,都将影响到其他用户对此的访问
5、application对象是ServletContext类的实例
9.page对象
一、page对象:是指指向当前JSP页面本身,有点像类中的this指针,它是java.long.Object类的实例。
二、常用方法如下:主要是Object类中声明的方法
10.pageContext对象
1、pageContext对象提供了对JSP页面内【所有】的对象及名字空间的访问。【权限很高】
2、可以访问到本页所在的session,也可以取本页面所在的application的某一属性值
3、简单说,pageContext对象相当于页面中所有功能的集大成者
4、pageContext对象的本类名也叫pageContext
二、常用方法如下:forward("xxx.jsp")进行跳转,include("yyy.jsp");会在页面中包含yyy.jsp页面
11.config对象
ServletContext getServletContext()返回含有服务器相关信息的ServletContext对象
String getInitParameter(String name)返回初始化参数的值
Enumeration getInitParameterNames()返回Servlet初始化所需所有参数的枚举
12.Exception对象
一、Exception对象:实际上是java.lang.Throwable的对象
二、使用方法:
1、在可能会抛出异常的页面page指令里,设置errorPage="xxx.jsp",表示出现异常将抛给xxx页面去处理
2、在xxx页面里,要使用Exception对象,需要把page指令里的isErrorPage属性设置为true。
三、常用方法:getMessage()和toString()方法
Javabean
1.什么是javabean:
1、Javabeans就是符合某种特定规范Java类。使用Javabeans的好处是【解决代码的重复编写】,减少代码冗余,功能区分明确,提高代码的维护性。
2、设计原则四点:公有类,属性私有,包含无参的共有构造方法,getter和setter方法封装属性
2.什么是JSP动作元素:
什么是JSP动作元素:
(1)JSP动作元素为请求处理阶段提供信息。
(2)动作元素遵循XML元素的语法。有一个包含元素名的开始标签,可以有属性、可选内容,以及结束标签。
JSP动作分为以下几类:
3.普通方式应用Javabean:
一、像使用普通java类一样
1、创建一个web project项目。
2、在src文件下,创建一个包,在包中创建一个类,满足设计原则即可
3、在index.jsp页面中通过import导入之前创建的类(import="包名.类名")
4、通过使用new创建Javabean实例(创建对象)
5、使用set方法赋值
6、使用get方法取值
4.UseBean动作元素:
<jsp:useBean id="标识符(类似于Java中的变量名)" class="java类名(需要将包名一同写入)" scope="作用范围(默认是page)">
5.<jsp:setProperty>动作:
给【已经实例化的Javabean对象的属性赋值】,一共有四种形式。
1、需要表单提交属性:<jsp:setProperty name="Javabean实例名" property="*"/>: 与之前页面提交的表单的【所有属性进行匹配】,若有与javabean类属性名相同的,则进行赋值。比如表坛提交了username="xxx",而javabean里有username属性,则对其进行赋值
2、需要表单提交属性<jsp:setPropery name="Javabean实例名" property="javabean属性名" />:对【指定的属性进行匹配】
3、手动设置属性:<jsp:setProperty name = "Javabean实例名" property="Javabean属性名" value="BeanValue" />
4、与request参数有关,通过url传参 :<jsp:setProperty name="Javabean实例名" property="propertyName" param="request对象中的参数名" />
6.<jsp:getProperty>动作:
作用:获取指定javabean对象的属性值。
〈jsp:getProperty name="javabean实例名" property="javabean属性名"〉
7.JavaBean 4种作用域范围 :
分别为page、request、session、application,它们通过<jsp:useBean>标签的scope属性进行设置。这4种范围虽然存在很大的区别,但它们与JSP页面中的page、request、session、application范围相对应。
page范围:与当前页面相对应,JavaBean的生命周期存在于一个页面之中,当页面关闭时JavaBean被销毁。
request范围:与JSP的request生命周期相对应,JavaBean的生命周期存在于request对象之中,当request对象销毁时JavaBean也被销毁。
session范围:与JSP的session生命周期相对应,JavaBean的生命周期存在于session会话之中,当session超时或会话结束时JavaBean被销毁。
application范围:与JSP的application生命周期相对应,在各个用户与服务器之间共享,只有当服务器关闭时JavaBean才被销毁。
这4种作用范围与JavaBean的生命周期是息息相关的,当JavaBean被创建后,通过<jsp:setProperty>标签与<jsp:getProperty>标签调用时,将会按照page、request、session和application的顺序来查找这个JavaBean实例,直至找到一个实例对象为止,如果在这4个范围内都找不到JavaBean实例,则抛出异常。
8.Model1
Model1分为三层:
1.界面层:由JSP页面进行与客户端浏览器的交互,可以直接调用JavaBeans
2.业务逻辑层:由JavaBeans进行处理业务逻辑,封装数据,并与数据库层进行交互
3.数据库层:底层数据库,可被javaBeans访问
避免了JSP页面直接进行业务逻辑处理所带来的维护性,扩展性差的弱点.体现了分层设计的思想
JSP状态管理
1.一、http协议的无状态性
1、无状态是指,当浏览器发送请求给服务器的时候,服务器会响应。但当同一个浏览器再次发送请求时,服务器不会知道是刚才那个浏览器。
2、简单说,服务器【不会保存用户状态】,不会记得客户端是否访问过,所以这就是无状态协议
2.Cookie的作用:
1.保存用户对象的追踪;
2.保存用户网页浏览记录与习惯;
3.简化登录;
4.容易泄露用户信息;
3.创建与使用Cookie
一、创建与使用
1、创建Cookie: Cookie newCookie = new Cookie(String key,String value);
2、写入Cookie: response.addCookie(newCookie);
3、读取Cookie: Cookie[] cookie = request.getCookies();
二、常用方法如图
4.Session与Cookie对比
1、保存位置:session在服务器端内存,cookie在客户端文本
2、保存对象:session保存Object类,cookie保存String
3、生存权:session会话结束即销毁,cookie可以长期保存在客户端
4、重要性:session安全性更高,保存重要信息,cookie保存不重要的信息
JSP指令与动作元素
常用的有page、include、taglib指令这三种指令;
page:位于页面顶端,一个页面可以包含多个page指令
include:将一个外部文件嵌入jsp中,同时解析这个页面中的jsp语句。
taglib:使用标签库,自定义新的标签,在jsp中启动定制行为。
1.include指令动作
指令语法 <% include file="地址"%>。
案例:显示当前时间的页面。(1)写一个只输出时间的方法的date.jsp。(2)用于显示的页面,包含<% include file="date.jsp"%>
include动作标签语法:<jsp:include page="URL要包含的页面" flush="true|false"/>
2.include指令和动作的区别
1、包含内容: 指令包含的是【源代码】,动作包含的是页面输出的【结果】
2、生成的servlet:指令会生成一个整体的Servlet;而动作会分别生成两个,即在一个Servlet中调用另一个Servlet
3、其他区别如图:
4、【使用场合】:页面内容不经常变化使用include指令,页面内容经常变化使用<jsp:include>动作
3.forward动作
1、语法:<jsp:forward page="URL"/>
2、等于服务器内部转发指令 request.getRequestDispacher("URL").forward(req,res);
4.param动作
1、语法:<jsp:param name="参数名" value="参数值">
2、【常常与<jsp:forward></jsp:forward>一起使用】,并作为其【子标签】。
3、用于传递新参数或者【修改原有参数值】,修改参数时使用form表单里的参数名称即可。同样用request.getParameter("参数名")获取