servlet

一、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>

(5)格式化标签fmt
引入标签:<%@ taglib prefix=“f” uri=“http://java.sun.com/jsp/jstl/fmt” %>
格式化小数:<f:formatNumber value=" p r i c e &quot; p a t t e r n = &quot; 0.00 &quot; / &gt; 格 式 化 日 期 : &lt; f : f o r m a t D a t e v a l u e = &quot; {price}&quot; pattern=&quot;0.00&quot;/&gt; 格式化日期:&lt;f:formatDate value=&quot; price"pattern="0.00"/><f:formatDatevalue="{date}" pattern=“yyyy/MM/dd hh:mm:ss”/>
(6)数据库操作标签库sql (了解)
引入标签:<%@ taglib prefix=“f” uri=“http://java.sun.com/jsp/jstl/sql” %>
<s:setDataSource var=“conn” driver=“com.mysql.jdbc.Driver” url=“jdbc:mysql://localhost:3306/mydb” user=“root” password=“root”/>
<s:update dataSource=" c o n n &quot; s q l = &quot; 增 删 改 S Q L 语 句 &quot; / &gt; &lt; s : q u e r y v a r = &quot; r s &quot; d a t a S o u r c e = &quot; {conn}&quot; sql=&quot;增删改SQL语句&quot;/&gt; &lt;s:query var=&quot;rs&quot; dataSource=&quot; conn"sql="SQL"/><s:queryvar="rs"dataSource="{conn}" sql=“查询SQL语句”/>
<c:forEach var=“row” items="${rs.rows}">
${row.name}

</c:forEach>
3,自定义标签
(1)概述:通过自定义标签来封装HTML的代码,提高重用性。
(2)实现步骤:
a,编写标签处理类,继承SimpleTagSupport,并重写doTag()
JspWriter out=this.getJspContext().getOut();
b,在WEB-INF下创建标签描述文件 *.tld

标签名称
标签处理类的路径
empty/scriptless

c,带属性的标签
标签处理类中添加属性和getter/setter方法
在标签描述文件中通过来配置

属性名
是否为必须属性
true
true

d,带标签体的标签
标签处理类继承BodyTagSupport,重写doEndTag()
String body=this.getBodyContent().getString();


scriptless

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

@沫沫@

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值