前言
servlet是用于开发web后端程序的一种java技术实现,利用servlet编写的程序通过服务器部署之后,可以处理浏览器发送的HTTP请求,也就是B/S模型,请求的响应和处理是由服务器完成的,压力都分担在服务器上。
一、Servlet
Servlet的生命周期
ServletConfig
在GenericServlet中的init方法中初始化,也就是每一个Servlet都有一个ServletConfig,见名知意,就是servlet的配置信息,可以获取到上下文对象,以及servlet的名称和初始化时的参数信息(参数信息可在web.xml的servlet中init-params设置)
声明周期
在浏览器第一次请求这个servlet是创建,只会创建一个对象,也可以在servlet中设置在程序启动时创建
Servlet中常用类
HttpServletRequest(请求对象)
可以获取到服务器发送的HTTP请求协议中的相关数据
getParameter()
getparamteters();
getMethod();
getUrl/Uri()
getHeader();
getSession();
getServletContext();
getRequestDispatcher("").forward(request,response);请求转发
HttpServletResponse(响应对象)
将请求处理好之后的结果返回给浏览器显示
getWriter();获取IO写入数据
setCookie();返回cookie
sendRedirect();重定向
Filter(过滤器)
判断用户是否登录,是否具有权限
修改字符编码
使用ThradLocal存储一个Connection数据,用来保证当前线程中所有的sql语句都是使用的同一个Connection,这样在过滤器调用完成时或者出错时,在doFileter方法中获取Connection进行提交或者回滚
Listener(监听器)
监听域对象的声明周期,以及属性的增删改查监听
请求对象和响应对象的声明周期
Servlet中的域对象
ServletContext
全局的,程序启动时初始化
HttpServletRequst
存在一次会话中
HttpSession
会话域对象,设置存活时间
Cookie(不算的,是存在在浏览器端的,但是也可以存储数据)
Servlet中请求跳转
请求转发
只能访问当前项目中的文件信息
可以访问WEB-INF中的隐藏文件
共享一个request对象
发生在服务器内部,浏览器只会条件一次请求
重定向
浏览器不停向服务器发送请求
减少了服务器的压力
耗时,英文要向另外一个服务器发起请求
二、JSP
原理
返回处理结果时,如果需要返回一个新的HTML页面,那么需要我们手动的利用resposne对象利用输出流写入手动拼接的字符串返回,
利用JSP文件可同时写入java和html语言,后面不常用,因为难以维护,既有java代码又有前端html代码,本来在后面的基于注解的大型项目开发也是难以维护的,因为你不知道在什么地方使用了注解,修改就很麻烦,更别说这个有如此之多的前端代码了
JSP实质上就是Servlet类,之所以能够写入Html代码,当浏览器首次请求这个JSP文件时,服务器和往常一样,编译成Java文件(自动将html利用输出流写入到响应包中,并且里面还封装类常用的域对象),然后编译为.class文件,最后创建对象,
继承了HttpJspBase–>继承了HttpServlet
_jspService,重写调用service方法
使用
<% if(null!=list){
Iterator<User> it = list.iterator();
while(it.hasNext()){
User user = it.next();
%>
<tr>
<td><%=user.getUserName()%></td>
<td><%=user.getPassword()%></td>
<td><%=user.getUserSex()%></td>
<td><%=user.getUserAge()%></td>
<td><%=user.getUserEmail()%></td>
<td><input type="checkbox" name="userId" value="<%=user.getUserId()%>"></td>
<%--<td><a href="/ExamSystem/delete?userId="+<%=user.getUserId()%>>删除用户</td>--%>
</tr>
<%
}
%>
<%
}%>
常用对象
appliction(全局)
out(response.getWriter)
request (HttpServletRequest)
pageContext (JSP上下文对象)
config(ServletConfig)
session(HttpSession)
response(HttpRequestResponse)
exception (Exception)
page (指向当前JSP的对象)
EL表达式
使用
对JSP基础的输出语法<%=%>改为了 ${作用域对象.作用域对象存储的k-v值得key},
${requestScope.student.getName()},获取request作用域对象中的student类的姓名
域对象scope
page/request/session/application+Scope,在${}中取值可以省略域对象,获取顺序是pageScope—>requestScope—>sessionScope–>applicationScope
JSTL表达式
使用
1、先导入 jstl 标签库的 jar 包。 taglibs-standard-impl-1.2.1.jar taglibs-standard-spec-1.2.1.jar
2、第二步,使用 taglib 指令引入标签库。 <%@ taglib prefix=“c” uri=“http://java.sun.com/jsp/jstl/core” %>
3、test
if:<c:if test="
12
=
=
12
"
>
<
h
1
>
12
等
于
12
<
/
h
1
>
<
/
c
:
i
f
>
s
w
i
t
c
h
/
c
a
s
e
:
<
c
:
c
h
o
o
s
e
>
<
c
:
w
h
e
n
t
e
s
t
>
/
<
c
:
w
h
e
n
t
e
s
t
>
<
/
c
:
c
h
o
o
s
e
>
f
o
r
:
<
c
:
f
o
r
E
a
c
h
b
e
g
i
n
=
"
"
e
n
d
=
"
"
i
t
e
m
s
=
"
{ 12 == 12 }"> <h1>12 等于 12</h1> </c:if> switch/case:<c:choose><c:when test>/<c:when test></c:choose> for:<c:forEach begin="" end="" items="
12==12"><h1>12等于12</h1></c:if>switch/case:<c:choose><c:whentest>/<c:whentest></c:choose>for:<c:forEachbegin=""end=""items="{集合/数组对象}" var=“变量名”></c:forEach>
三、Ajax
JavaScript
创建XmlHttpRequest对象,设置method,url发送,并且监听request的生命周期,如果返回值为4表明已经收到数据,如果status=200表示请求成功
JQuery
$.ajax(
{
“url”:"",
“type”:“默认是get”,
“data”:{
“name”:“ly”,
“password”:“123”,
}
success:function(data){},
dataType:“text/html/json” //返回的数据类型
}
)
$.get/post()
五、HTTP协议
状态码
100:返回的资源不是完成的信息,如还需要从服务器上获取图片,
200,返回的是完整的正确的信息
300:重定向
400:畸形的参数错误,前后端contentType不匹配
404:资源未找到
405:get/post请求方式不对
500:服务器端出现异常
协议包信息
请求头
响应头
总结
1、了解JavaWeb开发流程,了解Filter和listener,了解对象声明周期
2、程序封装:BaseServlet,BaseDao,JdbcUtil(使用线程池获取),分页
3、JSP,EL,JSTL
4、JSON和AJAX