jsp、servlet笔记
1、init 初始化Jsp&Servlet方法
destroy 销毁Jsp&Servlet之前的方法
service 对用户请求生成响应的方法
2、Jsp文件必须在jsp服务器内运行
Jsp文件必须生成servlet执行
每个jsp页面的第一个访问者速度很慢,因为必须等待jsp编译为servlet
jsp页面的访问者无需安装任何客户端,甚至不需要java的运行环境,因为jsp页面输送到客户端的是标准的html页面
3、jsp注释:<%-- 注释内容 --%>
html注释:<!-- 注释内容 -->
jsp声明:<%!
声明部分
%>
jsp输出表达式:<%= jsp表达式 %>
4、通过jsp声明语法定义的变量和语法对应于servlet类里面的成员变量和方法,jsp脚本部分会转换为_jspService方法内的可执行代码,所以jsp脚本中不能定义方法,因为java不允许在方法内部定义方法
5、jsp三个编译指令:page 针对当前页面的指令
include 包含另一个页面(静态包含,会把被包含界面的编译指令也包含进来,但是动态的<jsp:include>不会)
taglib 用于定义和访问自定义标签
6、jsp的七个动作指令:
<jsp:forward page="">
<jsp:param name="" value="">
</jsp:forward> 参数传递
<jsp:include> 动态包含(仅导入页面body内容)
<jsp:plugin> 用于下载javaBean或者Applet到客户端执行
<jsp:userBean> 创建javaBean实例
<jsp:setProperty> 设置javaBean实例的属性值
<jsp:getProperty> 输出javaBean实例的属性值
--------------------------------------------------------------------------------------------------------------
ps: 执行forward时,用户请求的url不会发生改变,转发时客户端的请求参数不会丢失,但页面内容完全被forward目标页内容 所取代。相当于用新页面来生成或处理用户请求,所以请求参数、属性的信息不会丢失。
ps:静态导入和动态导入的区别:
1、静态导入是完全融合,两个页面融合为一个servlet;而动态导入则在servlet中使用include方法来引入被导入页面的b ody内容;
2、静态导入时被导入页面的编译指令会起作用,动态导入不会;
3、动态包含可以追加额外参数;
--------------------------------------------------------------------------------------------------------------
7、jsp中的九个内置对象
application(让多个jsp、servlet共享数据)、config(可以获取servlet在web.xml文件中的配置参数——config.getInitParameter("paramName"))、exception、request、response、out(输出流对象,out.write(...)等价于<%= jsp表达式 %>)、session、page、pageContext
ps:四个map结构:page、request、session、application
8、在web.xml文件中配置application(servletContext实例)级别变量——在jsp中通过application.getInitParameter("driver")访问:
配置application级别变量:
<context-param>
<param-name>driver</param-name>
<param-value>com.mysql.jdbc.Driver</param-value>
</context-param>
配置servlet初始化参数:
<servlet>
<init-param>
<param-name>name</param-name>
<param-value>jack</param-value>
</init-param>
</servlet>
9、PageContext内置对象:
代表页面上下文,用于访问jsp之间的共享数据,使用PageContext可以访问page、request、session、application范围的变量
getAttribute(String name)
setAttribute(String name,int scope),scope可以是如下四个值:PageContext.PAGE_SCOPE、PageContext.REQUEST_SCOPE、PageContext.SESSION_SCOPE、PageContext.APPLICATION_SCOPE
PageContext.getRequest、PageContext.getResponse、PageContext.getServletConfig、
PageContext.getServletContext、PageContext.getSession
10、request对象:
获取请求头、请求参数;操作request范围的属性;
--------------------------------------------------------------
执行forward或者include——代替jsp提供的forward或者include指令。
HttpServletRequest类提供了一个getRequestDiapatcher(String path)(Path必须以"/开始")方法,
其中path就是希望forward或include的目标路径,该方法返回RequestDispatcher对象。该对象提供以下两个方法:
-> forward(ServletRequest request,ServletResponse response); //forward到path下页面
-> include(ServletRequest request,ServletResponse response); //将path页面include到本页面
------------------------------------------------------------------
11、response对象:
生成非字符响应(jsp的out对象属于JspWritter类,属于字符流的形式),对于字节流输出可以使用response
重定向:response.sendRedirect("")
增加cookie:
<%
String name = request.getParameter("name");
Cookie cookie = new Cookie("userName",name);
cookie.setMaxAge(24 * 3600);//设置cookie有效期为24h,如果不设置,则web应用关闭时cookie自动失效
response.addCookie(cookie);
%>
<%-- 获取本站保留的用户cookie --%>
<%
Cookie[] cookies = request.getCookies();
for(Cookie c: cookies){ //遍历cookie查找输出
if(c.getName().equals("userName")){
out.println(c.getValue());
}
}
%>
如果cookie中出现中文字符,则必须使用java.net.URLEncoder进行编码,然后使用java.net.URLDecoder对其进行解码:
<%
//使用java.net.URLEncoder.encode进行编码
Cookie c = new Cookie("cnName",java.net.URLEncoder.encode("孙悟空"),"GBK");
cookie.setMaxAge(24 * 3600);//设置cookie有效期为24h,如果不设置,则web应用关闭时cookie自动失效
response.addCookie(cookie); //获取cookie
Cookie[] cookies = request.getCookies();
for(Cookie c: cookies){ //遍历cookie查找输出
if(c.getName().equals("userName")){
//使用java.net.URLDecoder.decode进行解码
out.println(java.net.URLDecoder.decode(c.getValue()));
}
}
%>
12、session对象:主要用于跟踪用户会话信息,如判断用户是否登录系统,或者在购物车应用中,用于跟踪用户购买的商品。
session范围的属性可以是多个页面的跳转之间共享,主要有setAttribute(String attName,Object attValue)、
getAttribute(String attName)两个常用方法。
session机制通常用于保存客户端的状态信息,这些状态信息需要保存到web服务器的硬盘上,所以要求session里的属性值必须是可序列化的,否则会引发不可序列化的异常。session的属性值可以是任何可序列化的java对象。
13、servlet介绍
servlet通常是服务端小程序,运行在服务器端,用于处理及响应客户端请求。
servlet是个特殊的java类,这个类必须继承HttpServlet,servlet提供不同的方法来响应客户端请求:
doGet、doPost、doPut、doDelete分别用于响应各自请求。一般只有doGet、doPost两种。
大部分时候,servlet对于所有请求的响应都是一样的,此时,可以重写service()方法即可响应客户端的所有响应。
另外HttpServlet包含另外两个方法:
-> init(ServletConfig config) //创建servlet实例时,调用该方法初始化该servlet资源
-> destroy() //销毁servlet时,自动调用该方法回收资源
ps:普通servlet类里的service()方法的作用,完全等同于jsp生成servlet类的_jspService()方法。
14、servlet的配置
配置servlet有2种方式:
-> 在servlet类中使用@WebServlet Annotation配置
-> 在web.xml文件中配置
<servlet>
<servlet-name>aa</servlet-name>
<servlet-class>org.Class</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>aa</servlet-name>
<url-pattern>/aa</url-pattern>
</servlet-mapping>
15、servlet的生命周期(servlet的创建销毁等都是由web容器决定)
->创建servlet实例->init()->完成初始化->响应客户请求->destroy()->资源回收完成->实例被销毁
servlet创建有2个时机,用户请求之时、应用启动之时(通常用于某些后台服务的servlet,或者用于拦截请求的servlet)
load-on-startup:
->它的值必须是一个整数,表示servlet应该被载入的顺序
->当值为0或者大于0时,表示在容器启动的时候就被加载并初始化
->当值小于0或者没有指定时,表示该servlet被选择调用的时候才会去加载
->正数的值越小,该servlet的优先级越高,应用启动就越先加载
->当值相同时,容器会自主选择相应servlet的加载顺序
16、Filter介绍
Filter可以认为是servlet的加强版,主要用于在request到达servlet之前进行预处理或者response到达客户端之前对response进行预处理操作。
Filter主要分类:
->日志Filter:只要用于记录用户每次的请求操作
->用户授权的Filter:负责检查用户请求,过滤非法请求
->负责解码的Filter:包括对非标准编码的请求解码
->XSTL:能改变xml内容的XSTL Filter
->一个Filter可以拦截多个用户请求,一个请求也可以被多个Filter拦截
创建Filter只需要:
->创建Filter类
->在web.xml文件中配置filter
创建Filter必须实现的接口javax.servlet.Filter接口,该接口中定义了三个方法:
->init(FilterConfig config) //在config对象中可以获取该filter的一些初始化参数,获取方法同servlet
->destory() //完成对filter销毁前资源的回收
->doFilter(HttpServletRequest request,HttpServletResponse response,FilterChain chain) //doFilter方法中的代码实际就是从多个servlet中的service()方法中抽调出来的通用代码,通过利用filter可以很好地实现代码复用。
17、Listener类
创建listener步骤:
->创建listener实现类
->在web.xml文件中配置该listener
常见的web事件监听器接口有以下几种:
->ServletContextListener,用于监听web应用的启动关闭,
->ServletContextAttributeListener,用于监听ServletContext(application)范围内属性的改变
->ServletRequestListener,用于监听用户请求
->ServletRequestAttributeListener,用于监听ServletRequest(request)范围的属性的改变
->HttpSessionListener,用于监听session的开始和结束
->HttpSessionAttributeListener,用于监听HttpSession(session)范围内属性的改变
1)ServletContextListener
<context-param>
<param-name>name</param-name>
<param-value>value</param-value>
</context-param> ->contextInitialized(ServletContextEvent sce),启动web应用时调用
->contextDestroyed(ServletContextEvent sce),关闭web应用时调用
配置Listener
在listener实现类上添加注解@WebListener即可,或者在web.xml根目录中配置:
<listener>
<!-- 指定该listener的实现类 -->
<listener-class></listener-class>
</listener> ServletContextAttributeListener
->attributeAdded(ServletContextAttributeEvent event),将存入一个属性至application调用
->attributeRemoved(ServletContextAttributeEvent event),将一个属性从application范围中删除时调用
->attributeReplaced(ServletContextAttributeEvent event),将一个属性替换时调用
2)ServletRequestListener和ServletRequestAttributeListener
ServletRequestListener用于监听用户请求的到达,该接口的监听器需实现以下两个方法:
->requestInitialized(ServletRequestEvent event),用户请求到达、被初始化时调用
->requestDestroyed(ServletRequestEvent event),用户请求结束、被销毁时调用
ServletRequestAttributeListener用于监听request范围内属性的变化,该接口下方法如下:
->attributeAdded(ServletRequestAttributeEvent event)
->attributeRemoved(ServletRequestAttributeEvent event)
->attributeReplaced(ServletRequestAttributeEvent event) //event.getName() or getValue()获取属性名、值
3)HttpSessionListener和HttpSessionAttributeListener
->sessionCreated(HttpSessionEvent event),用户与服务器的会话开始、创建时触发该方法
->sessionDestroyed(HttpSessionEvent event),用户服务器的会话断开、销毁时调用
HttpSessionAttributeListener用于监听session范围内属性的变化,该接口下方法如下:
->attributeAdded(ServletRequestAttributeEvent event)
->attributeRemoved(ServletRequestAttributeEvent event)
->attributeReplaced(ServletRequestAttributeEvent event)
18、表达式语言
${expression}
在jsp页面中使用表达是语言可以直接获取请求参数值、获取javabean的指定属性值、获取请求头、获取各种范围属性值。
表达式语言内置11种:
->pageContext,同jsp内置对象中的PageContext对象
->pageScrope,用于获取page范围的属性值
->requestScrope,用于获取request范围的属性值
->sessionScrope,用于获取session范围属性值
->applicationScrope,用于获取application范围属性值
->param,用于获取请求的参数值
->paramValues,用于获取属性为数组的属性值
->header,用于获取请求头的属性值
->headerValues,用于获取请求头的属性值维数组的属性值
->initParam,用于获取web应用的初始化参数,即<context-param></context-param>中的值
->cookie,用于获取cookie值
19、servlet 3.0的文件上传
表单文件form.jsp:
<form method="post" action="upload" enctype="multipart/form-data">
文件名:<input type="text" id="name" name="name" /></br>
选择文件:<input type="file" id="file" name="file" />
<input type="submit" value="上传" />
</form>
UploadServlet如下:
@WebServlet(name="upload",urlPatterns={"/upload"})
@MultipartConfig //该注解指定该servlet用于处理文件上传请求
public class UploadServlet extends HttpServlet{
public void service(HttpServletRequest request,HttpServletResponse response) throws Exception{
response.setContentType("text/html;charset=utf-8");
PrintWriter pw = response.getWriter();
//获取普通请求参数
String fileName = request.getParameter("name");
//获取上传文件域
Part part = request.getPart("file");
out.println("上传文件类型:"+ part.getContentType());
out.println("上传文件大小:"+ part.getSize());
//获取该文件上传域的Header Name
Collection<String> headerNames = part.getHeaderNames();
for(String headerName: headerNames){
out.println(headerName + "---" + part.getHeader(headerName));
}
//将上传的文件写入服务器uploadFiles文件夹下面
part.write(getServletContext().getRealPath("/uploadFiles") + "/" fileName);
}
}
jsp、servlet笔记的更多相关文章
- 新手学习JSP+Servlet笔记一
作为一个新手,初次接触jsp,servlet,习惯了后台的开发,前台的知识一窍不通,利用闲暇时间,给自己补补,从MyEclipse开始. 安装好MyEclipse之后,没有安装程序的可以下载 http ...
- JSP/Servlet笔记
一.Servlet简介 Servlet程序可以运行于任何服务器,如web.email.FTP等,所有servlet程序必须实现javax.servlet接口.GenericServlet是实现了jav ...
- jsp&servlet学习笔记
1.路径引用问题 一个css.jsp.html.或者javascript文件从从一个工程复制到另一工程,如果引用的时候使用的时相对路径,看似没有错误,但是却一直引用不进来,这时候要使用绝对路径,这样才 ...
- Servlet和JSP读书笔记(二)
一. GenericServlet 1. 前面写的 Servlet和JSP学习笔记(一) 中的实例都是通过实现Servlet接口编写的,这样存在的问题就是:你必须实现Servlet中的所有方法,而不管 ...
- JSP/Servlet Web 学习笔记 DayOne
JSP概述 1)JSP是一种动态网页技术标准,它是在传统的页面HTML文件中插入Java程序段和JSP标记(tag),从而形成JSP文件(*.jsp),也称JSP页面. 2)JSP容器是一个支持JSP ...
- JSP学习笔记(5)——Servlet、监听器、过滤器、MVC模式介绍
MVC模式 在讲解Servlet前,先介绍一下MVC模式. M:model 模型,相当于数据层,用于存放数据,如一个Java中的一个bean类 V:view 视图,相当于页面层,用于显示数据,如一个网 ...
- JSP&Servlet学习笔记----第3章
Web容器是JSP/Servlet唯一认识的HTTP服务器. HTTP是基于请求/响应的无状态通信协议. 流程: 1.请求来到HTTP服务器 2.HTTP服务器将请求转交给Web容器 3.Web容器创 ...
- JSP&Servlet学习笔记----第1/2章
HTML(HyperText Markup Language):超文本标记语言 HTTP(HyperText Transfer Protocol):超文本传输协议 URL(Uniform Resour ...
- JSP学习笔记
JSP学习笔记 Jsp网页主要分为Elements与Template Data两部分. Template Data:JSP Container不处理的部分,例如HTML内容 Elements:必须经由 ...
随机推荐
- APIO2014 连珠线
题目链接:戳我 换根DP 由于蒟蒻不会做这个题,所以参考了大佬. 本来想的是有三种情况,一种是该节点不作为两个蓝线的中点(我们称这种不是关键节点),一种是该节点作为关键点.连两个子节点,一种是作为关键 ...
- jquery中的正则表达式
1.什么是正则表达式: 能让计算机读懂的字符串匹配规则. 2.正则表达式的写法: var re=new RegExp('规则', '可选参数');var re=/规则/修饰参数; 3.规则中的字符 1 ...
- JQuery easyui里面的自动完成autocomplete插件
默认功能 当您在输入域中输入时,自动完成(Autocomplete)部件提供相应的建议.在本实例中,提供了编程语言的建议选项,您可以输入 "ja" 尝试一下,可以得到 Java 或 ...
- IIS服务器环境下某路径下所有PHP接口无法运行报500.19错误
IIS服务器环境下某路径(文件夹)下所有PHP接口无法运行报500.19错误 环境:IIS8.5 + php7.2.1 错误描述:某目录下(如 d:\web\A)所有php接口文档运行错误,接口测试工 ...
- 洛谷 P3201 [HNOI2009]梦幻布丁(启发式合并)
题面 luogu 题解 什么是启发式合并? 小的合并到大的上面 复杂度\(O(nlogn)\) 这题颜色的修改,即是两个序列的合并 考虑记录每个序列的\(size\) 小的合并到大的 存序列用链表 但 ...
- 2019.4.18 HTML + CSS相关整理
目录 标签 块标签 行标签 行块转化 嵌套规则 css引入方式 行间样式 内部引入 外部引入 选择器 基础选择器 组合选择器 盒模型 css样式 字体属性 设置字体的大小 设置字体的粗细 设置字体的风 ...
- mysql for mac 上的安装及用DataGrip连接
---恢复内容开始--- 1.首先下载MySQL的mac版本,地址百度就行了. 2.这个时候需要注意安装的时候,弹出来的一个类似窗口,上面有提示默认密码,但是我当时就忘记了这个默认密码,如果你记住了默 ...
- 基于两阶段提交的分布式事务实现(UP-2PC)
引言:分布式事务是分布式数据库的基础性功能,在2017年上海MySQL嘉年华(IMG)和中国数据库大会(DTCC2018)中作者都对银联UPSQL Proxy的分布式事务做了简要介绍,受限于交流形式难 ...
- maven——添加插件和添加依赖有什么区别?
依赖:运行时开发时都需要用到的jar包,比如项目中需要一个Json的jar包,就要添加一个依赖,这个依赖在项目运行时也需要,因此在项目打包时需要把这些依赖也打包进项目里: 插件:在项目开的发时需要,但 ...
- 如何让一个div居于页面正中间
如何让一个div居于页面正中间 如何让一个div居于页面中间,我今天说的是让一个div水平居中同时垂直居中,而不是简单的top:50%,left:50%.当然,我们就按一开始的思路写一下:top,le ...