1.Servlet
1.1servlet介绍
servlet是sun公司制定的一种用于扩展web服务器的功能的组件规范。
1.2servlet作用
web服务器通常只能处于静态的资源(html,css,js.....),为了解决动态的处理数据就需要对web服务器的功能进行扩展,servlet就是用于处理动态数组的组件规范。
1.3servlet规范
使用servlet的时候,自定义类继承HttpServlet方法,那么就符合servlet规范
1.4servlet的开发步骤
新建的工程是一个java web项目(maven中的web app)
servlet类,继承HttpServlet
重写service方法
service(HttpServletRequest request , HttpServletResponse response)
request:请求
response:响应
java web工程中的web.xml文件
web.xml文件名字不能修改。
将java类和浏览器访问的地址做一个映射(mapping)
浏览器没办法直接访问java类中的方法,所以需要对java类映射为一个浏览器能够访问url地址
打包(idea帮助完成)
把web项目运行需要的文件按指定的文件结构保存
部署(在idea中可以完成)
把打包好的web程序放到tomacat的过程,就称为部署
启动容器
容器启动之后,就可以通过浏览器,访问这个java web项目了
1.5servlet的生命周期
初始化(init):执行一次(设置容器启动的时候,servlet第一个被访问的时候)
service:每次请求,都会执行service(doGet,doPost)
容器关闭(destroy):执行一次
1.6servlet中数据可以存储的区域
servlet的service方法中的变量
request对象:可以通过转发的方式,把数据转发到其他的请求中
session对象:可以让一个用户在会话期间,直接使用session中的数据
servletContext对象:可以所有请求在容器运行期间,直接使用servletcontext中的数据
2.http协议
2.1通信方式
建立连接——发送请求(请求数据包)——发送响应(响应数据包)——断开连接
2.2数据包格式
请求数据包
响应数据包
2.3请求方式
get方式:数据请求参数在url地址后显示、数据量比较小、不安全、不支持文件上传、
使用:1.浏览器直接输地址2.form的method设置为get3.超链接4.异步请求的时候设置为get
post方式:数据放在消息体中、数据量大、相对安全、支持文件上传
使用:1.form的method设置为post2.异步请求设置为post
3.jsp
1.1jsp介绍
jsp是sun公司制定的一种用于服务器端的动态页面的技术规范,也是一种组件,依赖于容器(tomact)
进行运行
1.2jsp和servlet
jsp不需要在web.xml中进行配置,直接通过它的路径和文件名进行访问
jsp是一种运行在服务器端的页面,它里面可以包含html,嵌入一些java代码,通过在tomcat容器中经过解析,输出为html页面
servlet:数据的处理和数据的展示
servlet+jsp:servlet做数据处理,jsp做数据的展示
servlet做数据展示的时候,不方便(编写代码的时候,维护代码的时候)
jsp:让数据的处理和数据的展示进行分离(解耦)
1.3的运行
jsp的本质就是servlet
第一次访问一个jsp页面的时候,会将jsp页面,转换为一个servlet类
html,js,css这种内容就直接使用输出语句拼接
其他和java相关的内容,就按java的语法规则转换
1.4jsp的内置对象
4.转发和重定向
4.1转发
一个请求完成部分功能,希望剩下的功能由另一个请求完成,这种时候使用转发。
一般使用servlet完成数据处理,转发到jsp页面,实现数据的展示。转发可以
通过request对象,把数据转发给另一个请求转发的本质就是一个请求,因为request对
象不变(可以共享request中的数据)。转发之后,浏览器地址栏显示的是第一个请求地址。
4.2重定向
某个请求完成之后,希望浏览器自动发起另一个请求,则使用重定向。
使用重定向的时候,浏览器消息头中收到一个302状态码和url地址。浏览器根据这个状态码和url地址,自动发起请求。重定向是完全不同的两个请求,是两个request对象,两个请求的数据无法共享。浏览器地址显示的是第二个请求的地址
5.状态管理
状态(数据),管理(数据存储):浏览器和服务器的多次交互作为一个整体,这个过程中有一些需要使用的数据,这些数据(状态)需要保存起来,用于表示某种状态。
客户端状态管理:cookie技术,把数据保存在浏览器中,就是客户端的状态管理。
服务器端状态管理:session技术,把数据保存在服务器的session对象中,就是服务器的状态管理。
6.cookie
6.1cookie的使用
服务器端创建cookie对象,在添加到浏览器中。
浏览器保存响应结果中邀请你需要add的cookie对象,每个cookie和自己的请求的域名一致
浏览器每次给服务器发请求的时候,会将请求对应的域名中保存的cookie数据,一起发送到服务器。
服务器通过request获取cookie对象数据,根据cookie的name,找到value值,进行使用value
6.2cookie的有效期
setMaxAge(负数)
setMaxAge(正数):有效期就是当前时间+正数的秒数
setMaxAge(0)立即失效,表示cookie过期了
没有调用setMaxAge 或者 setMaxAge(负数):表示会话期间有效。浏览器关闭,cookie失效了。默认设置。
会话期间:浏览器第一次访问某个服务器,到浏览器关闭的期间,称为一个会话。
6.3cookie的特点
用户可以删除cookie
用户可以禁止使用cookie
存储小于4k的内容
cookie的个数不能超过300个
只能存字符串
cookie不安全
7.session
7.1session的使用
状态管理
cookie:客户端状态管理技术
session:服务器端状态管理技术
session对象的获取
session对象的获取,和请求中从浏览器中传输到服务器的cookie(JSESSION)有关系
根据JSESSIONID这个cookie,去查找当前请求对应的session对象
8.Filter
8.1Filter介绍
sun公司提供的一种特殊的组件规范,主要用于拦截容器的调用过程。
规范:实现Filter接口(实现doFilter方法)
特殊:过滤器不能单独使用 ,需要和servlet进行配合使用
容器:一个特殊的软件,可以运行组件
支持多个Filter,以在web.xml中的配置的顺序进行过滤。
8.2Filter生命周期
实例化(调用构造函数)--1次
初始化(调用init函数)--1次
就绪(调用doFilter函数)--任意次
销毁(调用destory函数)--1次
9.EL表达式
el表达式,主要用于替换掉<%=xx%>输出语句
在jsp页面中,可以直接通过el表达式,,获取到存储在pageContext,request,session,application中的数据
语法规则
${对象} [<%=xx%>]
${对象.属性名}[<%=xx.getxxx()%>]
对象符合java bean的规范()描述类的属性私有化,提供公开的get/set方法。比如属性名abc,对应的方法叫getAbc/setAbc)
${对象。属性名},这里的本质是调用属性名对应的get方法。
el表达式的查找数据方式
从pageContext,request,session,application等对象中,查找需要输出的对象
pageContext,request,session,application如果出现同名key,那么查找按小范围优先得原则查找
可以通过pageScope,requestScope,sessionScope,applicationScope指定查找范围
el表达式可以做运算
条件运算、数学运算、逻辑运算、empty运算
el表达式的输出结果
如果没有这个key,输出是空字符串
如果有这个key,但是key对应的value值是null,输出的是空字符串
其他情况,输出的是key对应的value值。
10.jstl:jsp标签
jstl标签,用于替换掉jsp页面上的<%java代码%>
jsp页面上,如果有太多的java代码,修改,维护,前端人员都不友好。
10.1常用的标签
c:if --判断
c:choose --if...else
c:forEach ...循环
11.错题
用什么方式在jsp页面上,包含另一个jsp页面
<%@ include file="head.jsp"%>
怎么配置context级别的初始参数,怎么配置单独每个servlet中使用的参数
<context-param>
<param-name>key</param-name>
<param-value>hello world!</param-value>
</context-param>
<servlet>
<servlet-name>book</servlet-name>
<servlet-class>action.BookInfoServlet</servlet-class>
</servlet>
总结:
刚开始思路不够清晰,没有弄懂,后面一直练习,思路基本清晰了,自己可以调试相应的问题,在考试上,发现自己有很多知识点没有掌握到,还有一点是,自己知道的没有完全写上去,其实可以像老师说的,应该把内容写的详细一点,还有把考试空着的题,我总结在上面了,这是我考试动不起笔的题。