JAVA SSM框架入门 jsp与cookie

cookie

Cookie是用来识别用户的。
如何防止借钱时被骗?
如何防止不认识一个人呢?

没有设置有效期的cookie,浏览器关闭了,cookie也就没有了



设置cookie有效期

链接:https://pan.baidu.com/s/1Fce0wIyk6jGHhO2QFQtr5Q
提取码:s2ss

下载完成后解压到,你的项目文件中
在这里插入图片描述

更改项目名字为:springmvc02cookie
在这里插入图片描述

更改后,打开项目,打开pom.xml,修改依赖名
在这里插入图片描述

然后eclipse中 ,导入此项目
在这里插入图片描述在这里插入图片描述

导入成功,打开application.properties 修改端口为:
在这里插入图片描述

选中com.tedu.webDemo右键新建一个com.tedu.webDemo.controller 包
在这里插入图片描述

设置cookie有效期

需求:用户不登录情况下,记录用户购买了那些商品。
在com.tedu.webDemo.controller中 新建一个类IndexController
package com.tedu.webDemo.controller;

import java.util.UUID;

import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletResponse;

import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.web.bind.annotation.RequestMapping;

//保存一个cookie,设置有效期,浏览器关闭还在
//关闭服务器,重启 tomcat started on port 1314
//localhost:1314    点i图标,查看cookie有效期,关闭浏览器,cookie还在
@SpringBootApplication
public class IndexController {
    
    
     @RequestMapping("/index")
      public String index(HttpServletResponse response){
    
    
         //不设有效期
    	 //创建临时的cookie,浏览器一关,就没了
    	 String id1=UUID.randomUUID().toString();
    	 Cookie cookie=new Cookie("baidu_id1",id1);
    	 response.addCookie(cookie);
    	 
    	 //长期的cookie,浏览器关了,还存在
    	 String id2=UUID.randomUUID().toString();
    	 Cookie cookie2=new Cookie("baidu_id2", id2);
    	 cookie2.setMaxAge(60*3);//有效期是3分钟
    	  return "设置cookie";
      }
}

查看bd_id1的有效期
在这里插入图片描述查看bd_id2的有效期
在这里插入图片描述

查看bd_id2还在,有效期结束后就没有了

网站能收到A网站的cookie吗?

浏览器只会把A网站保存的cookie发给A网站
像银行只会把A存的钱给A一样。



Session

会话:session用在服务器端,用session保存数据,相当于一个小型的数据库

需求:商城购物车

添加购物车

package com.tedu.webDemo.controller;

import java.util.ArrayList;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
//需求:商城购物车
@RestController
public class CartController {
    
    
	//把商品放到session中
	@RequestMapping("/add")
	//localhost:1314/add?mate=10
	//session内部是有hashmap,用来存放数据
	public String add(String name,HttpSession session) {
    
    
	    //找到购物车
		ArrayList<String> cartList = (ArrayList<String>)session.getAttribute("cartList");
		//第一次执行add(),cartList == null
		//判断购物车是否为空
		if (cartList == null) {
    
    
		    //创建购物车
			cartList = new ArrayList<String>();
			//把集合保存到session当中
			//保存购物车
			session.setAttribute("cartList", cartList);
		}
		//把商品放到集合中
		//向购物车添置商品
		cartList.add(name);
		return "将商品添加到session";
	}
	
	    //查看购物车
		//从session中取出商品
		//http://localhost:1314/list
		@RequestMapping("/list")
		public String list(HttpServletRequest request,HttpSession session) {
    
    
			String string = "";
			//找到购物车
			ArrayList<String> cartList = (ArrayList<String>) session.getAttribute("cartList");
			//判断购物车是否为空
			if (cartList != null) {
    
    
				//从集合中取出商品
				//遍历商品
				for (String name:cartList) {
    
    
					string = string + name + "<br>";
				}
			}
			return string;
		}
}

向购物车添加商品
启动服务器,打开网页输入:
localhost:1314/add?name=mate10
localhost:1314/add?name=mate20
localhost:1314/add?name=mate30


查看购物车
然后打开集合:
localhost:1314/list
在这里插入图片描述

查看cookie

在服务器使用session后,服务器会自动向浏览器写入JSESSIONID cookie,值是一个随机数,每个用户都不一样。
在这里插入图片描述在这里插入图片描述

//获取cooke用request
			Cookie[] cookies=request.getCookies();
			if(cookies != null) {
    
    
				for(Cookie cookie:cookies) {
    
    
					String name=cookie.getName();
					String value=cookie.getValue();
					string=string+name+":"+value+"<br>";
				}
			}

完整代码:

package com.tedu.webDemo.controller;

import java.util.ArrayList;

import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
//需求:商城购物车
@RestController
public class CartController {
    
    
	//把商品放到session中
	@RequestMapping("/add")
	//localhost:1314/add?mate=10
	public String add(String name,HttpSession session) {
    
    
		ArrayList<String> cartList = (ArrayList<String>)session.getAttribute("cartList");
		//第一次执行add(),cartList == null
		if (cartList == null) {
    
    
			cartList = new ArrayList<String>();
			//把集合保存到session当中
			session.setAttribute("cartList", cartList);
		}
		//把商品放到集合中
		cartList.add(name);
		return "将商品添加到session";
		
	}
		//从session中取出商品
		@RequestMapping("/list")
		public String list(HttpServletRequest request,HttpSession session) {
    
    
			String string = "";
			
			//获取cooke用request
			Cookie[] cookies=request.getCookies();
			if(cookies != null) {
    
    
				for(Cookie cookie:cookies) {
    
    
					String name=cookie.getName();
					String value=cookie.getValue();
					string=string+name+":"+value+"<br>";
				}
			}
			
			//从session中找打集合
			ArrayList<String> cartList = (ArrayList<String>) session.getAttribute("cartList");
			if (cartList != null) {
    
    
				//从集合中取出商品
				for (String name:cartList) {
    
    
					string = string + name + "<br>";
				}
			}
			return string;
		}
}

分析

使用chrome,360分别访问会发现每个用户的jsessionId是不一样的
在这里插入图片描述在这里插入图片描述
在这里插入图片描述

Cookie与sessoin的关系

Session的数据是存在服务器内存中,服务器重启数据就没了。
Session是用临时cookie实现的,浏览器一关数据就没有了。如何实现在浏览器中添加购物车,在手机端查看呢?
解决思路:
把购物商品放到数据库中,通过用户名从数据库查找购物商品。

Cookie的数据是存在浏览器中的

删除cookie,禁用cookie

在这里插入图片描述
Chrome设置高级下载内容隐私设置和安全性Cookie 及其他网站数据选择“仅将本地数据保留到您退出浏览器为止”或者“阻止网站设置任何数据”
在这里插入图片描述
在这里插入图片描述
禁用后,无法通过session获取数据。
开启后,可通过session获取数据。

如果禁用cookie后,如何使用session?
在这里插入图片描述



创建控制器controller返回json

浏览器使用ajax或vue访问服务器。
在这里插入图片描述
查看项目依赖了spring webmvc和jackson如下图
在这里插入图片描述
在这里插入图片描述

练习:

创建一个Item.java 类

package com.tedu.webDemo.controller;

public class Item {
    
    
	int id;
	String name;

	public int getId() {
    
    
		return id;
	}
	public void setId(int id) {
    
    
		this.id = id;
	}
	public String getName() {
    
    
		return name;
	}
	public void setName(String name) {
    
    
		this.name = name;
	}
}

创建一个ItemController .java 类

package com.tedu.webDemo.controller;

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class ItemController {
    
    
    @RequestMapping("/find")
    public Item find() {
    
    
    	Item item=new Item(); //打上断点
    	item.setId(90);
    	item.setName("mate30");
    	//springmvc框架会自动调用jackson
    	return item;
    	//把item转成json字符串
    }
}

DeBUG启动:
http://localhost:1314/find
在这里插入图片描述
如果执行中他变绿了,就按F8或者点击他
在这里插入图片描述

JSP

是什么呢?

java server page :老技术,10年前用,为什么还要学呢?(一些官方比如银行会使用这种)
新项目的page是用vue来写的:Vue联网取到json,用数据绑定把json中的数据显示在网页上

怎么用?

创建.jsp文件

详细设计(思路)

webDemo,下载链接:
链接:https://pan.baidu.com/s/1Fce0wIyk6jGHhO2QFQtr5Q
提取码:s2ss

1.拷贝webDemo,直接解压,改文件名springmvc03jsp,改pom.xml中的antifactid和name

在这里插入图片描述
在这里插入图片描述

2.然后在ecipse中导入import > maven >existing maven projects

在这里插入图片描述


3.在pom.xml添加jsp依赖

		<dependency>
            <groupId>org.apache.tomcat.embed</groupId>
            <artifactId>tomcat-embed-jasper</artifactId>
    </dependency>

    <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
    </dependency>

    <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>jstl</artifactId>
            <version>1.2</version>
     </dependency>

在这里插入图片描述


4.创建com.tedu.webDemo.controller包,然后创建Item

在这里插入图片描述
创建Item.java类

package com.tedu.webDemo.controller;
//商品
public class Item {
    
    
	//编号
	Integer id;
	//名称
	String name;
	
	//创建构造方法
	public Item(Integer id, String name) {
    
    
		super();
		this.id = id;
		this.name = name;
	}
	//创建get、set方法
	public Integer getId() {
    
    
		return id;
	}
	public void setId(Integer id) {
    
    
		this.id = id;
	}
	public String getName() {
    
    
		return name;
	}
	public void setName(String name) {
    
    
		this.name = name;
	}
}

5.创建WEB-INF文件夹,再创建jsp/Item.jsp

在这里插入图片描述
选中jsp文件夹 ctrl+N搜索jsp
在这里插入图片描述在这里插入图片描述

然后把以下内容复制粘贴进去

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
jsp
</body>
</html>

6.修改application.properties增加配置

设置jsp的前缀和后缀。强制把jsp放在/WEB-INF/jsp文件夹中。
设置后在controller通过文件名list就可以访问/WEB-INF/jsp/list.jsp。
在这里插入图片描述

spring.mvc.view.prefix=/WEB-INF/jsp/
spring.mvc.view.suffix=.jsp

7.创建controller

@RestController返回json :返回json(新项目基本上都是用这个)
@Controller :可以返回jsp


思路:

public ModelAndView list(){
    
     
在服务器端把数据放到jsp中,把html和数据一起返回给浏览器
    new ModelAndView("item.jsp") //展现jsp的
    modelAndView.addObject("itemList",list<item>) //model:展现数据,把数据展示在jsp上
}

创建一个ItemController 类

package com.tedu.webDemo.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.servlet.ModelAndView;

//@RestController 返回json 
@Controller  //返回jsp
public class ItemController {
    
    
	//把几个商品显示在浏览器上
	public ModelAndView list() {
    
    
		//创建modelAndView
		//显示WEB-INF/jsp/item.jsp
		//applicaiton.properties中已经配置WEB-INF/jsp
		//和.jsp了
		String viewName="item";
		ModelAndView modelAndView=new ModelAndView(viewName);
		return modelAndView;
	}
}

打开main类然后DeBUG AS执行

案例:使用jsp显示商品列表

浏览器调试窗口中查看返回为html
在这里插入图片描述

8.item.jsp

用到了jstl taglibrary,像Vue中的v-for
jstl提供一个类似v-for的foreach

package com.tedu.webDemo.controller;

import java.util.ArrayList;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;

//@RestController 返回json 
@Controller  //返回jsp
public class ItemController {
    
    
	//把几个商品显示在浏览器上
	@RequestMapping("/list")
	public ModelAndView list() {
    
    
		//创建modelAndView
		//显示WEB-INF/jsp/item.jsp
		//applicaiton.properties中已经配置WEB-INF/jsp
		//和.jsp了
		String viewName="item";
		ModelAndView modelAndView=new ModelAndView(viewName);
		
		//创建集合
		ArrayList<Item> itemList=new ArrayList<Item>();
		//创建两个商品
		Item item1=new Item(80, "魅族17");
		Item item2=new Item(90, "华为mate30");
		Item item3=new Item(90, "小米12pro");
		//把商品放入到集合中
		itemList.add(item1);
		itemList.add(item2);
		itemList.add(item3);
		modelAndView.addObject("list", itemList);
		return modelAndView;
	}
}

把下面这句话导入jsp中
JSTL(Java server pages standarded tag library,即JSP标准标签库),使用jstl可以很方便的在jsp中显示java数据,拷贝taglib标签。Jsp修改后要重启服务器,才生效

<!-- 相当于import -->
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>

然后对jsp进行创建,调用Vue

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<h1>jsp</h1>
<table border="2">
<!-- 调用Vue:
Vue用v-for显示集合
遍历list,取出来每个数据,每个数据叫item
 -->
<c:forEach items="${list}" var="item">
<tr>
   <td>${item.id}</td>
   <td>${item.name}</td>
<tr>

</c:forEach>
</table>
</body>
</html>

DeBUG AS运行:
http://localhost:8080/list
路径创建错了,报404
属性名写错会报500
在这里插入图片描述

jsp与vue区别

在这里插入图片描述

小结

使用vue,浏览器先请求html,网页加载完之后,再用axios发请求,得到json,用数据绑定把数据显示在网页上。
使用jsp,浏览器发一次请求,在服务器上生成html,浏览器得到的是html,直接显示在网页上。
Vue是前台web与后台数据分离。有助于专业化。后台程序员专门用java做后台开发,前台程序员用vue,js专门做前台。推荐用vue。
老项目用jsp。

猜你喜欢

转载自blog.csdn.net/QQ1043051018/article/details/112647642
今日推荐