JSP 基础

JSP 基础


工作原理
1.JSP引擎会将JSP文件编译成.class文件,就是一个servlet类,里面包含了一部分servlet里需要的对象和变量,还有以MAP参数传入的用户数据。
2.当请求这个JSP文件时就是把相关用户参数作为参数引用这个servlet类里的一个jspservic方法进行返里页面内容。



JSP 语法
1.脚本程序可以包含任意量的Java语句、变量、方法或表达式,只要它们在脚本语言中是有效的。
语法格式:
<% 代码片段 %>



JSP声明(只是定义好,不进行输出)
1.一个声明语句可以声明一个或多个变量、方法,供后面的Java代码使用。在JSP文件中,您必须先声明这些变量和方法然后才能使用它们。
JSP声明的语法格式:
<%! declaration; [ declaration; ]+ ... %> //多了一个“!”



JSP表达式(结果变成String放到这里来)
1.一个JSP表达式中包含的脚本语言表达式,先被转化成String,然后插入到表达式出现的地方。
2.由于表达式的值会被转化成String,所以您可以在一个文本行中使用表达式而不用去管它是否是HTML标签。
3.表达式元素中可以包含任何符合Java语言规范的表达式,但是不能使用分号来结束表达式。
JSP表达式的语法格式:
<%= 表达式 %>



JSP注释
<%-- 注释 --%> JSP注释,注释内容不会被发送至浏览器甚至不会被编译
<!-- 注释 --> HTML注释,通过浏览器查看网页源代码时可以看见注释内容



JSP指令(是在生成servlet时进行的)
JSP指令用来设置与整个JSP页面相关的属性。(就是servlet里的有关对象的属性)
JSP指令语法格式:
<%@ directive attribute="value" %>

<%@ page ... %> 定义页面的依赖属性,比如脚本语言、error页面、缓存需求等等
<%@ include ... %> 包含其他文件
<%@ taglib ... %> 引入标签库的定义,可以是自定义标签

http://www.runoob.com/jsp/jsp-directives.html



JSP行为(是有请求时进行的)
JSP行为标签使用XML语法结构来控制servlet引擎。
一种语法格式:
<jsp:action_name attribute="value" />


include指令,它是在JSP文件被转换成Servlet的时候引入文件,而这里的jsp:include动作不同,插入文件的时间是在页面被请求的时候。
http://www.runoob.com/jsp/jsp-actions.html



JSP隐含对象
JSP支持九个自动定义的变量,江湖人称隐含对象。(就是servlet里默认包含的对象)
request HttpServletRequest类的实例
response HttpServletResponse类的实例
out PrintWriter类的实例,用于把结果输出至网页上
session HttpSession类的实例
application ServletContext类的实例,与应用上下文有关
config ServletConfig类的实例
pageContext PageContext类的实例,提供对JSP页面所有对象以及命名空间的访问
page 类似于Java类中的this关键字
Exception Exception类的对象,代表发生错误的JSP页面中对应的异常对象

http://www.runoob.com/jsp/jsp-implicit-objects.html



JSP 表单处理
JSP 读取表单数据
getParameter(): 使用 request.getParameter() 方法来获取表单参数的值。
getParameterValues(): 获得如checkbox类(名字相同,但值有多个)的数据。 接收数组变量 ,如checkbox类型
getParameterNames():该方法可以取得所有变量的名称,该方法返回一个Emumeration。
getInputStream():调用此方法来读取来自客户端的二进制数据流。

<form action="main.jsp" method="POST/GET">
站点名: <input type="text" name="name">
<br />
网址: <input type="text" name="url" />
<input type="submit" value="提交" />
</form>



JSP 过滤器(实际就是java的过滤器)
JSP 和 Servlet 中的过滤器都是 Java 类。
过滤器可以动态地拦截请求和响应,以变换或使用包含在请求或响应中的信息。
可以将一个或多个过滤器附加到一个 Servlet 或一组 Servlet。过滤器也可以附加到 JavaServer Pages (JSP) 文件和 HTML 页面。



JSP Cookie 处理
JSP Cookie 处理需要对中文进行编码与解码,方法如下:
String   str   =   java.net.URLEncoder.encode("中文");            //编码
String   str   =   java.net.URLDecoder.decode("编码后的字符串");   // 解码


使用JSP设置Cookie
Cookie cookie = new Cookie("key","value");//cookie名称和值做参数//名称和值中都不能包含空格或者如下的字符:[ ] ( ) = , " / ? @ : ;
cookie.setMaxAge(60*60*24);//设置有效期
response.addCookie(cookie);// 将cookie发送至HTTP响应头中

使用 JSP 读取 Cookie
Cookie cookie = null;
   Cookie[] cookies = null;
   // 获取cookies的数据,是一个数组
   cookies = request.getCookies();
   if( cookies != null ){
      out.println("<h2> 查找 Cookie 名与值</h2>");
      for (int i = 0; i < cookies.length; i++){
         cookie = cookies[i];

         out.print("参数名 : " + cookie.getName());
         out.print("<br>");
         out.print("参数值: " + URLDecoder.decode(cookie.getValue(), "utf-8") +" <br>");
         out.print("------------------------------------<br>");
      }
  }


使用JSP删除Cookie
Cookie cookie = null;
   Cookie[] cookies = null;
   // 获取当前域名下的cookies,是一个数组
   cookies = request.getCookies();
   if( cookies != null ){
  out.println("<h2> 查找 Cookie 名与值</h2>");
      for (int i = 0; i < cookies.length; i++){
         cookie = cookies[i];
         if((cookie.getName( )).compareTo("name") == 0 ){
            cookie.setMaxAge(0);
            response.addCookie(cookie);
            out.print("删除 Cookie: " +
            cookie.getName( ) + "<br/>");
         }
         out.print("参数名 : " + cookie.getName());
         out.print("<br>");
         out.print("参数值: " + URLDecoder.decode(cookie.getValue(), "utf-8") +" <br>");
         out.print("------------------------------------<br>");
      }
  }


JSP Session
if (session.isNew()){
      title = "访问菜鸟教程实例";
      session.setAttribute(userIDKey, userID);
      session.setAttribute(visitCountKey,  visitCount);
   } else {
   visitCount = (Integer)session.getAttribute(visitCountKey);
   visitCount += 1;
   userID = (String)session.getAttribute(userIDKey);
   session.setAttribute(visitCountKey,  visitCount);
   }



JSP 页面重定向
public void response.sendRedirect(String location)
throws IOException

您也可以使用setStatus()和setHeader()方法来得到同样的效果:
....
String site = "http://www.runoob.com" ;
response.setStatus(response.SC_MOVED_TEMPORARILY);
response.setHeader("Location", site);
....



JSP 自动刷新
JSP提供了一种机制来使这种工作变得简单,它能够定时地自动刷新页面。
public void setIntHeader(String header, int headerValue)

<%
   // 设置每隔5秒刷新一次
   response.setIntHeader("Refresh", 5);
   // 获取当前时间
   Calendar calendar = new GregorianCalendar();
   String am_pm;
   int hour = calendar.get(Calendar.HOUR);
   int minute = calendar.get(Calendar.MINUTE);
   int second = calendar.get(Calendar.SECOND);
   if(calendar.get(Calendar.AM_PM) == 0)
      am_pm = "AM";
   else
      am_pm = "PM";
   String CT = hour+":"+ minute +":"+ second +" "+ am_pm;
   out.println("当前时间为: " + CT + "\n");
%>


JSP 发送邮件



JSP 标准标签库(JSTL)(就是用标签的方式替代代码的一个库,方便使用)



猜你喜欢

转载自huangyongxing310.iteye.com/blog/2358708