Servlet&JSP学习笔记(上篇)

Servlet

  • Servlet的生命周期:

  • JAR使用标注定义的Servlet、监听器、过滤器外有自己的部署描述文件,web-fragment.xml,即每个模块都有。
  • web-fragment.xml的根标签配有——也可配于web.xml。

ServletConfig配置:

1.在@WebServlet中使用@WebInitParam标准设置;

2.在web.xml配置初始参数。

ServletContext用途:实现对象来取得所请求资源的URL,设置与储存属性,应用程序初始参数,甚至动态设置Servlet实例。

  • 生命周期监听器ServletContextListener,含两个方法:
contextInitialized(ServletContextEvent sce) 
/
contextDestroyed(ServletContextEvent sce)

设置为ServletContext属性的共享资料会在Web应用程序存活期间都会一直存在,属性移除方法removeAttribute()。

@WebListener无属性设置,而是在web.xml设置。

在web.xml中设置ServletContextListener实现类

  • 改变HttpSession的一些Cookie设置
  1. web.xml定义;
  2. ServletContext之后使用getSessionCookieConfig()取得SessionCookieConfig进行设置。

应用场景:在线人数计数显示,可实现HttpSessionListener。

  • 容器调用Servlet的service()方法

对客户响应需要覆盖的方法,含两个参数(ServletRequest,ServletResponse)

容器转换HTTP响应步骤:

    1. URL指向一个servlet,想发给这个servlet的容器;
    2. 判定为Servlet时,创建HttpServletRequest和HttpServletResponse对象;
    3. 根据URL,从web.xml中找到对应的servlet,创建/分配线程,将HttpServletRequest和HttpServletResponse对象传给线程;
    4. 根据请求类型调用不同GET或POST方法;
    5. 把结果填入响应;
    6. 结束线程,将response对象转换为响应返回给客户,删除对象。(销毁、回收当次请求响应等相关对象)
  • POST&GET

使用Get

使用Post

Get会在URL中动态显示传入参数,Post显示固定的URL路径。

public class ThreeParams extends HttpServlet {

	@Override
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

		response.setContentType("text/html");//说明以下代码为html代码而非纯文本
		PrintWriter pw = response.getWriter();
		pw.println(request.getParameter("param1"));
		pw.println("<br/>");
		pw.println(request.getParameter("param2"));
		pw.println("<br/>");
		pw.println(request.getParameter("param3"));
		pw.println("<br/>");
	}

	@Override
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		System.out.print("post");
		doGet(request,response);
	}
}

POST请求setCharacterEncoding,对于请求Body中的字符编码有作用,不影响web容器;

GET请求getBytes()指定编码,表达式:String.getBytes(String decode)。

  • servlet的调派处理

场景:多个Servlet相互协调未完成响应,要在程序中调派。

具体步骤:

    1. 创建RequestDispatcher dispatcher;
    2. 初始化dispatcher引用getRequestDispatcher(String path),path要调派的目标路径,即目标Servlet的URL;
    3. 在需要的地方调用include和forward。
  • *server push
  • MIME形式——MIME描述消息类型的因特网标准
  • 会话管理

隐藏域hidden,对于客户不可见,随表单发送给server,场景将前一页的内容带入后一页。

问题:网页关掉后,仍会遗失。

  • Cookie

服务器可以向客户端写内容,只能是文本内容;

客户端可以阻止服务器写入;

只能拿自己webapp写入的东西;

Cookie分为两种属于窗口/子窗口,属于文本;

一个servlet/jsp设置的cookies能够被同一个路径下面或者子路径下面的servlet/jsp读到(路径=URL/!=真实文件路径)。

cookie = new Cookie("user","caterpillar");
cookie.setMaxAge(7*24*60*60);
response.addCookie(cookie);

cookie以键-值对存储

应用场景:用户名免登录,下单订单记录。

写在Client端,如果设置了生存周期,会写在文件中;如没有写,会存在内存中,关闭则无。

通过Ctrl+N新打开另一个页面,会看到有同样的Cookie。

  • FilenameFilter文件过滤器
  • Session

应用场景:邮箱需要用到Session

Session(SessionId)的两种实现方式:1、URL重写;2、Cookie(临时的和文件的)

  • Session的过期时间:

tomcat中web.xml就有Session的过期时间设置;失效方法invalidate();

setMaxInactiveInterval()设定浏览器多久没有请求应用程序的话,HttpSession就自动失效;

在web.xml配置SessionId,存储SessionID的Cookie存活期限。

  • Session不像Cookie拥有路径不能访问的问题:

同一个application下的servlet/jsp可以共享同一个session,前提是同一个客户端窗口。

  • URL重写

若浏览器不支持Cookie,可通过URL重写的方式实现Session,response.encodeURL(),就是将一些额外追加到表示会话的每个URL末尾,服务器在该标示符与其存储的有关的该会话的数据之间建立关联。适用于重要大项目,其功能有a、转码;b、URL后面带入SessionID。

通过HttpSession来读写Session

如果浏览器支持Cookie,会把SessionID保存在Cookie里,实验中IE浏览器禁不掉Cookie,禁用Cookie后不同页面重新建SessionId。

  • Application
  1. 用于保存整个WebApplication的生命周期内都可以访问的数据
  2. 在API中表现为servletContext
  3. 通过ServletContext的get/setAttribute方法取得/设置相关属性

注:不同客户端或者页面共享同一个Session值,位于包中的Servlet,在web.xml中需要配置class时需带包名,在tomcat中的路径也该含有包名路径。

  • 向Servlet/context传参
  • JavaBean

组件含义:一系列共同对外服务的类。

JavaBean是一种组件,分侠义或广义,侠义的如图形界面;广义理解为Java类。

在Servlet中使用Bean和在通常程序中使用Bean类似,属性名称第一个字母必须小写,一般具有getters and setters,但Bean不应具有GUI表现。

一般是用来实现某一业务逻辑或取得特定结果。

 

JSP

程序由JSP Engine先将它转换成Servlet代码,如存入apache-tomcat-9.0.41\work\Catalina\localhost\test\org\apache\jsp,接着将它编译成类文件载入执行。

只有当客户端第一次请求JSP时,才需要将其转换、编译。

优点:

  1. 优良的性能,优于CGI、PHP、ASP
  2. 平台无关性,操作系统无关,Web服务器无关
  3. 可扩展性,tag的扩展机制,简化页面开发
  • JSTL
  • JSF
  • JSP部分语法

JSP的脚本片段中带感叹号为成员变量

<%!
  int accessCount = 0;
%>

不带感叹号为局部变量

<%
  int accessCount = 0;
%>

JSP注释:

<%--...客户端看不到的注释...--%>
<%//... ...%>
<%/*... ...%>

对比Html注释

<!--...客户端看得到的注释...-->
  • <%@Directive%>
<%@page language="script language"|
                  import="importList"|
                  errorPage="errorPageUrl"|
                  isErrorPage="true|false"|
                  contentType="contentTypeInfo"
%>
  • action用于运行期间
  • useBean
  • include:先将代码加载进该页面,属编译期间包含,适用于不传参的场景,即不能向fileURL中传递参数,如不能用于abc.jsp?user=aaa。
  • forward
  • Directive用于编译期间
  • response.sendRedirect与

response.sendRedirect是不同的request,如图中1-1,1-2;

使用同一个request,如图中2-1,2-2,2-3。

  • 对象绑定监听器HttpSessionBindingListener
  • 对象迁移
  • FilterConfig

FilterConfig——类比——>servlet接口init()方法参数上的ServletConfig,

FilterConfig是实现Filter接口的类上使用标注或web.xml中过滤器设置信息的代表对象。

Filter的doFilter()——类比——>Servlet接口的service()

  • 响应封装器
  • 异步处理

*web容器会为每个请求分配一个线程,异步处理可以先释放容器分配给请求的线程资源。

ServletRequest的startASync()方法获取AsyncContext(带入参/不带入参),可释放容器分配的线程。

@WebFilter和web.xml配置异步处理。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值