JSP培训(4)——实例:登录功能、jsp:forward标签、jsp:include标签、include指令、EL、c:if

来源:互联网 发布:淘宝店店铺介绍在哪写 编辑:程序博客网 时间:2024/04/27 17:42

 

目标:
l         进一步体会JSP应用;
l         掌握表达式语言的使用;
l         掌握标准标签库的使用;
l         掌握<jsp:forward>标签的使用;
l         掌握<jsp:include>标签的使用;
l         掌握<%@ include指令的使用。
内容:
l         通过登录功能进一步体会JSP技术,在开发过程中介绍表达式语言和JSTL的用法;
l         在此基础上对代码进行修改,体会相关标签的用法。
1、 要完成的功能
完成登录功能,首先需要一个用于输入登录信息的界面(用户名和口令),然后有处理文件完成判断,处理文件用于判断登录信息是否合法。如果成功,使用登录成功的界面进行响应,如果登录失败,应该专向登录失败的界面。
假设:因为数据库连接相关内容没有介绍,不能进行真正的登录验证,所以假设用户名为zhangsan,口令为lisi的时候登录成功,其它情况登录失败。
2、 首先编写登录界面
    <%@ page contentType="text/html;charset=gb2312"%>
请登录<br>
<form name="form1" method="post" action="login_process.jsp">
   用户ID:<input type="text" name="userid"><br>
   口令:<input type="password" name="userpass"><br>
       <input type="submit" value="登录"><input type="reset" value="重置">
</form>
注意:这里没有进行客户端验证,主要强调其它内容,在实际处理中,只要涉及输入信息就应该进行验证。
 
用户输入信息之后,需要对用户输入的信息进行验证,判断用户输入信息是否正确,这里不用嵌入Java代码的方式,使用JSTL中的标签完成判断,下面介绍如何判断。
3、 如何判断?
在JSTL的核心标记库(core)有一个if标记用于完成判断。使用方法如下:
1)需要把两个压缩包jstl.jar和standard.jar放到WEB-INF/lib下面;
2)声明核心标记库
<%@ taglib prefix=”c” uri=”http://java.sun.com/jsp/jstl/core”%>
3)使用if标记
基本语法格式:<c:if test=”” [var=”” scope=””]> 满足条件的时候要执行的代码</c:if>
test属性是必须的,是if的判断条件,var属性和scope属性是可选的,如果希望把判断的结果保存起来,可以使用var属性和scope属性,var属性指出保存的变量的名字,scope指出变量的作用范围。test的内容应该是结果为true或者false的表达式语言的值。要使用表达式语言,下面介绍表达式语言的基本用法。
4、 表达式语言(EL)的使用
基本格式:开始标记“${” 结束标记“}”
中间的内容可以是某个对象,某个对象的属性,若干对象的运算结果。
例(访问请求参数中的值):
如果要操作用户输入的userid,可以使用 ${param.userid} 相当于下面的代码:
<%
   String userid = request.getParameter(“userid”);
   out.println(userid);
%>
例(访问某个对象的属性):
如果要操作某个对象的属性,假设在request中存在对象user(类型为User),user有属性userid,要直接显示这个userid,如何显示,采用EL,可以写成${user.userid},相当于下面的代码:
<%
User user = request.getAttribute(“user”);
String userid = user.getUserid();
out.println(userid);
%>
注意:对属性的访问方式也可以使用中括号,例如可以使用下面的代码访问userid:
${user[“userid”]}
两种情况下只能使用中括号的方式:
l         如果属性中包含了特殊符号,例如“.”;
l         如果要访问的属性是一个变量。
例(在表达式语言中进行运算):
如果要进行运算:${3+5}
下面介绍在EL中可以使用那些运算。
5、 EL中可以进行哪些运算?
常用的运算如下:
1)数学运算
+-*/ %
2)关系运算
> >= == <= < != 
3) 逻辑运算
&& || !
6、 如何编写这个处理程序login_process.jsp
登录成功或者失败的时候直接提示。
<%@ page contentType="text/html;charset=gb2312"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<c:if test="${param.userid==/"zhangsan/" && param.userpass==/"lisi/"}">
   登录成功!
</c:if>
<c:if test="${param.userid!=/"zhangsan/" || param.userpass!=/"lisi/"}">
   登录失败!
</c:if>
    当登录失败或者成功的时候,会显示不同的提示语。但是正常情况下在需要采用专门的页面进行响应,下面介绍用法。
7、 在服务器端,如何实现页面之间的跳转?
在JSP中提供了一个标签<jsp:forward>,该标签可以完成跳转。
语法格式:<jsp:forward page=”目标文件”/> page属性指出要跳转到哪个文件。
作用:当文件执行到这个标签的时候,会转向执行目标文件,这个标签之后的内容不再执行。
例:有两个文件a.jsp和b.jsp,a.jsp文件内容如下
aaaa
<jsp:forward page=”b.jsp”/>
AAAAA
b.jsp文件的内容是
BBBBBB
如果现在访问a.jsp,会得到结果:
BBBBBBB
注意:在<jsp:forward>标签之前的内容虽然执行了,但是没有显示,之后的内容没有执行。地址栏中显示是第一个文件的名字,显示的内容是第二个文件的。
8、 修改登录处理文件
<%@ page contentType="text/html;charset=gb2312"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<c:if test="${param.userid==/"zhangsan/" && param.userpass==/"lisi/"}">
   <jsp:forward page="success.jsp"/>
</c:if>
<c:if test="${param.userid!=/"zhangsan/" || param.userpass!=/"lisi/"}">
   <jsp:forward page="failure.jsp"/>
</c:if>
另外需要编写success.jsp和failure.jsp
9、 success.jsp的内容
<%@ page contentType="text/html;charset=gb2312"%>
登录成功的界面!
10、              failure.jsp的内容
<%@ page contentType="text/html;charset=gb2312"%>
登录失败的界面!
需要注意标签的结束符。标签都有开始标志和结束标志,例如<c:if test=”true”> 内容</c:if> 也可以写成:
<c:if test=”true”/>
第二种方式中标签体为空。
Html代码格式要求不严格,可以没有结束符,例如:<input type=”text” name=”userid”>
11、              <jsp:include>标签
把上面的login_process.jsp文件中的<jsp:forward修改为<jsp:include查看效果。
语法格式:与<jsp:forward>相似.
作用:包含。在程序运行到这个标签的时候,转向执行目标文件,目标文件执行完之后继续执行标签之后的内容。与方法调用非常像。
与<jsp:forward>的区别:对于标签之前的内容,jsp:forward之前的内容执行,但不显示,jsp:include执行也显示。对于标签之后的内容,jsp:forward不执行了,jsp:include执行并且要显示。
12、              include指令
语法格式与page指令相同:<%@ include file=”目标文件”%>
作用:包含目标文件。
具体为:运行之前,把目标文件的内容拷贝到include指令所在的位置,形成一个文件,然后运行。
与<jsp:include>的区别:<jsp:include>所在的文件和要转向的文件分别执行,<%@ include指令是在转换的时候,把目标文件的内容拷贝到当前文件,运行的时候只有一个文件。
用途:把各个页面的共享部分单独做成文件,例如网站的logo,和版权联系方式等信息。在需要的时候使用<%@ include>指令进行包含。
例:需要在每个网页中显示版权信息。
这时候需要把版权信息单独写在一个文件中,下面是版权信息文件contact.jsp的内容:
<%@ page contentType="text/html;charset=gb2312"%>
光大计算机培训学校版权所有
电话:888888
在login.jsp中包含该版权信息之后的代码如下:
<%@ page contentType="text/html;charset=gb2312"%>
请登录<br>
<form name="form1" method="post" action="login_process.jsp">
   用户ID<input type="text" name="userid"><br>
   口令:<input type="password" name="userpass"><br>
       <input type="submit" value="登录"><input type="reset" value="重置">
</form>
<%@ include file="contact.jsp"%>
 
如果出现错误:
org.apache.jasper.JasperException: /login.jsp(8,0) Invalid byte 1 of 1-byte UTF-8 sequence.
需要设置编码方式,在页面文件的上面添加语句:<%@ page contentType="text/html;charset=gb2312"%>
参考教材:Java Web程序设计基础教程
 
原创粉丝点击