JSP/Servlet相关总结

JSP内嵌java语句:
1.java脚本
<% java脚本部分 %>
2.声明部分
<%!此处为变量或方法 %>
3.表达式,注意表达式后面不能有分号
<%= 此处为表达式 %>


JSP常见的编译指令有三个:
page:
1.针对当前页面的指令,通常位于JSP页面顶端,一个JSP可以包含多条page指令
2.语法格式
<%@page
[languige = "java"]//脚本语言类型
[extends = "package.class"]//继承的父类
[import="package.class | package.*,..."]
[session = "true|false"]//是否使用http session
[buffer = "none|8kb|size kb"]//指定输出缓存区的大小
[autoflush = "true | false"]//当缓存区即将溢出时,是否需要强制性输出缓存区的内容,
                             //true为正常输出,false为溢出时产生一个异常
[isThreadSafe = ""]//是否线程安全
[contentType = "text/html;charSet=UTF-8"]//设定生成网页的文件格式和编码字符集
[pageEncoding = "UTF-8"]//指定生成网页的字符集编码
[isErrorPage = "true|false"]//设置本jsp是否为错误处理程序
[info = "text"]//设置jsp程序信息,通过Servelet.getServletInfo()获取(jsp中直接使用<%= getServletInfo() %>)
%>
include:用于指定包含另一个页面
使用方法

<%@include file=script.jsp %>

taglib:用于定义和访问自定义标签

JSP主要动作指令有7个
jsp:forward//转发页面,当前网址不变

jsp:param//用于传递参数,单独使用没意义,配合jsp:include、jsp:forward、jsp:plugin 使用





在script.jsp中:<%=request.getParameter("age") %>  =>29

jsp:include//动态引入一个jsp页面,还可以向jsp页面传递参数,和fowfard用法类似

jsp:plugin //用于下载javabean或applet到客户端执行(很少使用)

jsp:useBean//创建一个javabean的实例








打印信息: 樊大爷 18 男

jsp:setProperty //设置javabean实例的属性值

jsp:getProperty //输出javabean实例的属性值


JSP脚本中的9个内置对象
application:javax.servlet.ServletContext的实例,代表jsp所属的web应用本身,整个web应用有效
<% application.setAttribute("age","29"); %> <%=application.getAttribute("age") %>
config:javax.servlet.ServletConfig实例,代表jsp的配置信息
在web.xml中的标签下配置servlet的信息或在jsp中配置信息,然后通过
config.getInitParameter("name"); config.getServletName();等方式获得配置信息里面的内容
exception:java.lang.Thowble的实例,代表该页面的异常和错误
只有当前页面的isErropage属性为true时,才可使用exception对象
如在jsp的body中,
  <%@ page errorPage="error.jsp" %>

<%
int a = 6;
int c = a/0;
%>

在error.jsp页面中打印异常信息
  <%@ page isErrorPage="true" %>

异常类型是:<%=exception.getClass()%>

异常信息是:<%=exception.getMessage()%>

out:javax.servlet.jsp.JspWriter的实例,jsp页面的输出流,负责输出页面内容
page:代表该页面的本身,通常没有太多用处。。。吧,JSP,servlet放入其中,只有当前页面有效
pageContext:javax.servlet.Jsp.PageContext的实例,代表jsp页面上下文,访问页面共享数据
pageContext对象继承于JspContext
getAttribute(String name);取得page范围内页面属性
getAttribute(String name,int scope)  其中scope有如下四个值:
①PageContext.PAGE_SCOPE       ②PageContext.REQUEST_SCOPE
③PageContext.SESSION_SCOPE    ④PageContext.APPLICATION_SCOPE
与getter方法对应,的还有两个setter方法.
a) 它可以获取其它八大隐式对象,可以认为它是一个入口对象。
b) 获取其它所有域中的数据。
c) 跳转到其它资源。其身上提供了forword和sendRedirect方法,简化了转发和重定向的操
pageContext还可以获取其他内置对象(可以认为它是一个入口对象)
getRequest();getResponse();getServletConfig();
getServletContext()-->获取application对象;getSession()-->获取Session对象
request:javax.servlet.http.HttpServletRequest的实例,封装一次请求,JSP,servlet放入其中,本次请求有效
常用方法:
String getQueryString();
String getParameter(String paramName);
String[] getParameterValues(String name);

Enumeration headerNames = request.getHeaderNames();
while(headerNames.hasMoreElements){

String headerName = headerNames.nextElements();
syso(request.getHeader(headerName));
}

getRequestDispatcher("/a.jsp").include(request,response);//引入
getRequestDispatcher("/a.jsp").forward(request,response);//转发
response.senRedirect("redirect-result.jsp");//重定向重新生成第二个请求

response:javax.servlet.http.HttpServletResponse代表服务器对客户端的响应

session:javax.servlet.http.HttpSession的实例,代表一次会话,JSP,servlet放入其中,本次回话有效
setAttribute(String attrName,Object attrValue);
getAttribute(String attrName);

request:request是HttpServletRuest的实例,提供了一下几种方法获取请求参数
String getParameter(String paramName)
Map getParameterMap();
Enumeration getParameterNames();
String[] getParameterValues(String name)//请求参数有多个值的情况下(session等对象也可以使用)

HttpServletRequest提供了如下方法来访问请求头,请求头通常由浏览器自动添加
String getHeader(String name)
java.util.Enumeration getHeaderNames()
java.util.Enumeration getHeaders()
int getIntHeader(String name)
setAttribute(String attName, Object attValue);//request作用域范围内有效
getAttribute(String name)

转发功能(RequestDispatcher rd)
  rd = getRequestDispatcher("a.jsp").include(request,response);//将a.jsp插入本页面中
  rd = getRequestDispatcher("a.jsp").forward(request , response);//转发,URL不变
  rd.forward(request,response);
response对象
response是HttpServletResponse接口的实例
重定向,重定向会丢失所有的请求参数和request范围的属性,因为重定向将生成第二次请求,不在第一个request范围内
response.sendRedirect("redirect.jsp");//相当于在浏览器中输入新的URL然后回车

可以用out代替response响应,out是JspWriter的实例,JspWriter是Writer的子类,是字符流,无法输出非字符内容,

cookie
用于网站记录用户的某些信息,
void addCookie(Cookie cookie);-->response.addCookie(Cookie cookie)
创建cookie实例Cookie(String name,String value)
Cookie cookie = new Cookie(String name,String value);//非中文值
Cookie cookie = new Cookie(String name,java.net.URLEncoder.encode("孙悟空","gbk"));//设置中文值
读取Cookie时out.println(java.net.URLEncoder.encode(cookie.getValue());//获取中文值
response.addCookie(cookie);
设置cookie的生命周期,必须设置,否则Cookie会随着浏览器的关闭而关闭
向客户端写cookie
            获取cookie-->Cookie[] cookies request.getCookies();
            用for循环遍历 cookie.getName()
            
自定义标签:①编写自定义标签类,该类继承SimpleTagSupport类,重写doTage方法
    ②建立TLD文件,taglib包含三个子元素:tlib-version short-name uri 
    1.0
    mytaglib
   
    mytaglib

   
   
       
        helloWorld
       
        /src/lee.HelloworldTaglib.java
       
        empty
   

    ③使用标签库:web.xml中配置
   
   
/WEB-INF/mytaglib.tld
/mytaglib


在jsp头文件引入 <%@ taglib uri="tagliburi" prefix="tagprefix" %>
使用自定义标签语法格式如下:




带属性的自定义标签需要在重写doTage的类中带有私有属性,实现gettersetter方法,在
中的tagAttribute中传入属性,在TLD中配置标签属性:

attrName
true--该元素是否为必要值
true--该属性是否支持jsp脚本,表达式等动态内容

带标签体的标签:在重写doTage方法时,调用getJspBody.invoke(null)输出标签体
     
    动态属性的标签:在重写doTage的类中实现DynamicAttributes接口,
    在TLD文件中添加支持动态属性true
然后在调用自定义标签时传入属性值
   
     
  如果标签体为空,empty
标签体不允许出现jsp脚本,   scriptless
 
 
Servlet
与jsp相比,Servlet没有内置对象,原来在jsp中的内置对象都必须由程序简化
init(ServletConfig config)//创建Servlet实例,初始化资源
service(ServletRequest req, ServletResponse res) //客户端的相应方法
destroy()//销毁实例

doGet()
doPost()
doDelete()
doPut()
xml中配置servlet

firstServlet
hisaige.FirstServlet


firstServlet
/aaa
1 //创建基础的servlet使用,可选,里面值越小,越优先初始化与
                           //在servlet中首行@webServlet(loadOnStartup=1)功能一致


Servlet的配置方式有两种
1.通过@WebServlet()中的initparams属性配置
2.通过web.xml文件的中的子元素配置

xml中配置参数

参数名称
参数值


获取参数值方法
String value = application.getInitParameter("参数名称");

JSP自定义标签
。。。


Filter
用于修改和拦截HttpServletRequest和HttpServletResponse

filter种类
1.用户授权的
2.日志filter
3.负责解码的
4.能改变xml内容的XSLT Filter
5.负责拦截 多个请求或响应
创建一个filter的步骤
1.创建filter处理类,实现javax.servlet.Filter接口
  第一行:@WebFilter(filterName:"testfilter",urlPatterns={"/*"})
void init(FilterConfig config);
void destroy();
void doFilter(request,response,FilterChain chain);
2.web.xml中配置filter

hisaige
package.hisaige

hisaige
/*


使用URL Rewrite可以实现网站伪静态


Listener
①ServletContextListener:监听web应用的打开和关闭
ServletContextAttributeListner:监听Context范围内(application)属性的改变
ServletRequestListener:用于监听用户请求
ServletRequestAttributeListner:用于监听HttpSession范围内属性的改变
ServletSessiontListener:用于监听session的开始和结束
ServletSessiontAttributeListner:用于监听HttpSession范围内(session)属性的变化
contextInitialized(ServletContextEvent sce)//启动web应用时,系统调用
contextDestroyed(ServletContextEvent sce)//关闭web应用时,系统调用
使用Listener的两个步骤
1.定义Listener实现类
实现ServletContextListener接口
contextInitialized(ServletContextEvent sce):启动web应用时调用
contextDestroyed(ServletContextEvent sce):关闭web应用时调用
2.通过注解或在web.xml中配置Listener
使用@WebListener修饰实现类即可

package.hisaige

②使用ServletContextAttributeListener监听application范围内属性的变化
attributeAdded(ServletContextAttributeEvent event)//把一个属性存入application范围内触发
attributeRemoved(ServletContextAttributeEvent event)//删除属性触发
attributeReplace(ServletContextAttributeEvent event)//替换属性触发
    使用ServletRequestListener和ServletRequestAtributeListener的方法与ServletContextListener类似
requestInitialized(ServletRequestEven sre)
requestDestroyed(ServletRequestEven sre)
attributeAdded(ServletRequestAttributeEvent event)//把一个属性存入request范围内触发
attributeRemoved(ServletRequestAttributeEvent event)//删除属性触发
attributeReplace(ServletRequestAttributeEvent event)//替换属性触发
   使用HttpSessionListener和HttpSessionAttributeListener的方法与ServletContextListener类似
sessionCreated(HttpSessionEvent se);
sessionDestroyed(HttpSessionEvent se);


JSP在xml中的配置




/test.jsp

false

UTF-8

false



在test.jsp中

表达式输出:\${1 + 2}-->${1 + 2}

  ==>//表达式输出:${1 + 2}-->3


表达式语言的11个内置对象
pageContext:代表该页面的pageContext对象,与jsp的pageContext内置对象相同
pageScope:
requestScope:
sessionScope:
applicationScope:获取application范围的属性值
param:获取请求的参数值,${param["name"]}或${param.name}
paramValue:以数组形式获取请求的参数值
header:
headerValues:以数组形式获取请求头
initParam:用于获取请求web应用的初始化参数
cookie:
 表达式语言自定义函数:
  ①编写函数
  ②使用TLD文件配置函数
 
  functionName
  lee.functionClass
 
  java.lang.String functionName(java.lang.String)
 
  ③在web.xml中配置TLD文件,在jsp中调用函数标签${mytag:functionName("sadasd")}
  自定义函数标签
 Tag File 有一下五个编译指令
  taglib:
  include:
  tag:作用类似于jsp中的page指令
  attribute:
  variable:用于设置自定义标签的变量,这些变量将传给jsp页面使用


Servlet 3.0新特性
抛弃采用web.xml配置servlet,filter,listener的繁琐步骤
@WebServlet:用于修饰一个Servlet类,部署servlet
@WebInitParam:用于与@WebServlet或WebFilter一起使用,为其配置参数
@WebFilter:用于修饰Filter类,部署Filter
@MultipartConfig:用于修饰Servlet,指定该Servlet将会负责处理multipart/form-data类型的请求
@ServletSecurity:这是一个与JAAS有关的注解,修饰Servlet指定该Servlet的安全与授权控制
@HttpConstraint:与@ServletSecurity一起使用,指定servlet的安全与授权控制
@HttpMethodConstraint:与@ServletSecurity一起使用,指定servlet的安全与授权控制

web模块支持
web提供异步处理



    

你可能感兴趣的:(java编程)