本周学习到的JSP除环境配置外主要的代码内容是在网页内部写入java代码。
JSP页面的元素有:
静态内容:指html标签内静态文本,用于写网页内的内容。
指令:由<%@ …%>包起来,一般内部会有编码格式的定义,java包的引用,JSP页面创建时会自动生成一条指令
<%@ page language=“java” import=“java.util.*” pageEncoding=“UTF-8”%>
脚本语言:java 引用java.util包,编码格式为UTF-8
后续还会根据页面内的Java语言自动添加指令引用相应的java包。
表达式:由<%= %>包裹,用于单个值得输入,可以当成是一个输入工具。主要用于单独的运算。
小脚本:由<% %>包裹,用于java的编写,java语言定义,各种功能的实现代码,主要都编写在里面。
声明:<%! %>包裹,用于java的方法编写,其他地方可以调用此处写的方法。
注释:JSP中有两种注释,一种是服务器注释,一种是普通注释。普通注释是在html中经常用的<!-- --》(只能打中文反括号,打英文的会真的注释掉)注释,在访问网页时查看源代码也可以查看到;还有一种<%-- --%>服务器端注释,这种注释只有在服务器端才能查看,别人访问网页时无法看到这种注释。
当然还有一些变成语言常用的注释,比如单行// 多行/**/就不解释了。
本周学习比较重要的学习到了Cookie和session配合application的存储方式。
使用上述方法做一个登陆跳转
首先是Cookie
<form action="show.jsp" method="post">
<label>账号:</label>
<input type="text" id="txtLoginID" name="txtLoginID" value="<%=LoginID%>"/><br />
<label>密码:</label>
<input type="password" id="txtLoginPWD" name="txtLoginPWD" value="<%=LoginPWD%>"/><br />
<input type="checkbox" id= "chkSave" name = "chkSave" value="ture">记住密码<br>
<input type="submit" value="登录"/>
</form>
使用form表单将输入的数据提交到show页面,show页面要使用request来进行接受数据
String LoginID=null;String LoginPWD=null;
LoginID= request.getParameter("txtLoginID");
LoginPWD= request.getParameter("txtLoginPWD");
接受数据到LoginID和LoginPWD然后将接受到的数据存储到Cookie,注意这里是相当于实例化了两个Cookie变量,并没有进行存储。
Cookie loginIDCookie = new Cookie("LoginID",LoginID);
Cookie loginPWDCookie = new Cookie("LoginPWD",LoginPWD);
Cookie存储的参数和List类似,key值和内容,这里我们为了方便,key值和内容的变量名相同。然后要设置Cookie的存储时间,也就是它的寿命。参数以秒为单位,设置了时间后使用response中的addCookie方法将它们存储
loginIDCookie.setMaxAge(30);
loginPWDCookie.setMaxAge(30);
response.addCookie(loginIDCookie);
response.addCookie(loginPWDCookie);
接下来是回到登陆页面,将Cookie中存的值拿出来
String LoginID="";String LoginPWD="";
Cookie[] cookies = request.getCookies();
这里我们定义了一个数组,用request拿出Cookie中的值赋给数组然后使用循环依次找出我们之前存储的账号和密码
if(cookies!=null){
for(int i= 0;i<cookies.length;i++){
if(cookies[i].getName().equals("LoginID")){
LoginID = cookies[i].getValue();
}
if(cookies[i].getName().equals("LoginPWD")){
LoginPWD = cookies[i].getValue();
}
}
}
使用存储时使用key匹配查找,找出值后赋给之前定义的变量,再就只需要使用input中的value属性将变量给input就行了。
接下来是session存储的用法,session的寿命一般默认是20分钟,它与Cookie不同,是存储再服务器内存中,Cookie是再用户的浏览器里。
这里我们要实现的功能是记住用户登录的用户名,直接显示,若显示用户名的session为空就自动跳回登录界面。
页面还是使用表单提交数据,request接收数据,使用session.setAttribute方法将数据存入session。我这里存入session之前先创建一个用户类User,封装两个变量,用户名和密码,在接受页面new出对象
User user = new User();
user.setUserID(request.getParameter("txtLoginID")) ;
user.setUserPWD(request.getParameter("txtLoginPWD")) ;
然后将这个对象存入session ,然后跳进用户个人中心页面
session.setAttribute("user", user);
response.sendRedirect("user.jsp");
然后在用户页面拿出来
<%
User user =(User)session.getAttribute("user");
if(user.getUserID() !=null){
str = "欢迎用户 <a href=\"#\">"+user.getUserID()+"</a>";
}
else{
str="未登录,前往<a href=\"login.jsp\">登录</a>";
}
%>
这段代码是先将session值给到对象user,判断user是否为空,若为空显示返回登录页面的a标签,若有值便显示其中的值
最后还有一个功能要使用application全局变量,application的寿命服务器关闭之前。这里我们写一个记住所有登录过的用户然后将其显示的功能。
提交表单的数据后,多加一道工序
List<String> list=(ArrayList<String>)application.getAttribute("userList");
if(list==null)
{
list=new ArrayList<String>();
}
list.add(user.getUserID());
application.setAttribute("userList",list);
}
定义一个集合,这里先用application强转赋值给集合lishi这里就是判断application是否为空,因为我们会在后面往list中存值时使用“userlist”为key值,若为空new一个新的集合对象。然后将前面获取的user对象存储的用户名放入集合,再将集合放入application。
最后在查看所有登录过用户的页面将application的值取出来。
<%
String userol="";
List<String> list =(ArrayList<String>)application.getAttribute("userList");
if(list!=null){
for(int i =0;i<list.size();i++){
userol+=list.get(i)+"<br/>";
}
}
%>
这里同样是先判断application是否有值。然后使用循环取值,不断的叠加到一个字符串变量中,最后使用表达式将其输出
<%= userol %>