• 小峰servlet/jsp(1)


    一、scriptlet标签:

    通过scriptlet标签我们可以可以在jsp理嵌入java代码;

    第一种:<%! %>    可以在里面定义全局变量、方法、类;

    第二种:<% %>    可以在里面定义局部变量、编写语句;

    第三种:<%= %>    在里面输出一个变量或者一个具体内容;

    二、jsp包含指令:

    <%@ include file="..." %>   静态包含   先包含,后编译处理

    <jsp:include page="...">    动态包含   先编译处理,后包含

    以后开发用动态包含

    三、jsp跳转指令:

    <jsp:forward>

      <jsp:param value="" name="" />

    </jsp:forward>

    服务器内部跳转,可带参数;

    例如:

     1 <jsp:forward page="target.jsp">
     2     <jsp:param value="java" name="username"/>
     3     <jsp:param value="123456" name="password"/>
     4 </jsp:forward>
     5 
     6 target.jsp页面:
     7 <body>
     8   服务器内部跳转后的页面<br>
     9   usename: <%= request.getParameter("username")%>
    10   password: <%= request.getParameter("password")%>
    11 </body>

      还有一种跳转方式:
       <% response.sendRedirect("target.jsp")%>
    <jsp:forward /> 和 response.sendRedirect()的区别:
    • <jsp:forward />:访问第一个界面,第一个界面调转到第二个界面,第二个界面把内容传送到客户端,客户端浏览器url显示的仍然是第一个界面的名字;跳转过程是发生在服务器端的;客户端感知不到;客户端发起的一个请求,这个请求无声无息的被转到另外一个界面进行处理;这两个界面拿到的request还是同样的、原来的那个request;拿到的request对象是同一个对象。因为就发起了一次请求;
    • response.sendRedirect:如果说访问一个界面,这个界面respone.sendRedirect到另外一个界面的话,执行过程是:你访问我这个界面的话,请你重新访问另外一个界面;他会告诉客户端请你在url里面输入另外一个界面的地址,另外一个界面会将内容反馈给你,和客户端有一个来回往复的过程;使用的是不同的request;

    四、jsp九大内置对象及四大作用域概述:

    pageContext:request,response:session:application:config:out:page:exception
    jsp四大作用域:
    1.page:只在一个页面中保存数据,javax.servlet.jsp.PageContext(抽象类)
     1 <body>
     2 <%
     3     // 设置两个page范围的数据 key-> value
     4     pageContext.setAttribute("name","page王二小");
     5     pageContext.setAttribute("age",12);
     6 %>
     7 <%
     8     // 取值
     9     String name=(String)pageContext.getAttribute("name");
    10     int age=(Integer)pageContext.getAttribute("age");
    11 %>
    12 <font>姓名:<%=name %></font>
    13 <font>年龄:<%=age %></font>
    14 </body>
    View Code

    2、request范围,只在一个请求中保存数据,javax.servlet.http.HttpServletRequest(接口)

     1 <body>
     2 <%
     3     // 设置两个request范围的数据 key-> value
     4     request.setAttribute("name","request王二小");
     5     request.setAttribute("age",12);
     6 %>
     7 <jsp:forward page="requestTarget.jsp"></jsp:forward>
     8 </body>
     9 
    10 requestTarget.jsp页面:
    11 <body>
    12 <%
    13     // 取值
    14     String name=(String)request.getAttribute("name");
    15     int age=(Integer)request.getAttribute("age");
    16     // 获取头信息
    17     Enumeration enu=request.getHeaderNames();
    18     while(enu.hasMoreElements()){
    19         String headerName=(String)enu.nextElement();
    20         String headerValue=request.getHeader(headerName);
    21 %>
    22     <h4><%=headerName %>&nbsp;<%=headerValue %></h4>
    23 <%
    24     }
    25 %>
    26 <font>姓名:<%=name %></font>
    27 <font>年龄:<%=age %></font>
    28 </body>
    View Code

    3.session: 再一次会话范围中保存数据,仅供单个浏览器使用,javax.servlet.http.HttpSession(接口)

     1 <body>
     2 <%
     3     // 设置两个session范围的数据 key-> value
     4     session.setAttribute("name","session王二小");
     5     session.setAttribute("age",12);
     6 %>
     7 <h1>session值设置完毕!</h1>
     8 </body>
     9 
    10 sessionTarge.jsp:
    11 <body>
    12 <%
    13     // 取值
    14     String name=(String)session.getAttribute("name");
    15     int age=(Integer)session.getAttribute("age");
    16 %>
    17 <font>姓名:<%=name %></font>
    18 <font>年龄:<%=age %></font>
    19 </body>
    View Code

    4.application: 在整个服务器上保存数据,所有用户共享,javax.servlet.ServletContext接口

     1 <body>
     2 <%
     3     // 设置两个application范围的数据 key-> value
     4     application.setAttribute("name","application王二小");
     5     application.setAttribute("age",12);
     6 %>
     7 <h1>application值设置完毕!</h1>
     8 </body>
     9 
    10 applicationTarget.jsp
    11 <body>
    12 <%
    13     // 取值
    14     String name=(String)application.getAttribute("name");
    15     int age=(Integer)application.getAttribute("age");
    16 %>
    17 <font>姓名:<%=name %></font>
    18 <font>年龄:<%=age %></font>
    19 </body>
    View Code

     五、response对象:

    response内置对象和request内置对象是对应的;response用于响应客户请求,向客户端输出信息;

    javax.servlet.HttpServletResponse接口;

    1.自动刷新应用;

    2.页面重定向,客户端跳转;

    3.操作cookie应用;

    自动刷新应用:

    1 <body>
    2 <%
    3     // 每隔一秒刷新一次页面
    4     response.setHeader("refresh","1");
    5     // 获取当前时间
    6     Date myDate=new Date();
    7 %>
    8 当前时间:<%= myDate.toLocaleString() %>
    9 </body>
    View Code

    操作cookie,一个简单的登陆页面记录密码:

    登陆页:response03.jsp

     1 <%@ page language="java" contentType="text/html; charset=utf-8"
     2     pageEncoding="utf-8"%>
     3 <%@ page import="java.util.*"%>
     4 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
     5 <html>
     6 <head>
     7 <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
     8 <title>Insert title here</title>
     9 <script type="text/javascript">
    10     function resetValue(){
    11         document.getElementById("userName").value="";
    12         document.getElementById("pwd").value="";
    13     }
    14 </script>
    15 <%
    16     String userName=null;
    17     String pwd=null;
    18     Cookie[] cookies=request.getCookies();
    19     for(int i=0;cookies!=null &&i<cookies.length;i++){
    20         if(cookies[i].getName().equals("userNameAndPwd")){
    21             userName=cookies[i].getValue().split("-")[0];
    22             pwd=cookies[i].getValue().split("-")[1];
    23         }
    24     }
    25     
    26     if(userName==null){
    27         userName="";
    28     }
    29     
    30     if(pwd==null){
    31         pwd="";
    32     }
    33 %>
    34 </head>
    35 <body>
    36 
    37 <form action="userLogin.jsp" method="post">
    38     <table>
    39         <tr>
    40             <td>用户名:</td>
    41             <td><input type="text" id="userName" name="userName" value="<%=userName%>"/></td>
    42         </tr>
    43         <tr>
    44             <td>密码:</td>
    45             <td><input type="password" id="pwd" name="pwd" value="<%=pwd %>" /></td>
    46         </tr>
    47         <tr>
    48             <td>记住密码:</td>
    49             <td><input type="checkbox" id="remember" name="remember" value="remember-me"/></td>
    50         </tr>
    51         <tr>
    52             <td><input type="submit" value="登录"/></td>
    53             <td><input type="button" value="重置" onclick="resetValue()"/></td>
    54         </tr>
    55     </table>
    56 </form>
    57 </body>
    58 </html>
    View Code

    userLogin.jsp:

     1 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
     2 <html>
     3 <head>
     4 <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
     5 <title>Insert title here</title>
     6 </head>
     7 <body>
     8 <%
     9     String userName=request.getParameter("userName");  // 获取用户名
    10     String pwd=request.getParameter("pwd");  // 获取密码
    11     String remember=request.getParameter("remember");  // 获取记住密码
    12     
    13     if("remember-me".equals(remember)){
    14         Cookie userNameAndPwd=new Cookie("userNameAndPwd",userName+"-"+pwd);
    15         userNameAndPwd.setMaxAge(1*60*60*24*7); // cookie记录一个星期
    16         response.addCookie(userNameAndPwd);  // 保存cookie
    17         System.out.println("设置Cookie成功");
    18     }
    19     response.sendRedirect("response03.jsp");
    20 %>
    21 </body>
    22 </html>
    View Code

    六、out对象:

    out内置对象主要用来向客户端输出各种类型的数据,同时还可以管理应用服务器上的输出缓冲区,所以out内置对象的方法是向客户端输出数据和管理缓冲区,底层javax.servlet.jsp.JspWriter抽象类;

     1 <body>
     2 <%
     3     out.println("<h1>");
     4     out.println("Hello Jsp Servlet");
     5     out.println("</h1>");
     6 %>
     7 </body>
     8 
     9 <body>
    10 <%
    11     int totalbuffer=out.getBufferSize();  // 获取总共缓冲区的大小
    12     int available=out.getRemaining(); // 获取未使用的缓冲区的大小
    13     int user=totalbuffer-available;  // 获取使用的缓冲区大小
    14     out.println("总共缓冲区的大小:"+totalbuffer);
    15     out.println("未使用的缓冲区的大小:"+available);
    16     out.println("使用的缓冲区大小:"+user);
    17 %>
    View Code

    七、Config对象

    Config内置对象是JSP页面通过jsp容器进行初始化时被传递的对象;javax.servlet.ServletConfig。在Servlet初始化的时候,JSP引擎通过config向它传递信息。这种信息可以是属性名和属性值匹配的参数,也可以是通过ServletContext对象传递的服务器的有关信息;

     比如web.xml中配置servlet:

     1 <servlet>
     2       <servlet-name>init</servlet-name>
     3       <jsp-file>/sysInit.jsp</jsp-file>
     4       <init-param>
     5           <param-name>jdbcName</param-name>
     6           <param-value>com.mysql.jdbc.Driver</param-value>
     7       </init-param>
     8       <init-param>
     9           <param-name>dbUrl</param-name>
    10           <param-value>jdbc:mysql://localhost:3306/db_xx</param-value>
    11       </init-param>
    12   </servlet>
    13   
    14   <servlet-mapping>
    15       <servlet-name>init</servlet-name>
    16       <url-pattern>/init</url-pattern>
    17   </servlet-mapping>
    View Code

    sysInit.jsp中获取初始化参数:

    1 <body>
    2 <%
    3     String jdbcName=config.getInitParameter("jdbcName");
    4     String dbUrl=config.getInitParameter("dbUrl");
    5 %>
    6 <h1>驱动名称:<%=jdbcName %></h1>
    7 <h1>连接地址:<%=dbUrl %></h1>
    8 </body>
    View Code

    八、exception对象:

    Exception内置对象用来处理JSP文件在执行时发生的所有异常,它是java.lang.Throwable类的一个对象。

    exception01.jsp:

     1 <%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
     2 <%@ page errorPage="error.jsp"%>
     3 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
     4 <html>
     5 <head>
     6 <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
     7 <title>Insert title here</title>
     8 </head>
     9 <body>
    10 <%
    11     int a=1;
    12     int b=0;
    13     out.println(a/b);
    14 %>
    15 </body>
    16 </html>
    View Code

    error.jsp:

     1 <%@ page language="java" contentType="text/html; charset=utf-8"
     2     pageEncoding="utf-8"%>
     3 <%@ page isErrorPage="true"%>
     4 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
     5 <html>
     6 <head>
     7 <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
     8 <title>Insert title here</title>
     9 </head>
    10 <body>
    11 <%
    12     if(exception!=null){
    13         out.println("程序错误信息:");
    14         out.println(exception.getMessage());
    15     }
    16 %>
    17 </body>
    18 </html>
    View Code

    访问exception01.jsp页面展示:

    九、pageContext对象:

    pageContext对象,相当于页面中所有对象功能的集合,即使用它可以访问到本页面中所有对象。pageContext内置对象由jsp容器创建并初始化,pageContext对象提供了对jsp页面所有对象及控件的访问。

     1 <body>
     2 <%
     3     pageContext.setAttribute("name0", "pageInfo");
     4     request.setAttribute("name1", "requestInfo");
     5     session.setAttribute("name2", "sessionInfo");
     6     application.setAttribute("name3", "applicationInfo");
     7     
     8     out.println("使用pageContext<br/>");
     9     out.println("page中的属性值:"+pageContext.getAttribute("name0")+"<br/>");
    10     out.println("request中的属性值:"+pageContext.getRequest().getAttribute("name1")+"<br/>");
    11     out.println("session中的属性值:"+pageContext.getSession().getAttribute("name2")+"<br/>");
    12     out.println("application中的属性值:"+pageContext.getServletContext().getAttribute("name3")+"<br/>");
    13 %>
    14 </body>
    View Code
  • 相关阅读:
    对JavaScript调用堆栈和setTimeout用法的深入研究
    Js中的window.parent ,window.top,window.self 代表的对象
    lhgselect 联动选择下拉菜单 v1.0.0 (20110613)
    lhgcore JavaScript Library v1.4.5 API (20110622)
    表单元素完美垂直居中
    判断 iframe 是否加载完成的完美方法
    lhgdialog 弹出窗口插件 v3.5.2 ( 20110704 )
    JS的事件冒泡和事件捕获
    程序设计原则
    python中入口函数的用法
  • 原文地址:https://www.cnblogs.com/tenWood/p/6486726.html
Copyright © 2020-2023  润新知