zoukankan      html  css  js  c++  java
  • JSP知识归纳总结

    jsp的9个隐含对象 request ,response ,pageContent,session,application,config,out,page.exception

    request:HTTPServletRequest的一个对象、

    response:HTTPServletResponse的一个对象、

    pageContent:页面的上下文,是PageContent的一个对象,可以从该对象获取其他8个隐含对象

    session:代表浏览器和服务器的一次会话,是HTTPSession的对象

    application:代表web当前应用,是ServletContent的对象

    config:当前jsp对应的Servlet的ServletConfig对象(几乎不使用)

    out:JspWriter对象 调用out.println()直接把字符串打印在浏览器上;

    page :指当前jsp对象的Servlet对象的引用

    exception: 在声明了page指令的 isErrorPage=“true”才可以使用

    Jsp运行原理:本质上是一个Servlet

    每个jsp页面在第一次访问时,jsp引擎将他翻译成一个Servlet源程序,接着再把这个Servlet源程序编译成Servlet的class文件 然后再由web容器(Servlet引擎)像调用普通Servlet程序一样的方式
    来执行这个jsp页面翻译成的Servlet程序。

    Jsp表达式
    <%
    Date date =new Date();
    System.out.println(date);
    %>
    <% = date%>

    Jsp声明: jsp声明将java代码封装在<%!和%>之中,他里面的代码将被插入进servler的_jspServlet方法的外面(在jsp页面中几乎不用)

    二:
    和属性相关的方法

    方法
    Object getAttribute(String name)获取指定属性
    Enumeration(枚举) getAttributeNames()获取所有属性的名字组成的Enumeration对象
    removeAttribute(String name) 删除指定属性
    setAttribute(String name, Object o)设置属性

    pageContent response session application都有这些方法!

    这四个对象也成为域对象
    pageContext.setAttribute("pageContextAttr", "pageContextValue");
    request.setAttribute("requestAttr", "prequestValue");
    session.setAttribute("sessionAttr", "sessionValue");
    application.setAttribute("applicationAttr", "applicationValue");

    <br><br>
    pageContextAttr:<%=pageContext.getAttribute("pageContextAttr") %>
    <br><br>
    requestAttr:<%=request.getAttribute("requestAttr") %>
    sessionAttr:<%= session.getAttribute("sessionAttr")%>
    <br><br>
    <%applicationAttr:<%=application.getAttribute("applicationAttr") %>


    pageContext:属性的作用范围仅限于当前jsp页面
    request:仅限于同一个请求(在转发的情况下可以跨页面获取属性值)
    session:属性的作用范围限于一次会话:(浏览器打开直到关闭称成为一次会话)
    application:属性的作用范围限于当前web应用 是范围最大的作用范围,只要在一处设置属性,在其他各处的JSP或Servlet
    都可以获取得到

    在Servlet中获取:
    在Servlet中不能获取pageContext对象

    //request
    PrintWriter out=response.getWriter();
    Object requestAttr=request.getAttribute("requestAttr");
    out.print(requestAttr);

    //session 通过getSession()获得session对象
    Object sessionAttr=request.getSession().getAttribute("sessionAttr");
    System.out.println(sessionAttr);

    //application 因为application是ServletContext类 所以通过getServletContext()获得ServletContext对象
    Object applicationAttr=getServletContext().getAttribute("applicationAttr");
    System.out.println(applicationAttr);


    转发和重定向
    本质区别:请求的转发只发出了一次请求(地址栏不变),而重定向则发出了两个请求(地址栏变化,不再是初次请求的地址,是最后响应的那个地址)
    转发: 在最终的Servlet中,request对象和中转的那个request是同一个对象
    重定向: 在最终的Servlet中,request对象和中转的那个request不是同一个对象
    转发:只能转发给当前WEB的资源
    重定向:可以重定向到任何资源
    转发:/代表的是当前WEB应用的根目录
    重定向:/代表的是当前WEB站点的根目录
    //转发(request) RequestDispatcher是一个接口
    String path="testServlet";
    RequestDispatcher requestDispatcher=request.getRequestDispatcher("/"+path); /表示根目录
    requestDispatcher.forward(request, response);

    //重定向(response)
    String path="testServlet";
    response.sendRedirect(path);

    注意:WEB应用的根目录:http://localhost:8080/Ajax
    WEB站点的根目录:http://localhost:8080/

    Jsp指令; JSP指令时为了JSP引擎而设计的,他们并不产生任何输出,而只是告诉引擎如何处理JSP页面的其余部分 page include taglib
    page指令:用于定义JSP页面的各种属性,无论Page出现在jsp页面的什么地方,他的作用都是整个jsp页面,但是为了编程习惯,最好放在其实位置
    常用page指令
    1. import属性:当前JSP页面对应的Servlet需要导入的类
    <%@ page import="java.util.*" %>
    2. session属性:取值为 false或true 指定当前页面的session隐藏变量是否可用,也可以说访问当前页面时是否生成HttpSession对象
    <%@page session="false" %>
    3. errorPage和isErrorPage
    <%@ page errorPage="/error.jsp" %> 指令当前页面出现错误的页面是什么 /是当前web的根目录,响应error.jsp其实是一个转发的过程
    <%@ page isErrorPage="true"%> 指令当前页面是否是错误处理页面,可以说明当前是否可以使用一个exception隐藏变量,

    如何使客户不能直接访问某一个页面呢?
    对于Tomcat服务器而言,WEB-INF下的文件不能通过浏览器在浏览器中直接输入地址的方式来访问的,因为那里一般都是放的隐私文件,
    但通过请求的转发是可以的<%@ page errorPage="/WEB-INF/error.jsp" %>(响应error.jsp其这里是一个转发过程),
    还可以在web.xml文件中配置错误页面:
    <error-page>
    <error-code>404</error-code> 指定错误的代码,404没有指定的资源,500内部错误
    <location>/WEB-INF/error.jsp</location> 响应页面的位置
    </error-page>
    <error-page>
    <exception-type>java.lang.ArithmeticException</exception-type>
    <location>/WEB-INF/error.jsp</location>
    </error-page>
    4.contentType:指定当前页面的响应类型,实际调用的是response.setContentType("text/html;charset=UTF-8")
    对于jsp页面,一般是text/html;charset=UTF-8,charset返回页面的编码

    5.pageEncoding:指定当前JSP页面的编码

    6.isELIgnored:指定当前jsp页面是否可以使用EL表达式 通常取值为true


    include指令:合并一个页面,转为servlet源文件中,这种在源文件的级别进行引入的方式是静态引入,当前jsp页面与静态引入的页面紧密结合为一个servlet
    <%@ include file="b.jsp" %> file属性指定引入文件的相对路径,如果以/开头,表示相当于当前web应用的根目录,否则,表示相对于当前文件
    jsp:include标签:
    1. <jsp:include page="b.jsp"></jsp:include>
    2.动态引入:并不是像lnclude指令生成一个Servlet源文件,而是生成两个Servlet两个源文件。通过一个方法的方式吧目标页面包含进来
    org.apache.jasper.runtime.JspRuntimeLibrary.include(request, response, "b.jsp", out, false);

    include指令和 jsp:include标签:

    jsp:include标签是当前JSP页面的执行期间插入被引入资源的输出内容


    jsp:forward标签:相当于转发
    <jsp:forward page="b.jsp"></jsp:forward>
    相当于 <%
    request.getRequestDispatcher("b.jsp").forward(request, response);
    %>

    2.在使用jsp:forward可以使用jsp:param子标签向b.jsp传入一些参数 同样 jsp:include标签也可以使用jsp:param子标签

    <jsp:forward page="b.jsp">
    <jsp:param value="abc" name="username"/>
    </jsp:forward>

    <jsp:include page="b.jsp">
    <jsp:param value="abc" name="username"/>
    </jsp:include>

    b.jsp中获取:
    <%=request.getParameter("username") %>

    关于中文乱码问题:
    1,保住 contentType="text/html; charset=UTF-8" conpageEncoding="UTF-8",charset和conpageEncoding一致,
    且都支持中文,还需要保证浏览器编码和JSP页面的编码相同
    2,获取中文参数值:例如表单里的username的值
    对于post请求:在获取请求信息之前调用一个方法<%request.setCharacterEncoding("utf-8"); %>
    对于get请求: 1. String val=request.getParameter("username");
    String username=new String(val.getBytes("iso-8859-1"),"UTF-8");
    out.print(username); 先解码,在编码

    2.也可以通过修改Tomcat的servlet.xml文件的方式 为Connector 结点添加useBodyEncodingForURI="true"即可
    <Connector port="8080" protocol="HTTP/1.1"
    connectionTimeout="20000"
    redirectPort="8443"
    URIEncoding="UTF-8" useBodyEncodingForURI="true"/>

  • 相关阅读:
    053-509
    053-298
    053-255
    css实现省略号
    github上写blog
    解决内容被挤压缩小问题
    request.getRequestDispather().forward()与response.sendRedirect()
    资料,来自HTML5前端开发学习⑤群
    checkbox与jq<转>2
    checkbox与jq<转>
  • 原文地址:https://www.cnblogs.com/wrkjwl/p/9113844.html
Copyright © 2011-2022 走看看