JSP:
JSP全称Java Server Pages,是一种动态网页开发技术。它使用JSP标签在HTML网页中插入Java代码。标签通常以<%开头以%>结束。
JSP是一种Java servlet,主要用于实现Java web应用程序的用户界面部分。网页开发者们通过结合HTML代码、XHTML代码、XML元素以及嵌入JSP操作和命令来编写JSP。
JSP通过网页表单获取用户输入数据、访问数据库及其他数据源,然后动态地创建网页。
JSP标签有多种功能,比如访问数据库、记录用户选择信息、访问JavaBeans组件等,还可以在不同的网页中传递控制信息和共享信息。
JSP的优势:
脚本程序:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
Insert title here
<%
out.println("Your ID address is " + request.getRemoteAddr());
%>
结果如下:
JSP声明:
使用<%! %>声明
如:<%! int i = 0; %>
JSP表达式:
表达式的值会被转换为String,因此可以在文本行中直接使用表达式
如:<%= (new java.util.Data()).toLocaleString()%>
JSP指令:
<%@ page … %> : 定义页面的依赖属性,比如脚本语言、error页面、缓存需求等等
<%@ include … %> : 包含其他文件
<%@ taglib … %> : 引入标签库的定义,可以是自定义标签
使用HttpServletRequest类的getHeaderNames()方法来读取HTTP信息头
Enumeration getHeaderNames();
返回所有HTTP头的名称集合
<%@page import="java.util.Enumeration"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
获取请求头
获取请求头
<%
Enumeration headerNames = request.getHeaderNames();
while(headerNames.hasMoreElements()){
String paramName = (String)headerNames.nextElement();
out.print("" + paramName + " ");
String paramValue = request.getHeader(paramName);
out.print(" " + paramValue +" \n");
}
%>
使用HttpServletResponse类的实例response可以设置响应头
如下设置响应头进行自动刷新
<%@page import="java.util.Calendar"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
设置自动刷新
<%
//设置每隔5秒自动刷新
response.setIntHeader("Refresh", 5);
//获取日期
Calendar cal = Calendar.getInstance();
int year = cal.get(Calendar.YEAR);
int month = cal.get(Calendar.MONTH) + 1;
int day = cal.get(Calendar.DAY_OF_MONTH);
int hour = cal.get(Calendar.HOUR);
int minute = cal.get(Calendar.MINUTE);
int second = cal.get(Calendar.SECOND);
int weekday = cal.get(Calendar.DAY_OF_WEEK) - 1;
String timeMark= year + "-" + month + "-" + day + " " + hour + ":" + minute + ":" + second
+ " 今天是星期" + weekday;
out.println(timeMark);
%>
JSP常用的情景之一
提交数据,浏览器中经常使用GET和POST方法
GET方法:
GET方法将编码信息添加在网址后面,与网址通过“?”号分隔,可以直接看到数据,密码等敏感信息不建议使用get方法。
因为将信息添加至网址后面,其传输数据的大小有限制,最大为1024字节。
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
使用GET方法获取数据
使用GET方法获取数
姓名:<%=new String((request.getParameter("name")).getBytes("ISO-8859-1"),"UTF-8")%>
年龄:<%=request.getParameter("age") %>
使用post方法:
post提交数据为隐式,敏感信息可以通过post提交
index.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
使用post方法读取数据
使用post方法读取数据
PostDemo.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
使用post方法读取数据
使用post方法读取数据
姓名:<%=new String((request.getParameter("name")).getBytes("ISO-8859-1"),"UTF-8") %>
年龄:<%=request.getParameter("age") %>
使用JSP设置cookie包含三个步骤:
(1)创建一个Cookie对象;
(2) 设置有效期;
(3) 将cookie发送至HTTP响应头中。
index.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
设置cookie
设置cookie
SetCookie.jsp
<%@page import="java.net.URLEncoder"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
Insert title here
<%
//解决中文乱码
String str = URLEncoder.encode(request.getParameter("name"));
//设置cookie
Cookie name = new Cookie("name", str);
Cookie age = new Cookie("age", request.getParameter("age"));
//设置cookie的过期时间为24h
name.setMaxAge(60*60*24);
age.setMaxAge(60*60*24);
//响应头添加cookie
response.addCookie(name);
response.addCookie(age);
%>
姓名:
<%=new String(request.getParameter("name").getBytes("ISO-8859-1"),"UTF-8") %>
年龄:
<%=request.getParameter("age") %>
GetCookie.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@page import="java.net.*"%>
Get Cookie
<%
//取得cookie的数据
Cookie[] cookies = request.getCookies();
if(cookies != null) {
for(Cookie cookie : cookies){
out.print("名称:" + cookie.getName());
out.print("
");
out.print("数值:" + URLDecoder.decode(cookie.getValue(), "utf-8"));
out.print("
");
}
} else {
out.println("无cookie
");
}
%>
session在网络中被称为会话,由于HTTP协议是一种无状态协议,也就是当客户端向服务器发出请求时,服务器接收请求并返回响应后,该链接结束,服务器不保存相应的信息。为了弥补这一缺点,HTTP协议提供了session。
session保存在服务器端,为了高速存取一般放在服务器的内存中。而每个用户独立一个session,因此用户多了后,session会越来越多,为了防止内存溢出,服务器会把长时间没有活跃的session移除。Tomcat的默认失效时间为30分钟。
index03.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
利用session实现自动登录
登录页面
sessiondeal.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
Insert title here
<%
String user = request.getParameter("user");
String pwd = request.getParameter("password");
boolean flag = false;
if("admin".equals(user) && "admin".equals(pwd))
flag= true;
if(flag){
session.setAttribute("user", user);
response.sendRedirect("login.jsp");
} else {
response.sendRedirect("index03.jsp");
}
%>
login.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
成功登录
登录成功
欢迎你! <%=session.getAttribute("user") %>
Application对象是JSP的一个内置对象。当服务器启动时,该对象被自动创建,直到服务器关闭该对象才会消失,并且在此期间可以被多个用户共同使用。这是不同于session对象的。
下列使用application实现网站计数:
count.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
网站流量统计
网站流量统计
<%
Integer count = (Integer)application.getAttribute("count");
if(count == null || count==0 ){
out.println("欢迎访问!");
count = 1;
} else {
out.println("欢迎再次访问!");
count++;
}
application.setAttribute("count", count);
%>
访问量:<%=count %>
结果如下: