JSP中插入Java代码
<%=Java表达式%>输出Java表达式的值
<%!声明全局变量或方法%>
<%Java代码%>
注释
HTML注释: <!-- 注释内容 -->
注释可以在浏览器显示,注释中可以包括脚本,脚本会执行
在JSP页面中使用
JSP注释: <%-- 注释内容 --%>
注释不会在浏览器显示,注释内容不会执行
在JSP页面中使用
Java注释://、/* … */ 、/** … */
只能使用在JSP的3种脚本标记中。
JSP指令
JSP页面指令page、include、taglib
JSP指令标识<%@指令 属性=xx%>
<%@page >%
pageEncoding=”UTF-8”//页面编码
import=”java.util.*”//导入jar包
<%@ include file=“文件名”%>//静态包含,把包含文件的代码原封不动包含进去
<%@ taglib prefix=“前缀名” uri=“标签库uri”%>
JSP标签
<jsp:include page=”url”>动态包含,源文件先执行完,再把结果包含进去
<jsp:param name=”参数名” value=”参数值”/>
<jsp:include/>
------------------------------------
<jsp:forward page=“url” > <jsp:param name=“参数名” value=“参数值” /></jsp:forward>
JSP内置对象
内置对象 Java类型 有效范围
request javax.servlet.http.HttpServletRequest request
response javax.servlet.http.HttpServletResponse page
session javax.servlet.http.HttpSession session
out javax.servlet.jsp.JspWriter page
application javax.servlet.ServletContext application
---------------------------------------------------------------------------------------
page javax.servlet.jsp.HttpJspPage page
pageContext javax.servlet.jsp.PageContext page
config javax.servlet.ServletConfig page
exception java.lang.Throwable page
Request对象一些用法
Request获得参数
String value = request.getParameter(“参数名”);
String[] values = request.getParameterValues(“参数名”);
Request设置编码
request.setCharacterEncoding(“UTF-8”);
Request保存/取出对象
requset.setAttribute(“key”,value);
Object value = requset.getAttribute(“key”);
Enumeration<String> names = request.getAttributeNames();
Request获取Cookie
Cookie[] cookie= request.getCookies();
请求路径相关
String contextPath = request.getContextPath(); /项目名
String servletPath = request.getServletPath(); /请求路径(项目名之后的)
String uri = request.getRequestURI(); contextPath+servletPath
请求方法
String method = request.getMethod();
Response对象一些用法
重定向
response.sendRedirect(“xxx”);
添加cookie
response.addCookie(Cookie cookie);
Response设置编码
response.setCharacterEncoding(“UTF-8”);
设置MIME类型
response.setContentType(“image/jpeg”);
设置响应头
response.setHeader(“响应头名”,”响应头值”);
Out对象一些用法
print()/println();
clearBuffer(); 清除缓冲区的数据,并将数据写入客户端
Clear(); 清除缓冲区的数据,数据不写入客户端
flush(); 输出缓冲区中的数据
newLine(); 输出换行
close(); 关闭输出流
Session对象一些用法
session.setAttribuete(“key”,value);
Object value = session.getAttribuete(“key”);
session.removeAttribute(“key”);
Enumeration<String> names = session.getAttributeNames();
session.getLastAccessedTime(); 获取客户端最近访问服务器端的保存时间
session.getMaxInactiveInterval(); 获取客户端停止访问服务器端的保存时间
session.setMaxInactiveInterval(int value); 设置客户端停止放问候
Session.invalidate();//销毁session
Application对象一些用法
getResource(String path);
getResourceAsStream(String path);
getServle(String path);
Session对象的理解
1.session是用于保存客户信息而分配给客户的对象。
2.HTTP协议不能保存客户端请求信息的历史记录,为了解决这一问题,生成一个session对象,这样服务器和客户端之间的连接状态就会一直保持下去。
3.session的生命同期从客户端进行第1个request开始,到用户结束对应用程序的访问终止,如关闭浏览器等。
4.session中的ID标识是唯一的,用来标识每个用户,当刷新浏览器时,该标识的值不变。
5.如果在一定时间内,客户端不向服务器发出应答请求,系统默认在30分钟内,session对象会自动消失。
Application对象的理解
1.WEB服务器启动后,部署在该服务器上的WEB应用程序可以开始运行。
2.每个WEB应用程序开始运行时,会创建唯一的application对象,供所有访问该应用程序的客户端共享。
3.当应用程序结束时,application对象被销毁。
Config对象的理解(很少使用)
config对象被封装为javax.servletConfig接口,通过pageContext.getServletConfig()方法可以获取一个config对象。
getInitParameter(String name);
getInitParameterNames();
getServletName();
getServletContext();
<servlet>
<servlet-name>sanyang</servlet-name>
<jsp-file>/index.jsp</jsp-file>
<init-param>
<param-name>email</param-name>
<param-value>wy9wy163@163.com</param-value>
</init-param>
</servlet>
PageContext对象的理解(很少使用)
pageContext对象它的作用是取得任何范围的参数,通过pageContext对象可以获取JSP页面的out、request、response、session、application等对象,或者可以重新定向客户的请求等。
Exception对象的理解(很少使用)
1.exception异常对象指的是web应用程序所能够识别并能够处理的问题。
2.在Java语言中,通过“try/catch”的关键在来处理异常信息情况,如果在JSP页面中出现没有捕捉到的异常信息,那么系统会自动生成exception对象,并把这个对象传送到page指令元素中设定的错误页面中,然后在错误提示页面中处理相应的exception对象。
3.exception对象只能在错误页面中才可以使用,即页面指令元素里存在isErrorPage=true的页面。
getMessage();
printStackTrace();
JavaBean
通常可以分成数据JavaBean和业务JavaBean
JavaBean规范:
(1)实现java.io.Serializable接口;
(2)是一个公共类;
(3)类中必须存在一个无参数的构造函数;
(4)对类的属性进行封装:提供对应的setXxx()和getXxx()方法来存取类中的属性,方法中的“Xxx”为属性名称,属性的第一个字母应大写。若属性为布尔类型,则可使用isXxx()方法代替getXxx()方法。
JavaBean标签
<jsp:useBean
id=”变量名”
scope=”生存范围”
class=”类全名”/>
<jsp:setProperty
name="Bean实例名"
property="propertyName" value="值"/>
<jsp:getProperty
name="Bean实例名"
property="propertyName"/>
<jsp:useBean>与<jsp:setProperty>的2种搭配方式:
(1)独立方式
<jsp:useBean id="…" scope="…" class="…" />
<jsp:setProperty name="…" property="…" ……/>
该方法下,2个动作的执行是独立的。
(2)嵌套方式
<jsp:useBean id="…" scope="…" class="…" >
<jsp:setProperty name="…" property="…" ……/>
</jsp:useBean>
该方式下,若useBean动作没有创建新的实例,则setProperty动作不执行。
Servlet(单例的)
生命周期
创建Servlet
继承javax.servlet.GenericServlet或者javax.servlet.http.HttpServlet,通常基于HTTP开发继承HttpServlet,复写doGet()、doPost()方法
配置Servlet
<servlet>
<servlet-name>HttpServletSample</servlet-name>
<servlet-class>
app.servlet.http.HttpServletSample
</servlet-class>
<load-on-startup>1</load-on-startup>//数值越低优先初始化,<=0需要的时候才初始化
</servlet>
<servlet-mapping>
<servlet-name>HttpServletSample</servlet-name>
<url-pattern>/httpservlet</url-pattern>
</servlet-mapping>
或者
@WebServlet(urlPatterns=”/httpservlet”)
Servlet中转发、重定向
req.getRequestDispatcher(“index.jsp”).forward(req,resp);//包含include(req,resp);
resp.sendRedirect(“xxx”);
servlet.getServletContext(); //使用Application
req.getSession(); //使用Sessoin
Filter
创建Filter
实现接口javax.servlet.Filter,复写init(FilterConfig config), doFilter(ServletRequest req, ServletResponse reso,FilterChain chain),destroy()方法
调用chain.doFilter(req,resp);继续往下执行
配置Filter
<filter>
<filter-name>FilterName</filter-name>
<filter-class>package.className </filter-class>
<init-param>
<param-name>ParamName1</param-name>
<param-value>ParamValue1</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>FilterName</filter-name>
<url-pattern>/path</url-pattern>
</filter-mapping>
@WebFilter(urlPatterns=”/*”)
Listener
创建Listener
实现对应的Listener接口,复写对应的方法
配置Listener
<listener>
<listener-class>squall.servlet.listener.Listener</listener-class>
</listener>
Servlet、Filter、Listener顺序问题
容器加载顺序:context-param -> listener -> filter -> servlet
filter 拦截资源是按照 filter-mapping 配置节出现的顺序来依次调用
EL表达式${}
pageScope
requestScope
sessionScope
applicationScope
param 访问request的单值参数
paramValues 访问request的多值参数
Cookie 访问Cookie
initParam 访问初始化参数
header 访问header的单值参数
headerValue 访问header的单值参数
.操作[]操作基本相同
特殊情况:param[var],var是变量,稍微灵活一些
${username}因为并没有指定哪一个范围的username,所以它会依序从Page、Request、Session、Application范围查找。