JSP学习与理解(一)

一.JSP的运用



1).WHY
JSP是简Servlet编写的一种技术,它将Java代码和HTML语句混合在同一个文件中编写,只对网页中的要动态产生的内容采用java代码来编写,而对固定不变的静态内容采用普通静态html页面的方式编写。

Java Server Page:java服务器网页,在html页面编写java代码



2).新建一个JSP页面,在body节点内的<% %> 即可编写java代码

<body>
  <%
     Date date=new Date();
     System.out.println(date);
   %>
</body>



3).可以放置在WEB应用程序中的除了WEB-INF及其子目录外的其他任何目录中,JSP页面的访问路径和普通html的访问路径形式也完全一样。




4).JSP的运行原理:JSP本质上是一个Servlet
每个JSP页面在第一次被访问时。JSP引擎将它翻译成一个Servlet源程序,接着再把这个Servlet源程序编译成Servlet的class类文件,然后再由WEb容器(Servlet引擎)向调用普通Servlet程序一样的方式来装载和解释执行这个由jsp翻译成的Servlet程序。



5)JSP页面的隐含变量:

public void _jspService(HttpServletRequest request,HttpServletReponse reponse)throws java.io.IOException,ServletException{
       PageContext pageContext=null;
       HttpSession session=null;
       ServletContext application=null;
ServletConfig config=null;
JspWriter out=null;
object page=this;
//...
//使用<% %>编写的代码在此位置,可以用到request,reponse,pageContext,session
//application,config,out,page这8个隐含对象。(实际上还可以使用一个叫exception的隐含对象)
}

1.request:HttpServletRequest的一个对象.
2.reponse:HttpServletRepomse的一个对象(在JSP页面中几乎不会调用reponse的任何方法。)
3.pageContext:页面的上下文,是PageContext的一个对象。可以从该对象获取到其他8个隐含对象,也可以从中获取到当前页面的其他信息。(学习自定义标签时使用它)
4.session:代表浏览器和服务器的一次会话,是HttpSession的一个对象。
5.application:代表当前WEB应用,是ServletContext对象。
6.config:当前JSP对应的Servlet的ServletConfig对象(几乎不使用)。若需要访问当前Jsp配置的初始化参数,需要通过映射的地址才可以。



映射JSP:

<servlet>
    <servlet-name>hellojsp</servlet-name>
    <jsp-file>/hello.jsp</jsp-file>
    <init-param>
       <param-name>test</param-name>
       <param-value>testValue</param-value>
    </init-param>
</servlet>

<servlet-mapping>
     <servlet-name>hellojsp</servlet-name>
     <url-pattern>/hellojsp<url-pattern>
<servlet-mapping>


7.out:JspWriter对象,调用out.println() 可以直接把字符串打印到浏览器上。
8.page:指向当前JSP对应的Servlet对象的引用,开发的时候几乎不使用。
9.exception:在声明了page指令的isErrorPage="true"时,才可以使用

<%@ page isErrorPage="true" %>


pageContext,request,session,application(对属性的作用域的范围从小到大)
out,config,page,reponse


二.JSP基本语法



1).JSP模板元素:JSP页面中的静态HTML内容



2).JSP表达式(expression)提供了将一个JAVA变量或表达式的计算结果输出到客户端的简化方式,它将要输出的变量或表达式直接封装在<%=和%>之中。




3).JSP脚本片段(Scriptlet)是指嵌套在<%和%>之间的一条或多条java程序代码
多个脚本片段中的代码可以相互访问




 <%
     String ageStr=request.getParameter("age");
     Integer age=Integer.parseInt(ageStr);
     if(age>=18){
         out.println("成年..");
     }else{
         out.println("未成年...");
     }
   %>

 




4).JSP声明:JSP声明将Java代码封装在<%和%>之中,它里面的代码将被插入进Servlet的_jspServlet方法的外面(在JSP页面中几乎不用)



5).JSP注释的格式
<%-- JSP注释--%> <!--HTML注释 -->
区别:JSP注释可以制止java代码的运行



和属性相关的方法:
1).
Object getAttribute(String name):获取指定的属性
Enumeration getAttributeNames():获取所有的属性的名字组成的Enumeration对象
removeSttribute(String name):移除指定的属性
void serAttribute(String name,Object o):设置属性



2).pageComtext,request,session,application对象都有这些方法
这四个对象也称为域对象。

pageContext:属性的作用范围仅限于当前JSP页面

request:属性的作用范围仅限于同一个请求。
session:属性的作用范围仅限一次会话,浏览器打开到关闭称之为一次会话(在此期间会话不失效。)
application:属性的作用范围限于当前WEB应用。是范围最大的属性作用范围,只用在一处设置属性,在其他各处的JSP或Servlet中都可以得到



6.请求的转发和重定向



请求的转发:
1.调用HttpServletRequest的getRequestDispatcher()方法获取RequestDispatcher对象
调用getRequestDispatcher()需要传入转发的地址

String path="testServlet";
RequestDispatcher requestDispatcher=request.getRequestDispatcher("/"+path);

 



2.调用httpServletRequest的forward(request,reponse)进行请求转发
RequestDispatcher.forward(request,reponse);



2).请求的重定向代码:
执行请求的重定向,直接调用reponse.sendRedirect(path)方法
//path为重定向的地址
String path="testSetvlet";
reponse.sendRedirect(path);
1).本质区别:请求的转发只发了一次请求,而重定向则发了两次请求



具体:
1.地址栏是初次请求的地址;
请求的重定向:地址栏不再是初次发出的地址,地址栏为最后响应的地址

2.请求转发:在最终的Servlet中,request对象和中转的那个request是同一个对象。
请求的重定向:在最终的Servlet中,request对象和中转的那个request不是同一个对象。

3.请求转发:只能转发给当前WEB应用的资源
请求的重定向:可以定向到任何资源.

4.请求转发:/代表当前WEB应用的根目录
请求的重定向:/代表WEB站点的根目录。


三.JSP指令


JSP指令:JSP指令是为JSP引擎设计的,他们并不直接产生任何可见输出,而是告诉引擎如何处理jsp页面中的其余部分


常见的有page,include,taglib
Page指令:
page指令用于定义JSP页面的各种属性,无论page指令出现在JSP页面的什么地方,它 作用的都是整个JSP页面,为了保持程序的可读性和遵循良好的编程习惯,page指令最好放在整个jsp页面的起始部分.



2)page指令常用的属性:
1import属性:指定当前JSP页面对应的Servlet需要导入的类;

<%@page import="java.text.DateFormat"%>


2.session属性:取值为true或false,指定当前页面的session隐藏变量是否可用,也可以说访问当前页面是是否一定生成httpSession对象。

<%page session="false"%>


1.errosPage和isErrorPage:



>errorPage指定若当前页面出现错误的实际响应页面时。其中/表示的是当前WEB应用的根目录。

<% page errorPage="/error.jsp"%


>isErrorPage指定当前页面的错误处理页面,可以说明当前页面是否可以使用Exception隐藏变量,需要注意的是isErrorPage="true",并使用exception的方法了,一般不建议能够直接访问该页面
>如何使客户不能直接访问某一个页面呢? 杜宇Tomcat服务器而言,WEB-INF下的文件是不能通过在浏览器直接输入来访问的,但通过请求转发是可以的。



4.contentType:指定当前JSP页面的响应类型。实际调用的是reponse,setContentType="text/html; charset=UTF-8"
通常情况下,对于JSP页面而言其取值均为text/html;chaeset=UTF-8.charset指定返回的页面的字符编码是什么。通常是UTF-8



5.pageEncoding:指定当前JSP页面的字符编码,通常情况下该值和contextType中的charset一致。



3.include指令:
1).include指令用于通知JSP引擎在翻译当前JSP页面时将其他的内容合并进当前JSP页面转换成的Servlet源文件中,这种在源文件级别进行引入的方式 称为静态引入,当前JSP页面与静态引入的页面紧密结合为一个Servlet
2).file属性的设置值必须使用相对路径。如果以"/"开头,表示当前WEB应用程序的根目录(注意不是站点根目录),否则,表示相对于当前文件。



4.jsp:include标签
1).<jsp:include page="b.jsp"></jsp:include>
2).动态引入:并不是像include指令一样生成一个Servlet院文明就挨骂,而是生成两个Servlet源文件,然后通过一个方法的方式把目标页面包含进来。
org.apache.jasper.runtime.JspRuntimeLibrary.include(request,reponse,"b.jsp",out,flase);



5.include指令和jsp:include标签:
1).<jsp:include>



jsp:forward:

1).<jsp:forward page="/include/b.jsp"></jsp:forward>

<%request.getRequestDispatcher("/include/b.jsp").forward(request,response)%>


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

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

or

<jsp:forward page="/include/b.jsp"></jsp:forward>
<jsp:param value="abcd" name="username"/>
</jsp:include>
在b.jsp页面可以通过request.getParameter("username")虎丘到传入的请求参数。

猜你喜欢

转载自www.cnblogs.com/yuyiWang/p/9404647.html