JSP
首先来个index.jsp演示基本用法
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<!-- 向頁面輸出basePath -->
<base href="<%=basePath%>">
<title>My JSP 'index.jsp' starting page</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->
</head>
<body>
This is my JSP page. <br>
<%
int a = 10;
%>
<%
out.print(a++);
%>
<br/>
<%= a %>
<%!
int a = 100;
public void fun1(){
System.out.println(a);
}
%>
<%
out.print(this.a++);
fun1();
%>
</body>
</html>
然后写个简单的jsp与Servlet分工Demo
1.from.jsp
<body>
<form action="/day11_1/AServlet" method="post">
整数1:<input type="text" name="num1"/><br/>
整数2:<input type="text" name="num2" /><br/>
<input type="submit" value="提交" />
</form>
</body>
2.AServlet
package cn.itcast.servlet;
import java.io.IOException;
import javax.naming.spi.DirStateFactory.Result;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet("/AServlet")
public class AServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//获取参数
String s1 = request.getParameter("num1");
String s2 = request.getParameter("num2");
//转换成int
int num1 =Integer.parseInt(s1);
int num2 = Integer.parseInt(s2);
//运算
int sum = num1 + num2;
//把结果保存到request域中
request.setAttribute("result",sum);
//转发到result.jsp
request.getRequestDispatcher("/jia/result.jsp").forward( request, response);
}
}
3.result.jsp
<body>
<%
Integer result =(Integer) request.getAttribute("result");
%>
<%= result %>
</body>
</html>
如何看到jsp被转换成java代码
Cookie
cookie的最大生命:cookie.setMaxAge(60),以秒为单位 表示被浏览器 保存到硬盘60s
maxAge>0 保存到客户机硬盘
=0 在浏览器内存存在,浏览器进程结束则cookie死亡
<0 浏览器马上删除这个cookie
demo:把a的cookie发送到b 并打印出来
a.jsp
<body>
<h1>保存cookie</h1>
<%--request response session application pageContext config out page exception--%>
<%
Cookie cookie1 = new Cookie("aaa","AAA");
cookie1.setMaxAge(60*60);
response.addCookie(cookie1);
Cookie cookie2 = new Cookie("bbb","BBB");
response.addCookie(cookie2);
%>
</body>
b.jsp
<body>
<h1>获取Cookie</h1>
<%
Cookie[] cookies = request.getCookies();
if(cookies!=null){
for(Cookie c :cookies){
out.print(c.getName()+"=="+c.getValue()+"<br/>");
}
}
%>
</body>
Cookie的domain 域
Cookie的path是在同一主机中指定共享Cookie,如果主机不同那么就一定不能共享Cookie,无论path是什么。
如果希望不同的二级域名中可以共享Cookie,那么就要设置Cookie的domain了。
例如:news.baidu.com、tieba.baidu.com、zhidao.baidu.com,它们的域名不同,但百度希望它们之间可以共享Cookie,那么就要设置domain了。
1). 设置Cookie的path为“/”,例如:cookie.setPath("/");
2). 设置Cookie的domain,例如:cookie.setDomain(".baidu.com"),其中domain中没有指定域名前缀!
HttpSession
三大域对象之1(request,session,application(ServletContext))
只要是域对象 都有这三个方法
1.void getAttribute(String name,Object value)
2.Object getAttribute(String name);
3.void removeAttribute(String name);
demo1:演示session中会话的多次请求中共享数据
a.jsp:向session域中保存数据
<body>
<h1>向session域保存数据</h1>
<%--HttpSession session =request.getSession();已经在jsp最上方自动被创建了9大内置对象 所以这里不用 重新创建--%>
<%
session.setAttribute("aaa", "AAA");
%>
</body>
b.jsp:向session域中获取数据
<body>
<h1>获取session中的数据</h1>
<%
String s = (String)session.getAttribute("aaa");
%>
<%= s %>
</body>
demo2: 演示登录请求 验证登录
login.jsp
<body>
<%-- 本页面提供登录表单 还要显示错误信息 --%>
<h1>登录</h1>
<%
//读取名为uname的cookie 不为空就显示到username文本框
String uname="";
Cookie[] cookies = request.getCookies();
if(cookies!=null){ //如果存在cookie
for(Cookie cookie:cookies){ //遍历
if("uname".equals(cookie.getName())){ //查找名为uname的cookie
uname = cookie.getValue(); //获取cookie的值 赋值给uname;
}
}
}
%>
<%
String message="";
String msg = (String) request.getAttribute("msg"); //获取request的msg信息
if(msg!=null){
message = msg;
}
%>
<font color="red"><b>
<%= message %>
</b></font>
<form action="/day11_3/LoginServlet" method="post">
<!-- 把cookie的用户名显示到用户名文本框 -->
用户名:<input type="text" name="username" value="<%= uname %>"><br/>
密码:<input type="password" name="password"> <br/>
<input type="submit" value="登录">
</form>
</body>
LoginServlet
package cn.itcast.servlet;
import java.io.IOException;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
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;
@WebServlet("/LoginServlet")
public class LoginServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
/**
* 获取表单数据
*/
//如果出现乱码 则编码一下
request.setCharacterEncoding("utf-8");
//获取
String username = request.getParameter("username");
String password = request.getParameter("password");
/*
* 校验用户名和密码是否正确
*/
if(!"itcast".equals(username)){ //不等于itcast就登陆成功
/*
* 附加功能:把用户名保存到cookie中 发送给客户端浏览器
* 当再次打开login.jsp时 login.jsp会读取request中国的cookie 把他显示到用户名文本框中
*/
Cookie cookie = new Cookie("uname", username);
cookie.setMaxAge(60*60*24); //设置cookie命长为1天
response.addCookie(cookie); //保存cookie
/*
* 如果成功 1.保存用户信息到session 2.重定向到succ1.jsp
*/
HttpSession session = request.getSession(); //获取session
session.setAttribute("username",username); //向session域保存用户名
session.setAttribute("password", password);
response.sendRedirect("/day11_3/session2/succ1.jsp"); //重定向
}else{ //登录失败
/*
* 失败 保存错误信息到request域中
* 转到login.jsp
*/
request.setAttribute("msg","用户名或者密码错误");
RequestDispatcher qr =request.getRequestDispatcher("/session2/login.jsp");
qr.forward(request, response); //转发
}
}
}
登录成功界面 succ1.jsp
<body>
<h1>succ1</h1>
<%
String username = (String) session.getAttribute("username");
if(username ==null){
/*
1.向request域保存错误信息,转发login.jsp
*/
request.setAttribute("msg","你还未登录");
RequestDispatcher rd = request.getRequestDispatcher("/session2/login.jsp");
rd.forward(request, response);
return;
}
%>
欢迎欢迎,欢迎<%= session.getAttribute("username") %>
</body>
登录成功界面 succ2.jsp (和1界面一样 只是为了验证session信息还活着)
<body>
<h1>succ2222222</h1>
<%
String username = (String) session.getAttribute("username");
if (username == null) {
/*
1.向request域保存错误信息,转发login.jsp
*/
request.setAttribute("msg", "你还未登录");
RequestDispatcher rd = request
.getRequestDispatcher("/session2/login.jsp");
rd.forward(request, response);
return;
}
%>
欢迎欢迎,欢迎<%=session.getAttribute("username")%>
</body>


URL重写
package cn.itcast.servlet;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet("/AServlet")
public class AServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//让其编码为utf-8
response.setContentType("text/html;charset=utf-8");
request.getSession();
response.getWriter().print("请查看是否有session这个cookie");
}
}
<!-- URL重写 就是把所有的页面中的路径.都使用response.encodeURL("路径")处理一下 就是把cookie变成参数 -->
<body>
<a href="/day11_3/AServlet;JSESSIONID=<%=session.getId() %>">点击这里</a>
<a href="/day11_3/AServlet;JSESSIONID=<%=session.getId() %>">点击这里</a>
<a href="/day11_3/AServlet;JSESSIONID=<%=session.getId() %>">点击这里</a>
<%
//它会查看cookie是否存在 如果不存在 在指定的url添加JSessionId参数
//如果cookie存在 则不会在url后加任何东西
out.print(response.encodeUrl("/day11_3/AServlet"));
%>
</body>