初识JSP
先来看个例子
<%@ page language="java" import="java.util.*" pageEncoding="ISO-8859-1"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme() + "://"
+ request.getServerName() + ":" + request.getServerPort()
+ path + "/";
%>
My JSP 'test.jsp' starting page
This is my JSP page.
<%
Date date = new Date();
out.write(date.toLocaleString());
%>
概述
原理
生产的servlet例子
/*
* Generated by the Jasper component of Apache Tomcat
* Version: Apache Tomcat/7.0.64
* Generated at: 2017-12-02 03:42:39 UTC
* Note: The last modified time of this file was set to
* the last modified time of the source file after
* generation to assist with modification tracking.
*/
package org.apache.jsp;
import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.jsp.*;
import java.util.*;
public final class index_jsp extends org.apache.jasper.runtime.HttpJspBase
implements org.apache.jasper.runtime.JspSourceDependent {
private static final javax.servlet.jsp.JspFactory _jspxFactory =
javax.servlet.jsp.JspFactory.getDefaultFactory();
private static java.util.Map _jspx_dependants;
private javax.el.ExpressionFactory _el_expressionfactory;
private org.apache.tomcat.InstanceManager _jsp_instancemanager;
public java.util.Map getDependants() {
return _jspx_dependants;
}
public void _jspInit() {
_el_expressionfactory = _jspxFactory.getJspApplicationContext(getServletConfig().getServletContext()).getExpressionFactory();
_jsp_instancemanager = org.apache.jasper.runtime.InstanceManagerFactory.getInstanceManager(getServletConfig());
}
public void _jspDestroy() {
}
public void _jspService(final javax.servlet.http.HttpServletRequest request, final javax.servlet.http.HttpServletResponse response)
throws java.io.IOException, javax.servlet.ServletException {
final javax.servlet.jsp.PageContext pageContext;
javax.servlet.http.HttpSession session = null;
final javax.servlet.ServletContext application;
final javax.servlet.ServletConfig config;
javax.servlet.jsp.JspWriter out = null;
final java.lang.Object page = this;
javax.servlet.jsp.JspWriter _jspx_out = null;
javax.servlet.jsp.PageContext _jspx_page_context = null;
try {
response.setContentType("text/html;charset=ISO-8859-1");
pageContext = _jspxFactory.getPageContext(this, request, response,
null, true, 8192, true);
_jspx_page_context = pageContext;
application = pageContext.getServletContext();
config = pageContext.getServletConfig();
session = pageContext.getSession();
out = pageContext.getOut();
_jspx_out = out;
out.write('\r');
out.write('\n');
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
out.write("\r\n");
out.write("\r\n");
out.write("\r\n");
out.write("\r\n");
out.write(" \r\n");
out.write(" \r\n");
out.write(" \r\n");
out.write(" My JSP 'index.jsp' starting page \r\n");
out.write("\t\r\n");
out.write("\t\r\n");
out.write("\t \r\n");
out.write("\t\r\n");
out.write("\t\r\n");
out.write("\t\r\n");
out.write(" \r\n");
out.write(" \r\n");
out.write(" \r\n");
out.write(" This is my JSP page.
\r\n");
out.write(" \r\n");
out.write("\r\n");
} catch (java.lang.Throwable t) {
if (!(t instanceof javax.servlet.jsp.SkipPageException)){
out = _jspx_out;
if (out != null && out.getBufferSize() != 0)
try {
if (response.isCommitted()) {
out.flush();
} else {
out.clearBuffer();
}
} catch (java.io.IOException e) {}
if (_jspx_page_context != null) _jspx_page_context.handlePageException(t);
else throw new ServletException(t);
}
} finally {
_jspxFactory.releasePageContext(_jspx_page_context);
}
}
}
hello world!
out.write("\r\n");
out.write("\r\n");
out.write("\r\n");
out.write("\r\n");
out.write("\r\n");
out.write("hello world!
\r\n");
out.write("\r\n");
out.write("\r\n");
out.write("\r\n");
<%=1+1 %>
out.print(1+1 );
<%
for (int i = 0; i < 10; i++) {
out.write(""+i);
}
%>
for (int i = 0; i < 10; i++) {
out.write(""+i);
}
<%!String x = "100";%>
lala~~~
<%
out.write(x);
%>
String x = "100";
。。。
public void _jspService(final javax.servlet.http.HttpServletRequest request, final javax.servlet.http.HttpServletResponse response)
throws java.io.IOException, javax.servlet.ServletException {
...
out.write(x);
...
}
1. jsp注释<%-- --%>-------在servlet直接没有
2. java注释// /*/---------在servlet中注释的内容
3. html注释-------在servlet中当做模板元素输出到页面
<%--我是jsp注释 --%>
servlet中没有对应的代码
在真正的开发中,servlet擅长处理业务逻辑,但是不擅长输出页面;jsp不擅长处理业务逻辑,但是擅长页面输出;往往是servlet处理逻辑通过请求转发,利用request域将结果发给jsp,jsp展示界面【转发:域对象来带数据】
cookie是客户端技术,将会话产生的数据保存在客户端,当浏览器访问服务器时,服务器通过set-Cookie将数据发送给客户端,客户端进行保存;当浏览器再次访问服务器时,Cookie头信息将之前的保存的信息发送给服务端
package com.peng.ser;
import java.io.IOException;
import java.util.Date;
import java.util.HashMap;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class LastTimeAccess extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
this.doPost(request, response);
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
HashMap map = new HashMap();
// 获取上一次访问的时间
String str = request.getHeader("Cookie");
if (null != str) {
// 存Cookie到map
for (String temp : str.split(";")) {
String[] kv = temp.split("=");
map.put(kv[0], kv[1]);
}
if (map.containsKey("lasttime")) {
System.out.println(map.get("lasttime"));
response.getWriter().write(map.get("lasttime"));
}
}
response.addHeader("set-Cookie",
"lasttime=" + new Date().toLocaleString());
}
}
简化Cookie的使用
api:Cookie类
获取头中的Cookie数组:request.getCookies()
package com.peng.ser;
import java.io.IOException;
import java.util.Date;
import java.util.HashMap;
import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class LastTimeAccess extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
this.doPost(request, response);
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// 获取上一次访问的时间
Cookie[] cs = request.getCookies();
if (cs != null) {
for (Cookie cookie : cs) {
if ("lasttime".equals(cookie.getName())) {
response.getWriter().write(cookie.getValue());
}
}
}
Cookie c = new Cookie("lasttime", new Date().toLocaleString());
response.addCookie(c);
}
}
Cookie的存活时间
代码设置Cookie的存活时间:保存指定的时间,即使关闭浏览器,下次打开也会存在
package com.peng.ser;
import java.io.IOException;
import java.util.Date;
import java.util.HashMap;
import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class LastTimeAccess extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
this.doPost(request, response);
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// 获取上一次访问的时间
Cookie[] cs = request.getCookies();
if (cs != null) {
for (Cookie cookie : cs) {
if ("lasttime".equals(cookie.getName())) {
response.getWriter().write(cookie.getValue());
}
}
}
Cookie c = new Cookie("lasttime", new Date().toLocaleString());
c.setMaxAge(60 * 60 * 24);// Cookie的存活时间 一天
response.addCookie(c);
}
}
Cookie的访问路径下携带数据
设置浏览器访问哪些路径时携带Cookie【cookie.setPath(String path)】
package com.peng.ser;
import java.io.IOException;
import java.util.Date;
import java.util.HashMap;
import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class LastTimeAccess extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
this.doPost(request, response);
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// 获取上一次访问的时间
Cookie[] cs = request.getCookies();
if (cs != null) {
for (Cookie cookie : cs) {
if ("lasttime".equals(cookie.getName())) {
response.getWriter().write(cookie.getValue());
}
}
}
Cookie c = new Cookie("lasttime", new Date().toLocaleString());
c.setMaxAge(60 * 60 * 24);// Cookie的存活时间 一天
c.setPath("/publicDemo");//设置可以携带的cookie
response.addCookie(c);
}
}
删除Cookie
需要发送一个Cookie,名字相同,PATH相同,但是要把sexMaxAge(0)设置为0,即立即删除此Cookie
package com.peng.ser;
import java.io.IOException;
import java.util.Date;
import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class DelCookie extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
this.doPost(request, response);
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
Cookie c = new Cookie("lasttime", new Date().toLocaleString());
c.setMaxAge(0);// 删除cookie
c.setPath(request.getContextPath());
response.addCookie(c);
}
}
EasyMall登录页面逻辑
登录页面
<%@page import="java.net.URLDecoder"%>
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
EasyMall欢迎您登陆
欢迎登陆EasyMall
<%
//获取Cookie
Cookie[] cookies = request.getCookies();
String cookieUsername = null;
if (cookies != null) {
for (Cookie cookie : cookies) {
if ("remname".equals(cookie.getName())) {
cookieUsername = cookie.getValue();
}
}
}
%>
登录后台
package com.easymall.ser;
import java.io.IOException;
import java.net.URLEncoder;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import com.easymall.utils.MySqlUtils;
@SuppressWarnings("serial")
public class LoginSer extends HttpServlet {
private Connection conn = null;
private PreparedStatement stat = null;
private ResultSet rs = null;
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
this.doPost(request, response);
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// 解决乱码
request.setCharacterEncoding("utf-8");
response.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8");
// 获取用户名和密码
String username = request.getParameter("username") == null ? ""
: request.getParameter("username");
String password = request.getParameter("password") == null ? ""
: request.getParameter("password");
// 处理记住用户名的逻辑
if ("true".equals(request.getParameter("remname"))) {
Cookie cookie = new Cookie("remname", URLEncoder.encode(username,
"utf-8"));
cookie.setMaxAge(60 * 60 * 24 * 30);
cookie.setPath(request.getContextPath());
response.addCookie(cookie);
} else {// 不保存--删除Cookie
Cookie cookie = new Cookie("remname", "");
cookie.setMaxAge(0);
cookie.setPath(request.getContextPath());
response.addCookie(cookie);
}
// 检查用户名和密码
try {
conn = MySqlUtils.getConn();
stat = conn
.prepareStatement("select * from user where username=? and password=?");
stat.setString(1, username);
stat.setString(2, password);
rs = stat.executeQuery();
if (rs.next()) { // 正确,回到主页
// 获取session
HttpSession session = request.getSession();
// 在session中加入相应的标记
session.setAttribute("username", username);
// 回到主页
response.getWriter().write("登录成功!正在跳转。。。");
response.setHeader("refresh",
"2;url=" + request.getContextPath() + "/index.jsp");
} else {// 不正确,回到登录界面
response.addHeader("refresh",
"0;url=" + request.getContextPath() + "/login.jsp?msg="
+ URLEncoder.encode("账号密码错误!","utf-8"));
}
} catch (Exception e) {
e.printStackTrace();
} finally {
MySqlUtils.close(conn, stat, rs);
}
}
}
注销逻辑
package com.easymall.ser;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* 注销当前账户
*
* @author Administrator
*
*/
@SuppressWarnings("serial")
public class LogoutSer extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// 解决乱码
response.setCharacterEncoding("utf-8");
response.setContentType("text/html;charst=utf-8");
// 杀死session--先进行判断用户是否有session--防止恶意攻击
if (request.getSession(false) != null) {
request.getSession(false).invalidate();
}
// 回到主页
// 注销中。。。
response.getWriter().write("注销成功!正在跳转到主页。。。");
response.setHeader("refresh", "2;url=" + request.getContextPath()
+ "/index.jsp");
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
this.doGet(request, response);
}
}
首界面
index.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"
buffer="0kb"%>
欢迎光临EasyMall
<%
request.getRequestDispatcher("head.jsp").include(request, response);
%>
500强企业
品质保证 7天退货
15天换货 100元起免运费
448家维修网点
全国联保
<%
request.getRequestDispatcher("foot.jsp").include(request, response);
%>
head.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
Copyright © 2011-2015 达内软件技术有限公司 版权所有 保留一切权利 苏B2-20130048号 |
京ICP备09062682号-9
网络文化经营许可证苏网文[2012]0401-019号