Web应用程序:通过Web访问的应用程序,如淘宝网等。
JavaWeb基础与JSP
软件开发三大方向:
- 桌面应用程序:QQ、Office等
- Web应用程序:淘宝、京东等
- 嵌入式应用程序:安卓、iPhone上的应用程序等
JavaWeb开发属于Java EE方向。
JSP:Java Server Pages,Java服务器端页面,一个简化的Servlet设计,实现了在Java中使用HTML标签。JSP本质上是一种动态网页技术标准,属于Java EE标准。JSP与Servlet一样,也是在服务器端执行的。
静态网页:网页中内容固定,不会更新。需要HTML、CSS等技术即可。
动态网页:网页中内容通过程序动态显示,自动更新。需要HTML、CSS、数据库、一门高级语言(Java、C#、PHP)、客户端脚本知识JavaScript、XML等技术。
主流的动态网页脚本技术:
- JSP:Java平台,安全性高、跨平台性好,适于开发大型的、企业级的、分布式的Web应用程序。如分布式计算框架Hadoop等。
- Asp.net:微软的.net平台,简单易学,但安全性和跨平台性差。
- PHP:简单高效,成本低,开发周期短,适合中小型企业的Web应用开发。常用组合LAMP:Linux + Apache(阿帕奇服务器) + MySQL + PHP。
动态网页的动态指的是能与用户进行交互,如登录时输入正确的用户名与密码,系统会提示登录成功。
Tomcat
Tomcat服务器:
- Apache Jakarta的开源项目
- 常见的JavaWeb容器,能解析HTML、CSS、JavaScript等常见的标签语言。
- JSP、Servlet的容器
Tomcat的目录结构:
WEB-INF目录结构:
- WEB-INF是Java的WEB应用的安全目录。即客户端无法访问,只有服务端可以访问的目录。
- web.xml为项目部署文件。
- classes文件夹用于放置*.class文件。
- lib文件夹用于存放需要的jar包。
JSP页面组成部分
JSP指令
page:位于JSP页面顶端,同样页面可以有多个page指令
ISO-8859-1不支持中文,建议换成UTF-8
include:将一个外部文件嵌入到当前JSP文件中,同时解析这个页面中的JSP语句。
taglib:使用标签库定义新的自定义标签,在JSP页面中启用定制行为。
JSP注释
客户端可见意思是查看网页源代码时可以看到。
JSP脚本注释客户端不可见。
JSP脚本
在JSP页面中执行Java代码。
<% java 代码 %>
JSP声明
在JSP页面中定义变量或方法。
<%! java代码 %>
JSP表达式
在JSP界面中执行的表达式
<%= java表达式 %>
不能以分号结尾。
JSP页面的生命周期
第一次请求一个JSP页面时,首先被执行的是静态方法。
jspService()方法被调用来处理客户端的请求。对每一个请求,JSP引擎创建一个新的线程来处理该请求。JSP与Servlet始终驻于内存,故响应时间快。
JSP页面内容发生改变后,需要重新编译。
JSP九大内置对象
JSP内置对象是Web容器创建的一组对象,不使用new关键字就可以使用。
Web程序的请求响应模式
- 用户发送HTTP请求。(request)
- 服务器给用户HTTP响应。(respose)
缓冲区:Buffer,内存中一块用来保存临时数据的区域。
表单有两种提交方式
表单:
1 | <form name = "regForm" action = "动作" method = "提交方式"></form> |
- get:以明文方式通过URL提交数据,数据在URL中可以看到,最多不超过2KB,安全性低效率高,适合提交数据量小且对安全性要求不高的数据,如搜索、查询等功能。
- post:将用户提交的信息封装在HTML HEADER内,适合提交数量大、安全性高的用户信息,如注册、修改、上传等。
请求重定向与请求转发
- 请求重定向:客户端行为,response.sendRedirect(java.lang.String location),括号内为要重定向的地址。从本质上来看等同于两次请求,前一次请求对象并不会被保存,地址栏的URL地址会改变。
- 请求转发:服务器行为,request.getRequestDispatcher(java.lang.String location).forward(request,response),括号内为要转发的地址。从本质上来看是一次请求,转发后请求对象会被保存,地址栏的URL地址不会改变。
超链接相当于请求重定向。
out
JspWriter类的实例,向客户端输出内容的常用对象。
clear()若抛出异常,则程序立即终止运行,后面的语句不会执行。clearBuffer()不会抛出异常,后面的语句依旧执行。
request
HttpServletRequest类的实例,客户端的请求信息被封装在request对象中,通过它才能了解客户的请求,然后做出相应。request对象具有请求域,即完成客户端的请求之前该对象一直有效。
response
response对象包含了响应客户请求的有关信息,但在JSP中很少直接使用它。它是HttpServletResponse类的实例。response对象具有页面作用域,即访问一个页面时该页面内的response对象只能对这次访问有效,其它页面的response对象对当前页面无效。
PrintWriter对象的输出总是提前于内置out对象。
可以用out.flush()强制out对象的输出在PrintWriter对象的前面。
session
HttpSession类的实例,表示客户端与服务器的一次会话。Web中的session指的是用户在浏览某个网站时,从进入网站到浏览器关闭所经过的这段时间,也就是用户浏览这个网站所花费的时间。特定的时间概念
在服务器的内存中保存着不同用户的session,每个用户都有不同的session。
session对象在第一个JSP页面被装载时自动创建,完成后会活期管理。
从一个客户打开浏览器并连接到服务器开始,到客户关闭浏览器离开这个服务器结束,被称为一个会话。
当一个客户访问一个服务器时,可能会在服务器几个页面间切换,服务器用session对象知道这是一个客户。
session对象的生命周期:
创建:当客户端第一次访问某个JSP或Servlet时,服务器会为当前会话创建一个session ID,每次客户端向服务器端发送请求时,都会将此session ID携带过去,服务端会对此session ID进行校验。
活动:
- 某次会话当中通过超链接打开的新页面属于同一次会话。
- 只要当前会话页面没有全部关闭,重新打开新的浏览器窗口访问同一项目是属于同一次会话。
- 除非本次会话的所有页面都关闭后再重新访问,某个JSP或Servlet将会创建新的会话。原有会话还存在,旧的session ID仍存在于服务器端,只不过再也没有客户端会携带它然后交给服务器端校验。
销毁(只有三种方式):
- 调用了session.invalidate()方法
- session过期(超时)默认为30分钟
- 服务器重新启动
设置超时时间的方式:
session.setMaxInactiveInternal(…) 单位为s
在web.xml中配置
1
2
3
4
5
6
7
8
9<session-config>
<session-timeout>
10
<session-timeout>
<session-config>
单位为min。
application
- 实现了用户间数据的共享,可存放全局变量
- 开始于服务器启动,终止于服务器关闭
- 在用户的前后连接或不同的用户间的连接中,可以对application对象的同一属性进行操作。
- 在任何地方对application对象属性的操作,都会影响到其他用户对它的访问。
- ServletContext类的实例。