JAVA遇见HTML——JSP篇

1、手工编写第一个WEB应用程序


2、默认访问服务器网页首页欢迎界面是 index.jsp,就是网页链接访问其所在的文件夹目录,不访问这个文件,也会自动访问的。如果这个文件夹目录下没有index.jsp或者有其他的比如 xx.jsp 链接直接访问这个 xx.jsp 也是没有用。换句话说,默认首页欢迎界面 就是 index.jsp

然后如果要修改默认首页欢迎界面,方法如下:
打开这个web.xml文件,然后添加以下代码:

1 <welcome-file-list>
2     <welcome-file>/xx.jsp</welcome-file>
3 </welcome-file-list>

这样就默认首页欢迎界面就是这个 xx.jsp 了

但有时候我们会建立多个服务器,那样就不能使用一个端口号,否则会产生冲突。
所以就有必要知道如何修改Tomcat服务器默认端口

Jsp页面元素构成



alt + / 代码提示
cmd + / 生成xml注释 但是不知道怎么快速生成<% %>


制作九九乘法表:

 1 <%@ page language="java" contentType="text/html; charset=UTF-8"
 2     pageEncoding="UTF-8"
 3     isErrorPage="true"
 4     %>
 5
 6 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
 7
 8 <html>
 9 <head>
10 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
11 <title>登入界面</title>
12 </head>
13 <body>
14 hello world!
15 <%
16 out.print("<br/>");
17 String name = request.getParameter("userName");
18 String pass = request.getParameter("passWord");
19 out.print(name);
20 out.print("<br/>");
21 out.print(pass);
22 out.print("<br/>");
23
24 %>
25 <hr>
26 <h1>九九乘法表</h1>
27 <hr>
28 <%!
29 String print1()
30 {
31     String s = "";
32     for(int i = 1;i<=9;i++){
33         for(int j = 1;j<=i;j++)
34         {
35             s+=i+"*"+j+"="+i*j+"&nbsp;&nbsp;&nbsp;&nbsp;";
36         }
37         s+="<br>";
38     }
39     return s;
40 }
41 //JSP内置out对象,使用脚本方式调用,打印九九乘法表,还要抛出异常
42 void print2(JspWriter out) throws Exception
43 {
44     String s = "";
45     for(int i = 1;i<=9;i++){
46         for(int j = 1;j<=i;j++)
47         {
48             s=i+"*"+j+"="+i*j+"&nbsp;&nbsp;&nbsp;&nbsp;";
49             out.print(s);
50         }
51         out.print("<br/>");
52     }
53 }
54 %>
55 <%=print1() %>
56 <br>
57 <% print2(out); %>
58 </body>
59 </html>


2-1 JSP简介
JSP全名为Java Server Pages(Java服务器端页面),其根本是一个简化的Servlet设计,他实现了在Java当中使用HTML标签。JSP是一种动态网页技术标准也是JavaEE标准。JSP与Servlet一样,是在服务器端执行的。

2-3 JSP页面元素及page指令
JSP页面元素构成:指令,表达式,小脚本,声明,注释,静态内容

JSP指令:
    page指令 <通常位于JSP页面的顶端,同一个页面可以有多个page指令>
    图片:page指令语法
    include指令 <将一个外部文件嵌入到当前JSP文件中,同时解析这个页面中的JSP语句>
    taglib指令 <使用标签库定义新的自定义标签,在JSP页面中启动定制行为>

2-5 JSP注释:
    JSP页面的注释:
    HTML的注释:<!--html注释--> //客户端可见
    JSP的注释: <%--html注释--!> //客户端不可见
    JSP脚本注释:<% //单行注释  /**/多行注释 %> //也是在客户端不可见的,其实也算是java注释

2-7 JSP脚本
    在JSP页面中执行的java代码。语法:<%Java代码%>
    作业:在jsp中打印输出一句话

2-8 JSP声明
    在JSP页面中定义变量或者方法。
    语法:<%! Java代码 %>
示例:

1 <%!
2     String s = "张三"; //声明了一个字符串
3     int add(int x,int y)  //声明了一个返回整数的函数,实现两个整数的求和。
4     {
5         return x+y;
6     }
7 %>

2-9 JSP表达式
    在JSP页面中执行的表达式
    语法:<% =表达式 %>  //注意,表达式不以分号“;”结束

2-10 JSP页面生命周期

jspService()方法被调用来处理客户端的请求。对每一个请求,JSP引擎创建一个新的现场来处理该请求。如果有多个客户端同时请求该JSP文件,则JSP引擎会创建多个线程。每个客户端请求对应一个线程。以多线程方式执行可以打打降低对系统资源需求,提高系统的并发量及响应时间。但也要注意多线程的编程带来的同步问题,由于该Servlet始终驻于内存,所以响应式非常快的。

3-1 JSP内置对象介绍

JSP内置对象是web容器创建的一组对象,不使用new关键字就可以使用的内置对象。
示例:

1 <%
2 int[] value = {60,70,80};
3 for(int i:value){
4     out.println(i);//这里就直接使用了JSP的内置对象
5 }
6 %>

JSP的九大内置对象:
    常用的五个:out、request、response、session、application
    不常用的四个:Page、pageContext、exception、config

3-3 web程序的请求与响应模式

3-4 out对象

什么是缓冲区
缓冲区:Buffer,所谓缓冲区就是内存的一块区域用来保存临时数据。

out对象:
    out对象是JspWriter类的实例,是向客户端输出内容常用的对象。
    这个地方说的客户端就是浏览器
    常用的方法如下:
        1> void println() 向客户端打印字符串
        2> void clear() 清除缓冲区的内容,如果在flush之后调用会抛出异常
        3> void clearBuffer() 清除缓冲区的内容,如果在flush之后调用会抛出异常
        4> void flush() 将缓冲区内容输出到客户端
        5> int gerBufferSize() 返回缓冲区以字节数的大小,如不设缓冲区则为0
        6> int getRemaining() 返回缓冲区还剩余多少可用
        7> boolean isAutoFlush() 返回缓冲区满时,是自动清空还是抛出异常
        8> void close() 关闭输出流
示例:

<body>
    <h1>JSP内置对象</h1>
    <%
    out.println("<h2>静夜思</h2>");
    out.println("床前明月光<br>");
    out.println("疑是地上霜<br>");
    out.println("举头望明月<br>");
    out.println("低头思故乡<br>");
    %>
    缓冲区大小:<%= out.getBufferSize() %>byte<br>
    缓冲区剩余大小: <%= out.getRemaining() %>byte<br>
    是否自动清理缓冲区: <%= out.isAutoFlush() %><br>
</body>

3-6 get和post提交方式的区别
<form name="regForm" action="动作" method="提交方式">
</form>
表单有两种提交方式:get与post
1、get:以明文的方式通过URL提交数据,数据在URL中可以看到。提交的数据最多不超过2KB。安全性较低但效率比post方式高。适合提交数据量不大,安全性不高的数据。比如:搜索、查询等功能。
2、post:将用户提交的信息封装在HTML HEADER内。适合提交数据量大,安全性能高的用户信息。比如:注册、修改、上传等功能。

下面通过用户登入界面的示例来演示:
    get提交方式,用get提交在URL链接会出现提交的数据,这样就对于需要保密的信息是不安全的。
在Login.jsp文件中:

 1 <body>
 2 <h1>用户登录</h1>
 3 <hr>
 4 <form action="dologin.jsp" name="loginForm" method="get">
 5 <table>
 6 <tr>
 7 <td>用户名:</td>
 8 <td><input type="text" name="username"/></td>
 9 </tr>
10 <tr>
11 <td>密码:</td>
12 <td><input type="password" name="password"/></td>
13 </tr>
14 <tr>
15 <td colspan="2"><input type="submit" value="登录"/></td>
16 </tr>
17 </table>
18 </form>
19 </body>
20 然后在dologin.jsp中:
21 <body>
22     <h1>登录成功</h1>
23     <hr>
24 </body>

post提交方式,用post提交方式会将需要传递的信息封装在数据包中传递给服务器。
只需要在Login.jsp中的修改为 method="post"即可

3-7 requeat对象(上)
request对象
    客户端的请求信息被封装在request对象中,通过它才能了解到客户的需求,然后做出响应。它是HttpServletRequest类的实例。request对象具有请求域,即完成客户端的请求之前,该对象一直有效。常用方法如下:

1>String getParameter(String name)返回name指定参数的参数值
    2>String[] getParameterValues(String name)返回包含参数name的所有值的数组
    3>void setAttribute(String,Object)存储此请求中的属性
    4>object getAttribute(String name)返回指定属性的属性值
    5>String getContentType() 得到请求体的MIME类型
    6>String getProtocol() 返回请求用的协议类型及版本号
    7>String getServerName() 返回接受请求的服务器主机名
    8>int getServerPort()返回服务器端口
    9>String getCharacterEncoding()返回字符编码方式
    10>void setCharacterEncoding()设置请求的字符编码方式
    11>int getContentLength()返回请求体的长度(以字节数)
    12>String getRemoteAddr()返回发送此请求的客户端IP地址
    13>String getRealPath(String path)返回一虚拟路径的真实路径
    14>String request.getContextPath()返回上下文路径

示例:
先在reg.jsp通过表单获取数据:

 1 <body>
 2 <h1>用户注册</h1>
 3 <hr>
 4 <form name="regForm" action="request.jsp" method="post">
 5 <table>
 6 <tr>
 7 <td>用户名:</td>
 8 <td><input type="text" name="username"/></td>
 9 </tr>
10 <tr>
11     <td>爱好:</td>
12     <td>
13         <input type="checkbox" name="favorite" value="read">读书
14         <input type="checkbox" name="favorite" value="music">音乐
15         <input type="checkbox" name="favorite" value="movie">电影
16         <input type="checkbox" name="favorite" value="internet">上网
17     </td>
18 </tr>
19 <tr>
20     <td colspan="2"><input type="submit" value="提交"/></td>
21 </tr>
22 </table>
23 </form>
24 </body>

Code

然后在request.jsp中

 1 <body>
 2     <h1>request内置对象</h1>
 3     <%
 4     request.setCharacterEncoding("utf-8");//解决中文乱码的问题,无法解决URL传递中文出现的乱码问题
 5     %>
 6     用户名:<%=request.getParameter("username")%><br>
 7     爱好:<%
 8             String[] favorites = request.getParameterValues("favorite");
 9             for(int i=0;i<favorites.length;i++)
10             {
11                 out.println(favorites[i]+"&nbsp;&nbsp")
12             }
13
14         %>
15 </body>

以上就是一个小的通告post上传表单数据,然后通过request处理和显示数据的实例。
然后我们继续以上的小示例,添加一些超链接:
在reg.jsp中继续:

 1 <body>
 2 <h1>用户注册</h1>
 3 <hr>
 4 <form name="regForm" action="request.jsp" method="post">
 5 <table>
 6 <tr>
 7 <td>用户名:</td>
 8 <td><input type="text" name="username"/></td>
 9 </tr>
10 <tr>
11     <td>爱好:</td>
12     <td>
13         <input type="checkbox" name="favorite" value="read">读书
14         <input type="checkbox" name="favorite" value="music">音乐
15         <input type="checkbox" name="favorite" value="movie">电影
16         <input type="checkbox" name="favorite" value="internet">上网
17     </td>
18 </tr>
19 <tr>
20     <td colspan="2"><input type="submit" value="提交"/></td>
21 </tr>
22 </table>
23 </form>
24 <%--这里开始--!%>
25 <br>
26 <br>
27 <a href="request.jsp?username=lisa">测试URL传参数</a>
28 </body>

接着还需要在request.jsp中添加判断语句:

 1 <body>
 2     <h1>request内置对象</h1>
 3     <%
 4     request.setCharacterEncoding("utf-8");//解决中文乱码的问题
 5     %>
 6     用户名:<%=request.getParameter("username")%><br>
 7     爱好:<%
 8             if (request.getParameterValues("favorite")!=null)
 9             {
10                 String[] favorites = request.getParameterValues("favorite");
11                 for(int i=0;i<favorites.length;i++)
12                 {
13                     out.println(favorites[i]+"&nbsp;&nbsp")
14                 }
15             }
16         %>
17 </body>

如果通过URL传递中文,是可能会出现中文乱码的,这个时候,通过request是不能解决的,这里就需要我们通过配置Tomcat服务器来解决这个问题。这个配置文件就是conf/server.xml
用编辑器打开这个文件,找到:

1 <Connector port="8080" protocol="HTTP/1.1"
2             connectionTimeout="20000"
3             redirectPort="8443" />

需要修改URL传递的中文出现乱码的问题,只要在后面添加

1 <Connector port="8080" protocol="HTTP/1.1"
2             connectionTimeout="20000"
3             redirectPort="8443"
4             URIEncoding="utf-8" />

不是URLEncoding哦,而是URIEncoding哦。然后要生效需要重启Tomcat服务器。

3-8 request对象(下)
request对象方法中:
setAttribute(String,Object)设置属性是以键值对的形式设置属性
getAttribute(String name)返回置顶属性,只需要属性名即可。
示例:
<%
......
request.setAttribute("password","123456");
......
%>
密码:<%=request.getAttribute("passWord")%>

3-10 Response对象
response对象包含了响应客户请求的有关信息,但在JSP中很少直接用到它。他是HttpServletResponse类的实例。response对象具有页面作用域,即访问一个页面时,该页面的response对象只能对这次访问有效,其它页面的response对象对当前页面无效。常用方法如下:
1>String getCharacterEncoding()返回响应用的是何种字符编码
2>void setContentType(String type)设置响应的MIME类型
3>PrintWriter getWriter()返回可以向客户端输出字符的一个对象(注意比较:PrintWriter与内置out对象的区别)
4>sendedirect(java.lang.String location)重新定向客户端的请求

既然是响应的作用,那么新建一个jsp页面之后,可以不需要任何HTML页面元素,因为不是用来显示的,是用来反馈用户信息的。
在新建的response.jsp中:

 1 <%@ page language="java"
 2         import="java.util.*,java.io.*"
 3         contentType="text/html; charset=UTF-8"
 4         pageEncoding="UTF-8"%>
 5 <%
 6     response.setContentType("text/html;charset=utf-8");//设置响应的MIMI类型
 7
 8     out.println("<h1>response内置对象</h1>");
 9     out.println("<hr>");
10
11     PrintWriter outer = response.getWriter();//获得输出流对象
12     outer.println("大家好,我是response对象生成的out对象");
13 %>

然后显示的结果会发现,response获得的输出内容总是在out内置对象之前显示。

如果需要保证response的输出流的输出的内容按照顺序来出现,就需要用到out对象的flush(),这个flush()会强制清空缓冲区,flush()在清空缓冲区的同时会把缓冲区的内容强制输出到前端页面。

接下来讲讲sendRedirect(java.lang.String location)这个就是请求重定向

 1 <%@ page language="java"
 2         import="java.util.*,java.io.*"
 3         contentType="text/html; charset=UTF-8"
 4         pageEncoding="UTF-8"%>
 5 <%
 6     response.setContentType("text/html;charset=utf-8");//设置响应的MIMI类型
 7
 8     out.println("<h1>response内置对象</h1>");
 9     out.println("<hr>");
10     // out.flush();
11
12     PrintWriter outer = response.getWriter();//获得输出流对象
13     outer.println("大家好,我是response对象生成的out对象");
14     /* 这里开始讲解重定向 */
15     response.sendRedirect("reg.jsp");
16     //记得前面不能有flush()不然会抛出异常
17 %>

3-11请求重定向与请求转发的区别
请求重定向:客户端行为,response.sendRedirect(),从本质上讲等同于两次请求,前一次的请求对象不会保存,地址栏的URL地址汇改变。
请求转发:服务器行为,request.getResquestDispatcher().forward(req,resq);是一次请求,转发后请求对象会保存,地址栏的URL地址不会改变。

下面通过实例来讲解这两种地址跳转的区别:
1>重定向
在reg.jsp中的表单属性中,表示跳转到response.jsp:
    <form name="regForm" action="response.jsp" method="post">
然后在response.jsp中重定向,也就是需要跳转到request.jsp中:
    /* 这里开始讲解重定向 */
    response.sendRedirect("request.jsp");
最后会发现,reg.jsp获取的表单数据,在传递过程中,没有保存,最后自然就不会传递到request.jsp页面上。
2>转发
接着在上面的重定向的基础上,将response.jsp中的重定向代码注释,然后添加下面的代码;
    //请求转发
    request.getRequestDispatcher("request.jsp").forward(request, response);

注意:这个问题在面试JavaEE中是经常会问的问题。

4-1什么是session
session表示客户端与服务器的一次对话
Web中得session指的是用户在浏览器某个网站时,从进入网站到浏览器关闭所经历过的这段时间,也就是用户浏览这个网站所花费的时间。
从上述定义中可以看到,session实际上是一个特定的时间概念。

session是保存在服务器的内存中的,并且保存着不同用户的session。同一个用户对应一个session,不同的用户对应不同的session。

4-2session对象
session对象是一个JSP内置对象。
session对象在第一个JSP页面被装载时自动创建,完成会话期管理。
从一个客户打开浏览器并连接到服务器开始,到客户关闭浏览器离开这个服务器结束,被成为一个会话。
当一个客户访问一个服务器时,可能会在服务器的几个页面之间切换,服务器应当通过某种办法知道这是一个客户,就需要sesion对象。
session对象是HttpSession类的实例。

session对象常用的方法如下:
long getCreationTime();返回SESSION创建时间。
public String getId();返回SESSION创建JSP引擎为它设的唯一ID号。
public Object setAttribute(String name,Object value);使用指定名称将对象绑定到此会话
public Object getAttribute(String name);返回与此会话中得指定名称绑定在一起的对象,如果没有对象绑定在该名称下,则返回null。
String[] getValueNames();返回一个包含此SESSION种所有可用属性的数组
int getMaxInactiveInterval();返回两次请求间隔多长时间此SESSION被取消(单位 秒)。

实例:

 1 <%@ page language="java" contentType="text/html; charset=UTF-8"
 2     pageEncoding="UTF-8"%>
 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>session</title>
 8 </head>
 9 <body>
10     <h1>session内置对象</h1>
11     <hr>
12     Session创建时间:<%=session.getCreationTime() %><br>
13 </body>
14 </html>
15 然后显示的时间不是很直观,所以需要一个时间格式化类,当然还要导入一些类
16 <%@page import="java.text.SimpleDateFormat"%>
17 <%@ page language="java" import="java.util.*,java.text.*" contentType="text/html; charset=UTF-8"
18     pageEncoding="UTF-8"%>
19 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
20 <html>
21 <head>
22 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
23 <title>session</title>
24 </head>
25 <body>
26     <h1>session内置对象</h1>
27     <hr>
28     <%
29     SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
30     Date d = new Date(session.getCreationTime());
31     %>
32     Session创建时间:<%=sdf.format(d) %><br>
33 </body>
34 </html>

当然呢,一个会话本身可能是有生命期限的,比如你打开了一个网页,也就建立了一个session会话,但是可能作为用户的你
长时间没有来响应网页,比如你可能要出去逛街了,然后回来看没有关闭的网页,网页会提示你,当前页面已经过期了,同样这个会话已经结束了。

在session.jsp中通过session对象添加设置三个属性键值对,然后在session2.jsp中遍历输出session中得存储的属性键值对。
session.jsp:

 1 <%@page import="java.text.SimpleDateFormat"%>
 2 <%@ page language="java" import="java.util.*,java.text.*" contentType="text/html; charset=UTF-8"
 3     pageEncoding="UTF-8"%>
 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>session</title>
 9 </head>
10 <body>
11     <h1>session内置对象</h1>
12     <hr>
13     <%
14     SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
15     Date d = new Date(session.getCreationTime());
16     session.setAttribute("username", "admin");
17     session.setAttribute("password", "123456");
18     session.setAttribute("age", 20);
19     %>
20     Session创建时间:<%=sdf.format(d) %><br>
21     Session的ID编号:<%=session.getId() %><br>
22     从Session中获取用户名:<%=session.getAttribute("username") %><br>
23
24     //添加一条连接跳转到第二个session页面
25     <a href="session2.jsp" target="_blank">跳转到Session2.jsp</a>
26
27 </body>
28 </html>

session2.jsp中:

 1 <%@page import="java.text.SimpleDateFormat"%>
 2 <%@ page language="java" import="java.util.*,java.text.*" contentType="text/html; charset=UTF-8"
 3     pageEncoding="UTF-8"%>
 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>session</title>
 9 </head>
10 <body>
11     <h1>session内置对象</h1>
12     <hr>
13     <%
14     //SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
15     //Date d = new Date(session.getCreationTime());
16     %>
17     Session的ID编号:<%=session.getId() %><br>
18     从Session中获取用户名:<%=session.getAttribute("username") %><br>
19     Session中保存的属性有:<%
20         String[] names = session.getValueNames();
21         for(int i = 0;i<names.length;i++)
22         {
23             out.println(names[i]+"&nbsp;&nbsp;");
24         }
25     %><br>
26 </body>
27 </html>

设置当前session最大生成期限单位是5秒

 1 <body>
 2     <h1>session内置对象</h1>
 3     <hr>
 4     <%
 5     SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
 6     Date d = new Date(session.getCreationTime());
 7     session.setAttribute("username", "admin");
 8     session.setAttribute("password", "123456");
 9     session.setAttribute("age", 20);
10     //===============在这里添加以下代码===============
11     //设置当前session最大生成期限单位是秒
12     session.setMaxInactiveInterval(5);
13     //============================================
14     %>
15     Session创建时间:<%=sdf.format(d) %><br>
16     Session的ID编号:<%=session.getId() %><br>
17     从Session中获取用户名:<%=session.getAttribute("username") %><br>
18
19     //添加一条连接跳转到第二个session页面
20     <a href="session2.jsp" target="_blank">跳转到Session2.jsp</a>

4-4session的生命周期
session的生命周期分为三个阶段:
    1.创建:当客户端第一次访问某个JSP或者Servlet的时候,服务器会为当前会话创建一个SessionId,每次客户端服务端发送请求时,都会将此SessionId携带过去,服务端会对此SessionId进行校验。通过校验比对来判断当前会话是不是同一个会话。
    2.活动:
        >某次会话当中通过超链接打开的新页面属于同一次会话。
        >只要当前会话页面没有全部关闭,重新打开新的浏览器窗口访问统一项目资源时属于同义词会话。
        >除非本次会话的所有页面都关闭后再重新访问某个JSP或者Sevlet将会创建新的会话。
        注意事项:注意原有的会话还存在,只是这个旧的SessionId仍然存在于服务端,只不过再也没有客户端会携带它然后交予服务端校验。
    3.销毁:
        Session的销毁只有三种方式:
            >调用session。incalidate()方法<注意销毁方法之后就无法再调用已经销毁的session了,这明显会抛出异常>
            >Session过期(超时)
            >服务器重新启动

//如何通过浏览器查看后台Tomcat管理,比如看会话

关于超时时间:
 Tomcat默认的session超时时间为30分钟。
 设置session超时有两种方式。
     1.session.setMaxInactiveInterval(时间);//单位是秒
     2.在web.xml配置
         <session-config>
             <session-timeout>
             10
             </session-timeout>
         </session-config>//单位是分钟
 两种配置超时时间方式,单位是不一样的。

4-6application对象
     application对象实现了用户数据的共享,可存放全局变量。
     application开始与服务器的启动,终止于服务器的关闭。
     在用户的前后连接或不同用户之间的连接中,可以对application对象的同一属性进行操作。
     在任何地方对application对象属性的操作,都将影响其他用户对此的访问。
     服务器的启动和关闭决定了application对象的生命。
     application对象是ServletContext类的实例。
  常用的方法如下:
  public void setAttribute(String name,Object value)使用指定名称将对象绑定到此会话。
  public Object getAttribute(String name)返回与此会话中得指定名称绑定在一起的对象,如果没有对象绑定在该名称下,则返回null。
  Enumeration getAttributeNames()返回所有可用属性名的枚举
  String getServerInfo()返回JSP(SERVLET)引擎名及版本号
 
在工程的目录WebContext下新建一个application.jsp文件

 1 <%@page import="java.util.Enumeration"%>
 2 <%@ page language="java" contentType="text/html; charset=UTF-8"
 3     pageEncoding="UTF-8"%>
 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     <h1>application内置对象</h1>
12     <%
13         application.setAttribute("city", "北京");
14         application.setAttribute("postcode", "10000");
15         application.setAttribute("email", "[email protected]");
16     %>
17     所在的城市是:<%=application.getAttribute("city") %><br>
18     application中得属性有: <%
19         Enumeration attributes = application.getAttributeNames();
20         while(attributes.hasMoreElements()){
21             out.println(attributes.nextElement()+"&nbsp;&nbsp;");
22         }
23
24     %><br>
25     JSP(SERVIET)引擎名及版本号:<%=application.getServerInfo() %><br>
26 </body>
27 </html>

4-8page对象
page对象
    page对象就是指向当前JSP页面本身,有点像类中的this指针,它是java.lang.Object类的实例。常用方法如下:
    class getClass()返回此Object的类。
    int hashCode()返回此Object的hash码
    boolean equals(Object obj)判断此Object是否与指定的Object对象相等
    void copy(Object obj)把此Object拷贝到指定的Object对象中
    Object clone()克隆此Object对象
    String toString()把此ObjectObject对象转换成String类的对象
    void notify()唤醒一个等待的线程
    void notifyAll()唤醒所有等待的线程
    void wait(int timeout)使一个线程处于等待直到timeout结束或被唤醒
    void wait()使一个线程处于等待直到被唤醒

新建一个page.jsp页面:

 1 <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
 2 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
 3 <html>
 4 <head>
 5 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 6 <title>Insert title here</title>
 7 </head>
 8 <body>
 9 <h1>page内置对象</h1>
10 当前page页面对象的字符串描述:<%=page.toString() %><br>
11 </body>
12 </html>

4-9pageContext对象和config对象
pageContext对象
    >pageContext对象提供了对JSP页面内所有的对象及名字空间的访问
    >pageContext对象可以访问到本页面所在的session,也可以取本页面所在的applica的某一属性值
    >pageContext对象相当于页面中所有功能的集大成者
    >pageContext对象的本类名也叫pageContext
常用的方法如下:
>JspWriter getOut() 返回当前客户端响应被使用的JspWriter流(out)
>HttpSession getSession() 返回当前页中的HttpSession对象(session)
>Object getPage()返回当前页中的Object对象(page)
>ServletRequest getRequest()返回当前页的ServletReques对象(request)
>ServletResponse getResponse()返回当前页的ServletResou
>void setAttribute(String name,Object attribute)
>Object getAttribute(Stirng name,int scope)在制定范围内取属性的值
>int getAttributeScope(String name)返回某属性的作用范围
>void forword(String relativeUrlPath)使当前页面重导到另一页面
>void include(Stirng relativeUrlPath)在当期位置包含另一文件
新建一个pageContext.jsp页面:

 1 <%@ page language="java" contentType="text/html; charset=UTF-8"
 2     pageEncoding="UTF-8"%>
 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 <h1>pageContext内置对象</h1>
11 用户名:<%=pageContext.getSession().getAttribute("username") %><br>
12
13 </body>
14 </html>

注意了,这里面访问的Session对象setAttribute的是在页面session.jsp页面中,所以测试这个pageContext.jsp需要先打开session.jsp然后打开pageContext.jsp页面
看看是否会输出在session.jsp页面如下代码中添加的username属性:

 1 <%@page import="java.text.SimpleDateFormat"%>
 2 <%@ page language="java" import="java.util.*,java.text.*" contentType="text/html; charset=UTF-8"
 3     pageEncoding="UTF-8"%>
 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>session</title>
 9 </head>
10 <body>
11     <h1>session内置对象</h1>
12     <hr>
13     <%
14     SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
15     Date d = new Date(session.getCreationTime());
16     session.setAttribute("username", "admin");
17     session.setAttribute("password", "123456");
18     session.setAttribute("age", 20);
19
20     //设置当前session最大生成期限单位是秒
21     //session.setMaxInactiveInterval(5);
22     %>
23     Session创建时间:<%=sdf.format(d) %><br>
24     Session的ID编号:<%=session.getId() %><br>
25     从Session中获取用户名:<%=session.getAttribute("username") %><br>
26
27     //添加一条连接跳转到第二个session页面
28     <a href="session2.jsp" target="_blank">跳转到Session2.jsp</a>
29
30 </body>
31 </html>

然后我们体验一下forword方法,在pageContext.jsp中添加下面<%....%>那行代码:

1 <body>
2 <h1>pageContext内置对象</h1>
3 用户名:<%=pageContext.getSession().getAttribute("username") %><br>
4 <%
5     //跳转到相对页面
6     pageContext.forward("reg.jsp");//刷新这个页面会自动跳转到这个相对路径下的页面。但是url路径还是保留原来的。
7 %>
8 </body>

然后看看include方法,可以包含其它页面。我们新建一个include.jsp页面:

 1 <%@page import="java.text.SimpleDateFormat"%>
 2 <%@page import="java.util.*"%>
 3 <%@ page language="java" contentType="text/html; charset=UTF-8"
 4     pageEncoding="UTF-8"%>
 5 <%
 6     //我们要在这个页面输出中文的日期
 7     Date date = new Date();
 8     SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日");
 9     String s = sdf.format(date);
10     out.println(s+"<br>");
11 %>

然后在pageContext.jsp中包含include.jsp页面:

 1 <%@ page language="java" contentType="text/html; charset=UTF-8"
 2     pageEncoding="UTF-8"%>
 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 <h1>pageContext内置对象</h1>
11 用户名:<%=pageContext.getSession().getAttribute("username") %><br>
12 <%
13     pageContext.include("include.jsp");
14 %>
15 </body>
16 </html>

接下来讲解Config对象
    config对象是在一个Servlet初始化时,JSP引擎向它传递信息用的,此信息包含Servlet初始化时所要用到得参数(通过属性名和属性值构成)以及服务器的有关信息(通过传递一个ServletContext对象),常用的方法如下:

ServletContext getServletContext()返回含有服务器相关信息的ServletContext对象
    String getInitParameter(String name)返回初始化参数的值
    Enumeration getInitParameterNames()返回Servlet初始化所需所有参数的枚举

4-10 Exception 对象
    exception对象是一个异常对象,当一个页面在运行过程中发生了异常,就产生这个对象。
    如果一个JSP页面要应用此对象,就必须把isErrorPage设为true,否则无法编译。他实际上是java.lang.Throwable的对象,常用方法如下:
        >Stirng getMessage()返回描述异常的消息
        >String toString()返回关于异常的简短描述消息
        >void printStackTrace()显示异常及其栈轨迹
        >Throwable FillInStackTrace()重写异常的执行栈轨迹
这里异常处理是和javaee是类似的,下面就代码实例演示一下吧:
首先新建一个exception.jsp页面:

 1 <%@ page language="java" contentType="text/html; charset=UTF-8" errorPage="exception.jsp"
 2     pageEncoding="UTF-8"%>
 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     <h1>测试异常的页面</h1>
11     <br>
12     <%
13         System.out.print(100/0);//抛出运行时异常,算数异常
14     %>
15 </body>
16 </html>

然后新建一个exception.jsp用于接收exception_test.jsp抛出的异常:

 1 <%@ page language="java" contentType="text/html; charset=UTF-8" isErrorPage="true"
 2     pageEncoding="UTF-8"%>
 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     <h1>测试异常的页面</h1>
11     <br>
12     异常消息是:<%=exception.getMessage() %><br>
13     异常的字符串描述:<%=exception.toString() %>
14 </body>
15 </html>

4-11阶段案例--实现用户登录
    实现用户登录的小例子。
        用户名admin,密码admin,登录成功使用服务器内部转发到login_success.jsp页面,并且提示登录成功的用户名。
        如果登录失败则请求重定向到login_failure.jsp页面。

时间: 2024-10-25 10:42:17

JAVA遇见HTML——JSP篇的相关文章

Java遇见HTML——JSP篇之商品浏览记录的实现

一.项目总体介绍 使用Cookie实现商品浏览记录. 要实现这个程序采取的是Model1(Jsp+JavaBean)架构实现,具体步骤: 首先要有个数据库,商品表,操作数据库的一个类DBHelper类 创建实体类(与数据库表一一对应) 创建业务逻辑类(DAO) 创建页面层 二.DBHelper类设计 1 package util; 2 3 import java.sql.Connection; 4 import java.sql.DriverManager; 5 6 public class D

Java遇见HTML——JSP篇之JSP指令与动作元素

一.include指令(如:<%@include file="..."%> ) 示例: Date.jsp 1 <%@page import="java.text.SimpleDateFormat"%> 2 <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> 3 <% 4 Date

Java遇见HTML——JSP篇之JavaWeb简介

一.什么是WEB应用程序 Web应用程序是一种可以通过Web(互联网)访问的应用程序.Web应用程序的一个最大好处是用户很容易访问应用程序.用户只需要有浏览器即可,不需要再安装其他软件. 为什么要学习Web应用程序? 因为Web应用程序开发,是目前软件开发领域的三大方向之一. 软件开发的三大方向有: 1.桌面应用程序(C/S架构)2.Web应用程序(B/S架构)3.嵌入式应用程序(移动开发等) JavaWeb开发属于Java开发三大方向之一,属于JavaEE方向. 二.静态网页与动态网页 注意:

Java遇见HTML——JSP篇之JSP基础语法

一.JSP简介 JSP全名为Java Server Pages,Java服务器端页面,其根本是一个简化的Servlet设计,它实现了在Java中使用HTML标签.Jsp是一种动态网页技术标准,是在服务器端执行的. 二.常用动态网站开发技术 常见动态网站开发技术对比: JavaEE比较适用于以下开发: 三.JSP页面元素构成 3.1.JSP指令 JSP的三大指令元素: page指令语法: 如: 注意:pageEncoding是jsp文件本身的编码,contType的charset是指服务器发给客户

JAVA遇见HTML——JSP篇:JavaBeans

Javabeans简介 Javabeans就是符合某种特定的规范的java类.使用Javabeans的好处是解决代码重复编写,减少代码冗余,功能区分明确,提高了代码的维护性. Javabean的设计原则 公有类 属性私有 无参的公有构造方法 getter和setter方法 什么是Jsp动作 什么是Jsp动作标签 <jsp:useBeans> 在Jsp页面中如何使用Javabeans <jsp:setProperty> <jsp:getProperty> Moderl1简

JAVA遇见HTML——JSP篇:JSP内置对象(下)

什么是session session表示客户端与服务器的一次会话 Web中的session指的是用户在浏览某个网站时,从进入网站到浏览器关闭所经过的这段时间,也就是用户浏览这个网站所花费的时间 从上述定义中可以看到,session实际上是一个特定的时间概念 在服务器的内部中保存着不同用户的session session对象 session对象是一个JSP内置对象. session对象在第一个JSP页面被装载时自动创建,完成会话期管理. 从一个客户打开浏览器并连接到服务器开始,到客户关闭浏览器离开

JAVA遇见HTML——JSP篇(2、JSP基础语法)

JSP内置out对象 原文地址:https://www.cnblogs.com/songsongblue/p/9750618.html

JAVA遇见HTML——JSP篇(JSP内置对象上)

action:表单交给哪个动作去处理 上下文路径默认的就是项目的虚拟路径 这个问题要解决我们需要配置tomcat服务器,需要修改tomcat服务器配置文档server.xml 修改完这个配置文档,tomcat服务器需要重启,否则不会生效 例如: 测试1: 测试结果: 测试2: 测试结果: 原文地址:https://www.cnblogs.com/songsongblue/p/9751761.html

Java学习之Servlet篇

<JAVA遇见HTML——Servlet篇> Servlet 生命周期:Servlet 加载--->实例化--->服务--->销毁. init():在Servlet的生命周期中,仅执行一次init()方法.它是在服务器装入Servlet时执行的,负责初始化Servlet对象.可以配置服务器,以在启动服务器或客户机首次访问Servlet时装入Servlet.无论有多少客户机访问Servlet,都不会重复执行init(). service():它是Servlet的核心,负责响应客