Servlet/JSP
HTTP协议1.1
http1.0是短连接
http1.1是长连接
http://www.baidu.com/index.html
1.使用http协议
2.DNS(域名解析器)会把域名www.baidu.com解析为ip地址
156.132.123.11
3.通过端口,访问服务器上部署的应用程序。
4.服务器和浏览器会自动创建连接
5.服务器会把请求的内容发给浏览器,先发送文本
6.再次请求发送图片。
HTTP协议状态码
http请求的状态是通过一个状态码来标识的。404 500
客户端发送请求
服务器处理请求,返回响应
Java建立一个web应用程序。将应用程序部署到服务器上。
需要一个web服务器(应用程序)
Tomcat
MyEclipse 配置tomcat
点击window --> preferences --> 搜索Tomcat
Servlet
可以处理请求和返响应的Java类就叫做Serlvet
创建Servlet步骤:
1.创建一个java类,继承HttpServlet
2.重写doGet/doPost方法
3.在web.xml中配置Serlvet
Servlet生命周期
1.初始化过程
1)在第一次访问Servlet时候,web容器(Tomcat)会自动创建Servlet,初始 化的时候会调用init方法。只调用一次,Servlet是单例对象。也就是说一个Servlet 类只会产生一个Serlvet对象。在Servlet中除了共享信息,否则不要定义全局变量。
2)如果想要在web容器(Tomcat)启动的时候创建Servlet。
需要在web.xml中的<servlet></servlet>标签中配置:
随着标签中的数字顺序进行启动。
<load-on-startup>1</load-on-startup>
3)如果有参的init方法和无参的init方法同时存在,只执行有参的 方法。
2.请求响应过程
访问serlvet时,先调用service方法,service方法决定了调用doget还是dopost.
UserServlet?method=add
3.销毁过程
调用destroy方法.
1).web容器(Tomcat)关闭,Serlvet销毁
2)一段时间内没有访问,自动销毁
Get和post访问的区别
0.get方式会访问到Servlet的doGet方法,post方式会访问到doPost方法。
1.get方式是地址栏访问,a连接只能通过get方式访问。
2.get方式会在地址栏显示传递的参数,post不会在地址栏显示传递的参数
3.get方式会出现重复提交的问题。Post提交方式会提示是否重新提交。
4.get方式提交,地址栏的长度是有限制的。不能太长
5.上传只能使用post方式。
ServletConfig config
主要作用是读取Serlvet在web.xml中配置的初始化信息。
ServletContext application
JavaWeb应用程序也可以被看成一个对象,这个对象就是ServletContext接口产生的对象,它代表了整个web应用程序。 该对象随着web容器(Tomcat)的启动而产生,随着Tomcat的关闭销毁。
ServletContext 是java提供的接口,代表整个web应用程序,web容器(Tomcat)启动时,会提供了该接口的实现类并产生一个对象。
获取ServletContext 对象
1.通过ServletConfig获取
2.this.getServletContext获取。
作用:1.获取上下文和真实路径
2.读取配置的初始化信息
3.存储和获取属性值。通过setAttibute/ getAttibute 方法。
可以在web应用程序的内存中存储一些值。这些值通过name对应value的形式存储,可以通过name获取相对应的value。存储在application对象中。所有的用户都可以访问到。
对象 |
方法 |
范围 |
application |
setAttribute/getAttribute |
会以name-value的形式将信息存储在对象中。所有用户都可访问到。 |
session |
setAttribute/getAttribute |
当前用户都可以获取。 |
request |
setAttribute/getAttribute |
请求一次后销毁。可以将属性值转发到下一个页面或者servlet |
pageContext |
setAttribute/getAttribute |
只在当前页面有效 |
HttpServletRequest request 请求对象
服务器的功能是获取客户段的请求,返回响应。接收请求的对象就是request
所以,如果想要获取客户端的信息。那么就从request对象的方法找。
1.接收参数。(接收服务器传递的信息,1.表单 2.地址栏)注意复选框
2.设置编码。
3.获取请求头信息。
4.获取ip,端口,请求方法,请求的上下文路径等。
5.存储和获取属性值
6.转发(跳转到新的页面)
HttpServletResponse response
1.通过流生成动态页面
2.设置响应编码
3.设置头信息
每隔n秒刷新页面
response.setHeader("refresh", "3");
3秒后跳转到新的页面
response.setHeader("refresh", "3;URL=main.html");
设置状态码,重定向
response.setStatus(302);
response.setHeader("location", "main.html");
4.重定向,重新定向到一个新的页面。
跳转到新页面的方式有两种:
1.转发(服务器跳转)
地址栏没有发生变化,1次请求。可以获取到request范围的属性值
2.重定向(客户端跳转)
地址栏改变, 2次请求,没有获取request范围的属性值。
HttpSession session 服务器会话技术
仅适合于http协议,是http协议特有的。
Session是服务器和客户端建立连接后,服务器自动产生的。
其实就是服务器为每个访问服务器的浏览器开辟的单独的内存空间。
如何获取Session对象:
request.getSession();
Cookie 本地会话技术 (本地---服务器 请求 服务器---本地 响应)
由于是本地技术,所以并不是很安全。
获取Cookie。服务器创建session后,会将session的id以Cookie的形式发往客户端,每次请求时,会通过session的id来标识客户度。
当本地禁用Cookie之后,本地失去了唯一的标识,会造成每次访问都会产生一个新的session。导致用户的信息丢失。
购物车。购买物品的信息该存储到什么地方。
存储到session中。
如果本地禁用cookie,那么该怎么解决。
解决办法:重写URL地址。
乱码的处理:保证整个项目编码的统一。(UTF-8 | GBK)
乱码的产生是分阶段的。
Get方式提交需要服务器支持中文编码
在tomcat安装目录的conf目录下的server.xml中配置
过滤器:
1.创建一个类实现java.servlet.Filter接口
2.在web.xml中配置Filter
在进行多个操作之前,想要进行一些统一的动作,就可以使用过滤器
验证用户是否登录。
过滤方式:
1.过滤所有资源 <url-pattern>/*</url-pattern>
2.过滤某种类型文件 例如过滤html文件: <url-pattern>*.html</url-pattern>
3.同时过滤多个文件类型
4.过滤指定的serlvet <servlet-name>ServletTest</servlet-name>
或者 <url-pattern>/ServletTest02</url-pattern>
5.过滤指定文件 <url-pattern>/test.html</url-pattern>
监听器
在web中,主要功能是对ServletContext HttpSession HttpServletRequest进行监听。
对ServletContext进行监听
ServletContextListener 监听ServletContext对象的初始化和销毁
ServletContextAttributeListener
监听ServletContext的Attribute值。
对Session监听
HttpSessionListener 监听Session对象的初始化和销毁
HttpSessionAttributeListener
监听session的Attribute值。
对Request监听
ServletRequestListener
ServletRequestAttrbuteListener
购物车 Session
数据库 table cart
class Person{ ---描述人
}
Person.class ----> Class
人 ---- Person类
Person.class ---- Class类
.class
构造方法 成员变量 成员方法 注解 实现的接口,继承的类,泛型信息。
反射
获取构造方法
获取方法 方法名称 ,方法参数
JSP (Java Server Page)
在html中嵌入java代码和程序段,形成以.jsp为后缀的文件。
Jsp如何嵌入java代码。
三种形式:
1.<% %> 可以定义局部变量,编写语句。
2.<%! %> 可以定义全局变量,常量,方法,类。
3.<%= %> 页面输出
JSP中有9个内置对象。
JSP Page指令<%@page %>
JSP包含指令 <%@include file=”” %>
静态包含:不能有动态数据。
动态包含:
Jsp标签:
<jsp:include page="body.jsp">
<jsp:param value="admin1" name="username"/>
</jsp:include>
跳转标签
<jsp:forward page="toForward.jsp">
<jsp:param value="zs" name="username"/>
</jsp:forward>
EL表达式
Expression Language
为了简化JSP代码
语法:${对象}
EL表达式可以获取不同范围的属性值,如果属性值的key相同,那么EL表达式会从最小的范围获取。会按照:
pageContext request session application 的范围以此获得。
如果想要指定范围,那么就需要用到EL表达式的内置对象。
EL的功能:
1.获取不同范围( pageContext request session application )的属性值
指定范围获取属性值:内置对象:
pageScope 获取当前页面的属性值
requestScope获取request范围的属性值
sessionScope 获取session的属性值
applicationScope 获取application的属性值
2.接收参数:接收请求的URL参数。
内置对象:
param 获取请求的参数,对应 request.getParameter("");
paramValues 获取复选框参数,对应request.getParameterValues("");
3.解析对象
通过 ${对象.属性}方式回去属性的值。
内置对象:pageContext 代表javax.servlet.jsp.PageContext对象。
4.获取头信息
内置对象 header 对应:request.getHeader();
5.获取cookie
内置对象cookie 对应:request.getCookies();
6.获取初始化参数
内置对象:initParam 对应:ServletContext.getInitParamter();
7.EL表达式支持运算符。