一、Servlet
1,为什么需要使用Servlet?
(1)用于处理功能的JSP,放在类中实现更加的合理。
(2)有利于分离
2,什么是Servlet?
Servlet是一个特殊的Java类(必须实现特定的接口)
运行在服务器上(Tomcat)
处理客户端的请求,并作出响应。(JSP:和用户交互的界面,显示动态数据)
Servlet是以多线程的方式运行的
3,如何编写Servlet?
继承HttpServlet,重写service(request,response)
配置Servlet:
方式1:web.xml
Servlet名称
Servlet路径
Servlet名称
/Servlet名称
方式2:注解
在Servlet添加@WebServlet("/Servlet名称")
4,服务器何时创建的Servlet对象?创建了多少个Servlet对象?
首次访问Servlet时候创建的
多次请求Servlet,Tomcat只创建一个Servlet对象处理多次请求。
如果配置了,则Tomcat启动时就会创建Servlet对象。
5,基于Servlet的登录程序(避免405错误)
一个Servlet既能处理get请求,也能处理post请求的方式:
(1)service
(2)doGet和doPost相互调用
doGet(){
doPost();
}
6,Servlet的编程模式
(1)Servlet的作用:
a,接收请求参数
b,调用业务类
c,请求转发或重定向
(2)JSP的作用
a,提供和用户交互的页面
b,显示动态数据
7,Servlet的生命周期
(1)加载和实例化()
(2)初始化 init();
(3)服务 service()/doGet()/doPost()
(4)销毁 destroy();
8,Servlet中的session (服务器,安全)
(1)创建session:
当客户端没有session对象时,服务器会给客户端创建新session;如果客户端已有session,则会获取客户端的session。
HttpSession session=request.getSession();
HttpSession session=request.getSession(true);
当客户端没有session对象时,服务器会给客户端返回null;如果客户端已有session,则会获取客户端的session。
HttpSession session=request.getSession(false);
(2)设置session的有效时间(默认30分钟):
session.setMaxInactiveInterval(秒);
(3)存取session
setAttribute()/getAttribute()
(4)清除session
session.removeAttribute();
session.invalidate();
9,Servlet中Cookie的使用(客户端,不安全)
(1)创建Cookie
Cookie cookie=new Cookie(“name”,“value”);
(2)读写Cookie
给客户端写入Cookie:response.addCookie(cookie);
从客户端读取Cookie:Cookie[]cs=request.getCookies();
10,Session和Cookie的对比
(1)存取方式
session服务器上
cookie客户端上
(2)存取内容
session存对象,大小没有限制
cookie存字符串(非中文),大小有限制
(3)有效期
session默认30分钟
cookie默认一直有效(-1)
(4)安全性
session安全,可以存储重要的数据
cookie不安全,存储辅助的数据
11,在Servlet中使用application
ServletContext application=this.getServletContext();
application.setAttribute(“username”, “天蓬元帅”);
405:请求方式和Servlet中的处理方式不匹配
maven中央仓库
作业:使用Cookie保存用户名和密码,选择保存时间。
思路:
LoginServlet{
if(登录成功){
//写Cookie
Cookie cookie=new Cookie(“NAME”, “zhangsan”);
cookie.setMaxAge(3600);
response.addCookie(cookie);
}
}
login.jsp
<%
String name="";
String pwd="";
//读Cookie
Cookie[]cs=request.getCookies();
for (Cookie c : cs) {
if(c.getName().equals("NAME")){
name=c.getValue();
break;
}
}
%>
<form>
<input name="uname" value=<%=name%>>
<input name="upwd" value=<%=pwd%>>
</form>
二、JSTL和EL
1,EL:表达式语言 ---------------------<%= %>
(1)概述:简化JSP页面,避免使用脚本,通过EL访问JSP的内置对象和JavaBean。
(2)语法:
${表达式}
${1+1}=2
(3)EL的规则:
${name}:依次在pageContext->request->session->application中查找name,直到找到为止,如果没有找到则显示空白。
x
x
x
S
c
o
p
e
.
n
a
m
e
:
访
问
指
定
作
用
域
的
变
量
(
4
)
{xxxScope.name}:访问指定作用域的变量 (4)
xxxScope.name:访问指定作用域的变量(4){user.name}其实质是调用user对象的getName()方法。
2,JSTL:JSP标准标签库
(1)概述:主要是在JSP页面是控制逻辑(条件、循环),从而取代脚本。
(2)使用JSTL依赖jstl.jar
(3)使用前需要引入JSTL
(4)核心标签库core
引入标签:
<%@ taglib prefix=“c” uri=“http://java.sun.com/jsp/jstl/core” %>
通用标签:
set:定义作用域变量
<c:set var=“变量名” value=“值” scope=“作用域”/>
out:输出作用域标量
<c:out value="${name}" escapeXml=“是否继续html标签”/>
remove:删除作用域变量
条件标签:
if:<c:if test="EL表达式">
choose when otherwise:
<c:choose>
<c:when test="${a==1}">111111111111</c:when>
<c:when test="${a==2}">22222222222</c:when>
<c:otherwise>333333333333333</c:otherwise>
</c:choose>
迭代标签:
普通for循环:0~5
<c:forEach var="i" begin="0" end="5" step="2">
${i}
</c:forEach>
遍历数字:
<c:forEach var="stu" items="${students}">
${stu}<br>
</c:forEach>
遍历List、Set集合:
<c:forEach var="user" items="${list}" varStatus="vs">
${vs.index}-------------${user.name}<br>
</c:forEach>
遍历Map集合:
<c:forEach var="m" items="${map}">
${m.key}---------${m.value.name}<br>
</c:forEach>
分割字符串:
<c:forTokens var="s" items="aa_bb_cc_dd" delims="_">
${s}<br>
</c:forTokens>