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:用于指定包含另一个页面
使用方法
<body>
<%@include file=script.jsp %>
<body>
taglib:用于定义和访问自定义标签

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

jsp:param//用于传递参数,单独使用没意义,配合jsp:include、jsp:forward、jsp:plugin 使用
<jsp:forward page="script.jsp">
<jsp:param value="29" name="age"/>
<jsp:param value="sasa" name="ddd"/>
</jsp:forward>

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

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

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

jsp:useBean//创建一个javabean的实例
<jsp:useBean id="p1" class="hisaige.bean.Person" scope="page" />
<jsp:setProperty name="p1" property="id" value="1"/>
<jsp:setProperty name="p1" property="name" value="樊大爷"/>
<jsp:setProperty name="p1" property="age" value="18"/>
<jsp:setProperty name="p1" property="sex" value="男"/>
<h2><jsp:getProperty name="p1" property="name" /></h2>
<h2><jsp:getProperty name="p1" property="age" /></h2>
<h2><jsp:getProperty name="p1" property="sex" /></h2>
打印信息: 樊大爷 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>标签下配置servlet的信息或在jsp中配置信息,然后通过
config.getInitParameter("name"); config.getServletName();等方式获得配置信息里面的内容
exception:java.lang.Thowble的实例,代表该页面的异常和错误
只有当前页面的isErropage属性为true时,才可使用exception对象
如在jsp的body中,
  <%@ page errorPage="error.jsp" %>
<body>
<%
int a = 6;
int c = a/0;
%>
</body>
在error.jsp页面中打印异常信息
  <%@ page isErrorPage="true" %>
<body>
异常类型是:<%=exception.getClass()%><br />
异常信息是:<%=exception.getMessage()%>
</body>
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<String> 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<String> getHeaderNames()
java.util.Enumeration<String> 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 
    <tlib-version>1.0</tlib-version>
    <short-name>mytaglib</short-name>
    <!-- 定义该标签库的URI -->
    <uri>mytaglib</uri>

    <!-- 定义第一个标签 -->
    <tag>
        <!-- 定义标签名 -->
        <name>helloWorld</name>
        <!-- 定义标签处理类 -->
        <tag-class>/src/lee.HelloworldTaglib.java</tag-class>
        <!-- 定义标签体为空 -->
        <body-content>empty</body-content>
    </tag>
    ③使用标签库:web.xml中配置
    <jsp-config>
    <taglib>
<taglib-location>/WEB-INF/mytaglib.tld</taglib-location>
<taglib-uri>/mytaglib</taglib-uri>
</taglib>
</jsp-config>
在jsp头文件引入 <%@ taglib uri="tagliburi" prefix="tagprefix" %>
使用自定义标签语法格式如下:
<tagprefix:tagName tagAttribute="tagValue"...>
<tagBody />
</tagprefix:tagName>

带属性的自定义标签需要在重写doTage的类中带有私有属性,实现gettersetter方法,在<tagprefix:tagName tagAttribute="tagValue"...>
中的tagAttribute中传入属性,在TLD中配置标签属性:
<attrbute>
<name>attrName</name>
<required>true</require>--该元素是否为必要值
<fragment>true</fragment>--该属性是否支持jsp脚本,表达式等动态内容

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

doGet()
doPost()
doDelete()
doPut()
xml中配置servlet
<servlet>
<servlet-name>firstServlet</servlet-name>
<servlet-class>hisaige.FirstServlet</servlet-class>
<servlet>
<servlet-mapping>
<servlet-name>firstServlet</servlet-name>
<url-pattern>/aaa</url-pattern>
<load-on-startup>1<load-on-startup> //创建基础的servlet使用,可选,里面值越小,越优先初始化与
                           //在servlet中首行@webServlet(loadOnStartup=1)功能一致
<servlet-mapping>

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

xml中配置参数
<context-param>
<param-name>参数名称</param-name>
<param-value>参数值</param-value>
<context-param>

获取参数值方法
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
<filter>
<filter-name>hisaige<filter-name>
<filter-class>package.hisaige<filter-class>

<filter-name>hisaige<filter-name>
<url-pattern>/*</url-pattern>
<filter>

使用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修饰实现类即可
<listener>
<listener-class>package.hisaige</listener-class>
</listener>
②使用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中的配置
<!-- 关于jsp的配置信息 -->
<jsp-config>
<jsp-property-group>
<!-- 对哪些文件进行配置 -->
<url-pattern>/test.jsp</url-pattern>
<!-- 是否忽略表达式语言 -->
<el-ignored>false</el-ignored>
<!-- 页面编码的字符集 -->
<page-encoding>UTF-8</page-encoding>
<!-- 不允许使用java脚本 -->
<scripting-invalid>false</scripting-invalid>
<!-- 导入头文件 -->
<!-- 
<include-prelude>/top.jsp</include-prelude>
<include-coda>/bottom.jsp</include-coda>
-->
</jsp-property-group>
在test.jsp中
<p>表达式输出:\${1 + 2}-->${1 + 2}</p>  ==>//表达式输出:${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文件配置函数
  <function>
  <name>functionName</name>
  <function-class>lee.functionClass</function-class>
  <!-- 函数的调用方式 -->
  <function-signature>java.lang.String functionName(java.lang.String)</function-signature>
  <function>
  ③在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提供异步处理



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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值