初遇jsp

在传智播客老师的带领下,我们已经学过几天javaweb的课程了,但都是停留在servletcookiesession的学习上,仅仅是知识点的讲解不免枯燥乏味,今天我们终于开始揭开jsp的神秘面纱了。

既然前奏学习了很多servlet知识,说明jsp和它还是很有渊源的嘛。在实际运用中,jsp大大提高了程序员开发网页的效率,实质上,jsp在服务器容器中运行时首先会被转译成为java代码(servlet),然后再进行编译成class文件。如图:

JSP常用的共有三种JSP指令,它们是被设置在<%@和%>括号中插入到HTML网页的。

JSP的标准指令格式:

<%@ 标准指令(与其属性 )%>

<%@ diectivename
 attribute=“value”,
 attribute=“value”%>

JSP共有三种标准指令

JSP标准指令

用途

范例

@page

设定JSP整体信息

<%@page import=“java.util.*”%>

@innclude

在JSP内包含其他JSP内容

<%@include file=“leftframe.jsp”%>

@taglib

在JSP内使用“自定义标签”

<%@taglib  prefix=“abc”uri=“taglib.tld”%>

我们最常用的就是@page@taglib了,通常使用@page指令设置网页的字符集编码,使用@taglib在JSP内使用“自定义标签”。

另外不得不说的就是jsp的内置隐式对象了,JSP内部有一个隐含对象集合,编写JSP页面中,可以直接调用这些隐含对象中的方法而不必事先要把它实例化。简化了JSP页面的开发。

隐含对象

对象类型

说明

Request

javax.servlet.http.HttpServlerRequest

封装了浏览器发出的请求对象,它的作用域是一个完整的请求,这将作为_jspService的入口参数

Response

javax.servlet.http.HttpServlerResponse

封装响应内容的对象,具有页面的作用域

pageContext

javax.servlet.jsp.PageContext

PageContext对象给JSP提供当前请求页面的信息,该信息也被称做页面属性,可以通过对该对象获取JSP页面的其他隐含对象

Session

javax.servlet.http.HttpSession

客户端发送一个请求时,在服务器上将创建一个会话维护这个客户的各种操作,该对象称为session,只要指令标签中没有将会话取消(<%@ page session=”false”%>,就可以使用该对象,通过session对象的setAttributegetAttribute方法可维护session中的对象。

Out

javax.servlet.jsp.JspWriter

out对象将响应的信息输出到网页上,其缓冲大小通过page指令标签的buffer属性设置

Application

javax.servlet.ServletContext

它提供了一组和Web容器通信的方法,每个应用程序都有一个上下文,这意味着Application对象能够在应用程序的整个生命周期访问。

Config

javax.servlet.ServletConfig

Config对象使用Web容器在初始化JSP之前得到JSP配置信息,config的作用域为页面

Page

java.lang.Object

page对象对应Java中的关键字this,它代表当前JSP页面

Exception

java.lang.Throwable

java.lang.Throwable的一个实例,它代表未扑获的异常,只有在page指令中指定isErrorPage=”true”属性,将JSP页面标识为错误处理页面,才可以使用这个对象

说它们是完全隐匿的是不正确的,虽然它们不需要我们去创建就能直接使用它们,是因为服务器容器早就为我们作好了声明,如图:

Jsp中标准动作元素的使用:

课堂小练习:模拟大唐电信不同用户角色登录(<jsp:forward>

当用户名和密码为空时:

角色用户名或密码错误效果

正确登录效果

这主要使用到了<jsp:forward page=" "><jsp:param value=" " name=""/></jsp:forward>技术,通过<jsp:param value=" " name=""/>可以在页面间传递参数。

loginCheck.jsp源码如下:

<%

String username = request.getParameter("t_user_id");

String password = request.getParameter("t_password");

String depart = request.getParameter("t_role");

if(username != null && !"".equals(username.trim()) && password != null && !"".equals(password.trim())){

if("a".equals(depart.trim())){

if("opt".equals(username.trim()) && "opt".equals(password.trim())){

%>

<jsp:forward page="/operator/index.jsp">

<jsp:param value="操作员" name="t_user_id"/>

</jsp:forward>

<%

}else{

%>

<jsp:forward page="/login/login.jsp">

<jsp:param value="操作员的用户名或密码错误" name="error"/>

</jsp:forward>

<%

}

}else if("b".equals(depart.trim())){

if("manager".equals(username.trim()) && "manager".equals(password.trim())){

%>

<jsp:forward page="/manager/index.jsp">

<jsp:param value="主管" name="t_user_id"/>

</jsp:forward>

<%

}else{

%>

<jsp:forward page="/login/login.jsp">

<jsp:param value="主管的用户名或密码错误" name="error"/>

</jsp:forward>

<%

}

}else if("c".equals(depart.trim())){

if("emp".equals(username.trim()) && "emp".equals(password.trim())){

%>

<jsp:forward page="/employee/index.jsp">

<jsp:param value="普通员工" name="t_user_id"/>

</jsp:forward>

<%

}else{

%>

<jsp:forward page="/login/login.jsp">

<jsp:param value="普通员工的用户名或密码错误" name="error"/>

</jsp:forward>

<%

}

}

}else{

%>

<jsp:forward page="/login/login.jsp">

<jsp:param value="用户名或密码不能为空" name="error"/>

</jsp:forward>

<%

}

%>

login.jsp页面构造接受loginCheck.jsp验证不通过的错误信息:

<body bgcolor="#000000" id="main">

<%

request.setCharacterEncoding("UTF-8");

response.setContentType("text/html;charset=UTF-8");

String error = request.getParameter("error");

if (error != null) {

out.print("<div id='error'><div style='background:white;border:solid white 20px;color:red;margin-left:40%;margin-top:200px;width:268px;height:80px;font-weight:bolder'><center>"

+ error

+ "!<br /><input type='button' value='确定' onclick='closediv()'/></center></div></div>");

}

%>

并为该div设置css样式以及为“确定”按钮设置动作:

#error {

margin: 0 auto;

width: 100%;

height: 100%;

position: absolute;

left: 0px;

top: 0px;

background: black;

filter: alpha(opacity = 90);

}

</style>

<script type="text/javascript">

function closediv(ob) {

var p = document.getElementById("main");

var d = document.getElementById("error");

p.removeChild(d);


}

</script>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值