23_Jsp_3指令_7动作_登录应用

JSP3大指令

jsp编译指令是通知jsp引擎的消息,它不直接生成输出,编译指令有默认值。常见的编译指令有3个:

  1. page指令:该指令是针对当前页面的指令。
  2. include指令:用于指定包含另一个页面。
  3. taglib指令:用于定义和访问自定义标签。

    • 编译指令的语法格式如下:
<%@ 编译指令名 属性名1="属性值" 属性名2"属性值" ...  %>

1)page指令

<%@ page language="java" import="java.util.*" pageEncoding="utf-8" %>
  • 常用属性:

    1. language =“语言”
      主要指定JSP 容器 要用什么语言来编译JSP页。JSP 1.2 规范中指出,目前只可以使用Java 语言,不过未来不排除增加其他语言,如C、C++、Perl 等等。默认值为Java语言

    2. extends = “基类名”
      主要定义此JSP 网页产生的Servlet 是继承哪个父类

    3. import= “包名”
      定义此JSP 网页可以使用哪些Java类库

    4. session=”true或false”
      决定此JSP 网页是否可以使用session 对象。默认值为true

    5. buffer=”none或size in kb”
      决定输出流(output stream) 是否有缓冲区。默认值为8KB 的缓冲区

    6. autoFlush=”true 或false”
      决定输出流的缓冲区是否要自动清除,缓冲区满了会产生异常(Exception)。默认值为true

    7. isThreadSafe=”true 或 false”
      告诉JSP 容器,此JSP 网页是否能同时处理多个请求。默认值为true,如果此值设为false, 转义生成的Servlet会实现SingleThreadModel接口。

    8. info =”text”
      表示此JSP 网页的相关信息

    9. errorPage=”error_url”
      表示如果发生异常错误时,网页会被重新指向指定的URL

    10. isErrorPage=”true或false”
      表示此JSP Page 是否为专门处理错误和异常的网页

    11. contentType = “ctinfo”
      表示MIME 类型和JSP 网页的编码方式,其作用相当于HttpServletResponse接口的setContentType()方法

2)include指令

include指令可以将一个外部文件嵌入到当前jsp文件中,同时解析这个页面中的jsp语句。include命令既可以包含jsp页面也可以包含静态文本。
将被导入页面和导入页面合在一起进行翻译,编译,最后产生一个Servlet,所以两个页面的变量名不能重复。区别include动作
编译指令语法如下:

<%@ include file="要导入的jsp页面或文本文件" %>
  • 使用include指令注意事项:

1)file名不能为依变量 ,下面的例子是错误的:

<%! String url="header.jsp" %>
<%@ include="<%=url %>"

2)file名后面不能传入参数,下面的例子是错误的:

<%@ include file="header.jsp?username=abc" %>

3)file的路径是相对于此jsp的路径

3)taglib指令

taglib指令用于引入一些特定的标签库,语法格式:

<%@ taglib prefix="tagPrefix" uri="tagLibraryURI" %>
  • 如使用struts标签库:
<%@ taglib prefix="s" taglib="/struts-tags" %>

JSP7大动作

1)forward

forward指令用于将页面转发到另外的页面,可以是html页面、jsp页面、容器中的servlet.

<jsp:forward page="目标页面地址"></jsp:forward>
  • 如果转发的时候需要传递参数可以使用<jsp:param></jsp:param>指令进行设置。
//比如,访问index.jsp页面时自动转发至login.jsp,需要把username和password传递过去: 
index.jsp:
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<jsp:forward page="login.jsp">
    <jsp:param value="yaopan" name="username" />
    <jsp:param value="123456" name="password" />
</jsp:forward>
//在login.jsp中可以使用getParameter方法获取传入的参数值:
<%
  String name=request.getParameter("username");
  String pwd=request.getParameter("password");
  out.println(name);
  out.println("<br>");
  out.println(pwd);
%>
//执行forword指令时用户请求的地址没有发生变化,页面内容被forward目标替代。

2)include

include指令用于包含某个页面,但不会导入被include页面的编译指令。动态导入:被导入页面和导入页面分别翻译,编译,产生两个Servlet,所以两个页面的变量名可以重复。
可以通过param指令传递参数:

//index.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<jsp:include page="head.html"></jsp:include>
<jsp:include page="body.jsp">
   <jsp:param value="#1d99f6" name="bgcolor"/>
</jsp:include>
</html>
//body.jsp
<body bgcolor="<%=request.getParameter("bgcolor")%>">
</body>

3,4,5)useBeanset/Property/getProperty

这三个指令与javaBean相关,useBean用于在jsp页面中初始化一个Java实例;setProperty为javaBean实例的属性赋值;getProperty属性用于输出javaBean实例的属性。

如果jsp页面中需要重复使用某段代码,可以把这段代码定义成java方法,然后多个jsp页面调用该方法达到页面复用的效果。

  • useBean的语法格式如下:
<jsp:useBean id="beanID" class="java包名.类名" scope="page|request|session|application"></jsp:useBean>
  • 例子

1.在ucas.ac.cn.jspstudy包下创建一个Student类,有name、age、stuId三个属性和相应的setter和getter方法。在jsp页面中创建javaBean实例:

<%--创建Student对象,对象名为stu1 --%>
<jsp:useBean id="stu" class="ucas.ac.cn.jspstudy.Student" scope="page"></jsp:useBean>

2.setProperty方法用于为javaBean实例的属性赋值:

<%--给stu的name属性赋值 --%>
<jsp:setProperty property="name" name="stu" value="张三"/>

<%--给stu的age属性赋值 --%>
<jsp:setProperty property="age" name="stu" value="20"/>

3.getProperty用于输出javaBean实例的属性值:

<%--输出stu1的name值 --%>
<jsp:getProperty property="name" name="stu"/>

<%--输出stu1的age值 --%>
<jsp:getProperty property="age" name="stu"/>

6)plugin

plugin主要用于下载服务器端的javaBean或applet到客户端执行,现在很少使用

7)param

param指令用于设置参数值,该指令本身不能单独使用,单独的param指令没有意义,配合以下三个指令使用:

  1. jsp:include
  2. jsp:forward
  3. jsp:plugin

注:静态导入和动态导入
静态导入只会执行一次,动态导入执行两次。那么如果导入页面需要用被导入页面的结果来判断是否执行,那么应该用静态导入。

登录应用

  • login.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <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="keywords" content="keyword1,keyword2,keyword3">
    <meta http-equiv="description" content="This is my page">
  </head>

  <body>
   <form action="dologin.jsp" method="post">
    用户名:<input type="text" name="name"><span style="color: red"><%=request.getAttribute("msg")!=null?request.getAttribute("msg"):"" %></span><br>
    密码:<input type="password" name="pwd"><br>
    <input type="submit" value="登录">
   </form>
  </body>
</html>
  • dologin.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>My JSP 'dologin.jsp' starting page</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="keywords" content="keyword1,keyword2,keyword3">
    <meta http-equiv="description" content="This is my page">
  </head>

  <body>
   <%
        String name=request.getParameter("name");
        String pwd=request.getParameter("pwd");
        if("zhushen".equals(name)&&"Code531182".equals(pwd)){//登录成功
            session.setAttribute("username", name);
            response.sendRedirect("list.jsp");
        }else{//登录失败
            //response.sendRedirect("login.jsp");
            request.setAttribute("msg", "用户名或密码错误");
            request.getRequestDispatcher("login.jsp").forward(request, response);
        }
    %>
  </body>
</html>
  • list.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ page import="com.zhushen.util.BookDAO,com.zhushen.entity.Book" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>   
    <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="keywords" content="keyword1,keyword2,keyword3">
    <meta http-equiv="description" content="This is my page">
  </head>

  <body>
  <h1>欢迎:<%=session.getAttribute("username") %></h1>
   <%
    List<Book> booklist=BookDAO.getAll();
    %>
    <table width="80%" align="center">
        <tr>
        <td>编号</td>
        <td>书名</td>
        <td>价格</td>
        <td>作者</td>
        <td>出版日期</td>
        </tr>
        <%for(int i=0;i<booklist.size();i++){%>
        <tr>
        <td><%=booklist.get(i).getId() %></td>
        <td><%=booklist.get(i).getName() %></td>
        <td><%=booklist.get(i).getPrice()%></td>
        <td><%=booklist.get(i).getAuthor() %></td>
        <td><%=booklist.get(i).getPubDate() %></td>
        </tr>
        <% } %>
    </table>
  </body>
</html>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值