java西天取经之路(三)JSP技术学习要点

来源:互联网 发布:北京政务数据资源网 编辑:程序博客网 时间:2024/06/06 10:03

1、JSP(Java Server Pages)是一种动态网页技术标准。在传统的网页HTML文件上(*.htm,*.html)中插入Java程序段(Scriptlet)和JSP标记(tag),从而形成JSP文件(*.jsp)。JSP可以在任何支持JSP的服务器中运行。JSP技术使用java语言编写动态网页的处理逻辑。小逻辑可以直接和html代码混写在一起,大逻辑可以编写成独立的java类(java bean)。所以说jsp支持逻辑和视图的分离,即支持可重用的基于组件的设计,使基于web的应用程序的开发变得迅速。

     JSP与java servlet一样,是在服务器端执行的,通常返回给客户端的就是一个HTML文本,因此客户端只要有浏览器就能浏览。JSP页面由HTML代码和嵌入其中的java代码所组成。服务器在页面被客户端请求以后。对这些java代码进行处理,然后将生成的HTML页面返回客户端的浏览器。

    JSP页面在执行时被转发成普通的java文件,编译成class文件,并将class类实例作为对象,接受客户端提交参数。其原理是用户通过浏览器向服务器发送页面请求,服务器加载并执行JSP页面,接受客户请求,并将处理结果发送给浏览器。

   指令(directives)用来提供整个JSP网页的信息,并用来设定JSP网页的相关属性:

JSP的指令为:page、include、taglib三种指令,每一种指令都有自己的属性。

page指令:

<%@page import="java.utl.*"%>

<%@page contentType="text/html;charset=UTF-8"%>

<%@page language="java" import="java.utl.*" pageEncoding="UTF-8"%>

include指令:

include指令表示,在JSP编译时包含一个文本或者代码的文件,在这个包含过程是静态的,包含的文件可以是jsp网页,html网页、文本文件,或者一段java程序。注意尽量不要在包含文件中出现<html></html>、<body></body>、<head></head>,因为这会影响原JSP网页中相同的标签,可能会导致不必要的错误。

<%@include file="index.jsp"%>

include指令只有一个file属性,表示包含文件的路径地址。<%@include%>指令是静态包含其他文件。

taglib指令:

taglib能够让我们自定义标签。语法如下:

<%@taglib prefix="" uri="taglib的url地址"%>

属性:

prefix 主要用来区分多个自定义标签

uri  用来指定taglib的url地址

<%!%>  //主要声明JSP中需要的变量和方法,可以一次声明多个变量和方法。但是每个方法或变量必须以分号结束。这些变量都是全局变量。

<%%>   //脚本 声明变量常用<% %>来声明

<%=%> // 表达式 

脚本中可以包含有效的java程序片段:脚本原始以<%开头、以%>结尾。

JSP页面展示时的输入方法:存在out对象中通过print()方法中显示出来。

一是不能以分号作为表达式的结束符号;二是表达式中可以包含任何java语法,有时候也可以作为其他JSP元素的属性值。


JSP内置对象:【编写jsp文件时不用做任何声明即可使用的对象】

out                // javax.servlet.jsp.JspWriter                   数据流标准输出

request         // javax.servlet.http.HttpServletRequest  请求端信息 

response      // javax.servlet.http.HttpServletRequest  响应端信息

session         // javax.servlet.http.Session                    服务器与客户端建立的会话

request:在JSP中除了可以使用窗体隐藏字段传递外,还可以使用setAttribute()和getAttribute()方法。使用范围是JSP发送一个请求到另一个JSP后便会失效。

response:响应对象主要是将JSP处理的数据结果返回给客户端。

session:session对象表示目前个别用户的会话状况,用此机制可以轻易辨别每一个用户,然后可以根据用户的不同给出正确的响应。

session对象也可以储存与用户相关的数据,当用户发送请求到某个*.action时将用户信息存入session中,当这个action请求结束以后,我们可以从这个session中获取到用户信息。

代码如下:

jsp中将用户信息记录到session:

session.setAttribute("username",username);

从session中获取到用户信息:

<%String name = (String)session.getAttribute("username");%>


关于url地址的重定向方法:

方式1、在struts2的配置文件struts.xml相关信息中配置重定向信息:

这个是在action中配置重定向信息,在java web的action层中经常会用到。

<result type="reditect">

${reditectUrl}

</result>

在action中先定义全局变量reditectUrl,并增加getter和setter方法,拼接reditectUrl,最后返回结果信息。当success时获取reditectUrl,并重定向到这个url.


方式2、在jsp页面中的重定向:

response.sendRedirect("authuser.jsp");

response为jsp的内置对象,可以直接用这个对象调用sendRedirect()。意思就是讲当前的页面重定向到authuser.jsp,jsp路径为重定向跳转的页面文件的相对路径或URL以字符串形式写在括号内。


方式3.、服务器端的请求转发到index.jsp:

request.getRequestDispatcher("index.jsp").forward(request,response);

意思就是讲当前的页面重定向到index.jsp,jsp路径为重定向跳转的页面文件的相对路径或URL以字符串形式写在括号内。


服务器端和客户端的跳转:

request.getRequestDispatcher()是服务器端跳转 
response.sendRedirect()是客户端跳转 

sendRedirect是通知浏览器再次提交一个http请求, 
dispatcher是直接转到目的地址,最直接得表现 

方式4、JS实现页面跳转:

<script>
放你做通加的javascrpt代码,例如google的js
window.location.href="www.baidu.com"
</script>


JSP其他内置对象:

内置对象----

application:从Servlet配置对象获得的Servlet上下文:比如在getServletConfig(),getContext()的调用中

exception:表示JSP页面运行时产生的异常

pageContext:本JSP的页面上下文

page:实现处理本页当前请求的类的实例

config:本JSP的ServletConfig


<%@ page language="java" import="java.util.*"pageEncoding="UTF-8"%>

<%@page import="com.feixun.oauth2.common.util.AuthUserUtil"%>

<%@page import="com.feixun.common.baseinfo.UserInfo"%>

<%@ taglib uri="/struts-tags"prefix="s"%>

<%

   String path = request.getContextPath();

   String basePath =

        request.getScheme() + "://" +request.getServerName() + ":" + request.getServerPort() + path + "/";

%>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<htmlxmlns="http://www.w3.org/1999/xhtml">

<head>

<base href="<%=basePath%>/>

<title><s:text name="interfaces.oauth.login.pagetitle.message"/></title>  <title>表示标题

<meta http-equiv="pragma"content="no-cache"/>

<meta http-equiv="cache-control"content="no-cache"/>

<meta http-equiv="expires"content="0"/>

<meta http-equiv="Content-Type"content="text/html;charset=utf-8" />

<!--  引用的js文件要在head标签中定义-->

<link rel="stylesheet" href="customize/resources/default/css/basic.css"type="text/css"/>

<link rel="stylesheet" href="customize/resources/default/css/account.css"type="text/css"/>

<link rel="stylesheet" href="customize/resources/default/css/popLayer.css"type="text/css"/>

<script src="customize/js/jquery.js"></script>

<script src="customize/js/basic.js"></script>

<script src="customize/js/Droplist.js"></script>

<script type="text/javascript" src="customize/js/radio.js"></script>

<script src="customize/js/popLayer.js"></script>

<script src="customize/js/PopWin.js"></script>

<script type="text/javascript" src="customize/js/AutoComplete.js"></script>

<jsp:include page="otpscript.jsp"/>

</head>

</head>

<body>

正文主体

 <div id="head"><%@includefile="header.jsp"%></div>   <!--引入jsp文件->

 <!—html标签、CSS样式、JS脚本-->

</body>

</html>


otpscript.jsp

<%@ page language="java" import="java.util.*"pageEncoding="UTF-8"%>

<%@page import="com.opensymphony.xwork2.ActionContext"%>

<%@ taglib uri="/struts-tags"prefix="s"%>

<%@page import="com.feixun.common.baseinfo.UserInfo"%>

<%

Locale locale =ActionContext.getContext().getLocale();

String language =locale.getLanguage();

%>

<script type="text/javascript">

<%-- 加载鉴权方式 --%>

if(window.attachEvent)

{

         window.attachEvent("onload",function() {loadPage();});

}

else

{

         window.addEventListener("load",function() {loadPage();},true);

}

function loadPage()

{

         if('<s:propertyvalue="imgVerifyConfigValue" />'=='1')

         {

                   document.getElementById("input_imgvcode").style.display="";

         }

         else

         {

                   document.getElementById("input_imgvcode").style.display="none";

         }





 



0 0
原创粉丝点击