JSP

Author Avatar
Euan 11月 05, 2019
  • 在其它设备中阅读本文章

实验目的

•掌握JSP的基本构成
•掌握JSP的指令、动作标签
•掌握J SP内置对象的使用等

实验环境

•Chrome
•vscode
•Eclipse
•Tomcat

实验内容

  1. 利用JSP全部变量和JSP的内置对象分别为某一网站编写一个JSP程序,统计该网站的访问次数。重点理解JSP内置对象的作用域范围。(可参考如下的运行结果)

图1. 统计网站访问次数的举例
(下面给出相应代码和实现的截图)
如index.jsp: ***

a

  1. 编写一个JSP登录页面,可输入用户名和密码,提交请求到另一个JSP页面,该JSP页面获取请求的相关数据并显示出来。请求的相关数据包括用户输入的请求数据和请求本身的一些信息(请求使用的协议getProtocol()、请求的URIrequest.getServletPath()、请求方法request.getMethod()、远程地址request.getRemoteAddr())。同时将用户名信息添加到浏览器的cookie中,一旦再次访问登录页面将在用户名框中自动填写cookie中的用户名。(可参考如下的运行结果)

a2

图2. 第一次访问登录页面的情况(cookie中无信息)

a1

图3. 登录页面提交信息后跳转到的新页面显示的情况

a3

图4. 再次访问登录页面的情况(由cookie中读取保存的用户名)

(下面给出相应代码和实现的截图)
如login.jsp: ***

Loginsuccess.jsp: ***

实验步骤

1.之前在自己博客用过百度统计的网站分析工具,其中就有网页访问次数,这个实验应该也是做相似的内容。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<%@ page language="java" contentType="text/html; charset=UFT-8"
pageEncoding="UFT-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UFT-8">
<title>Insert title here</title>
</head>
<body>
<%
if (application.getAttribute("count") == null) {
application.setAttribute("count", new Integer(0));
}
Integer count = (Integer) application.getAttribute("count");
application
.setAttribute("count", new Integer(count.intValue() + 1));
count = (Integer) application.getAttribute("count");
%>
<div>
这是第<%=count.intValue()%>个访问者!
</div>
</body>
</html>

statistic.jsp

KtgHw8.png

2.登录注册

index.jsp

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>登录</title>

</head>
<body>
<%

String account="";
String pwd="";
Cookie[] cookies=request.getCookies();
if(cookies!=null&&cookies.length>0)
{
for(Cookie c:cookies){
if(c.getName().equals("account")){
account=c.getValue();
}
if(c.getName().equals("pwd")){
pwd=c.getValue();
}
if(c.getName().equals("account")){
request.setAttribute("flag", 1);
request.getRequestDispatcher("show.jsp").forward(request, response);
}

}

}
%>

<form name="logmes" action="show.jsp" method="post">
账号<input type="text" name="account" value="<%=account%>"><br>
密码<input type="password" name="pwd" value="<%=pwd%>"><br>
<input type="submit" value="登录">
是否保存登录状态<input name="log" type="radio" value="yes">是
<input name="log" type="radio" value="no">否

</form>
</body>
</html>

show.jsp

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>欢迎页面</title>
</head>
<body>
<%

Integer f=(Integer)request.getAttribute("flag");
String log=" ";
log=request.getParameter("log");
if(log!=null&&log.equals("yes")){
String account=request.getParameter("account");
String pwd=request.getParameter("pwd");
Cookie cookie1=new Cookie("account",account);
Cookie cookie2=new Cookie("pwd",pwd);
cookie1.setMaxAge(600*24);
cookie2.setMaxAge(600*24);
response.addCookie(cookie1);
response.addCookie(cookie2);
}
if(f==null){
System.out.println("123");
Cookie cookies[]=request.getCookies();
for(int i=0;i<cookies.length;i++)
{
cookies[i].setMaxAge(0);
response.addCookie(cookies[i]);
}
response.sendRedirect("index.jsp");
}


%>
<div>
登录成功
</div>
<body>
<%
if (application.getAttribute("count") == null) {
application.setAttribute("count", new Integer(0));
}
Integer count = (Integer) application.getAttribute("count");
application
.setAttribute("count", new Integer(count.intValue() + 1));
count = (Integer) application.getAttribute("count");
%>
<div>
这是第<%=count.intValue()%>个访问者!
</div>
</body>
</html>

KtgoOP.png

Ktg7ef.png

清除cookies
KtgLFg.png

集成前两个题目
KtgbTS.png

实验心得

Cookies是存储在客户机的文本文件,它们保存了大量轨迹信息。在servlet技术基础上,JSP显然能够提供对HTTP cookies的支持。

通常有三个步骤来识别回头客:

服务器脚本发送一系列cookies至浏览器。比如名字,年龄,ID号码等等。
浏览器在本地机中存储这些信息,以备不时之需。
当下一次浏览器发送任何请求至服务器时,它会同时将这些cookies信息发送给服务器,然后服务器使用这些信息来识别用户或者干些其它事情。

之前都是用django搭配vue写得前后台交互,没接触过java后台,这个实验也让我对cookies有了更好的了解,为后面的数据池Durid做了铺垫

本文使用 CC BY-NC-SA 3.0 中国大陆 协议许可
具体请参见 知识共享协议

本文链接:https://zyhang8.github.io/2019/11/05/javaweb-exp3/