`

34、servlet--会话技术/购物车demo/y验证码

    博客分类:
  • mvc
 
阅读更多
会话Session and Cookie
1、session:用户打开一个网站,只要不关闭浏览器(服务器中间没重启),称这样的操作为一次会话。
2、Cookie :记录历史访问、保存用户名密码.可被多个浏览器共享,一个浏览器一般只允许存放300个Cookie,每个站点最多存放20个Cookie,每个Cookie的大小限制为4KB。
   cookie是以明文存放,安全性较低;

创建cookie
public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		//Cookie(java.lang.String name, java.lang.String value) 
		Cookie ck = new Cookie("cookie1", "name");
		ck.setMaxAge(600);//600s
		//发送个浏览器
		response.addCookie(ck);
	}


cookie是明文保存的;
读取cookie
Cookie[] ck = request.getCookies();
		for(int i =0;i<ck.length;i++)
		{
			if("cookie1".equals(ck[i].getName()))
			{
				System.out.println(ck[i].getValue());
			}
		}

页面取cookie:
value="<%=cookie1%>"
删除cookie:ck.setMaxAge(0);
设置为负数,在浏览器关闭时删除,相当于会话级别。

session的运用:购物车
第一次访问自动创建;cookie需要手动创建回送给浏览器一个http响应头,把sessionID带回给浏览器以cookie的方式,在会话结束或30分钟时清除
再次访问服务器时,web服务器内存接到request时读取到sessionID,就能在内存中查到该id的信息。
setAttribute(java.lang.String name, java.lang.Object value)
一个浏览器对应一个session对象,而cookie是可以是多个浏览器共存,cookie是对象数组
session是存在服务器的内存里的,不是存在浏览器中
注意游览器设置,单进程浏览器:无论打开多个浏览器都使用同一个session;一般来说是多进程浏览器,一个浏览器独享一个session
session的生命周期
默认是30分钟,在tomcat/web.xml中设置的
也可通过session.setMaxInac...(int) 设置
HttpSession session = request.getSession;
设置属性:
session.setAttribute("user",user);
获取属性
User u = session.getAttribute("user");
清除session的某个属性
session.removeAtrribute("user");

当用户成功登陆后,将用户信息存放在session内,不用每次都连接数据库验证,当内存肿么没有该用户信息时,要求登陆验证;


验证码:使用到java的绘图技术
image.jsp
	<%@ page contentType="image/jpeg" import="java.awt.*, 
	java.awt.image.*,java.util.*,javax.imageio.*" %> 
	<%! 
	Color getRandColor(int fc,int bc) 
	{ 
	Random random = new Random(); 
	if(fc>255) fc=255; 
	if(bc>255) bc=255; 
	int r=fc+random.nextInt(bc-fc); 
	int g=fc+random.nextInt(bc-fc); 
	int b=fc+random.nextInt(bc-fc); 
	return new Color(r,g,b); 
	} 
	%> 
	<% 
	//out.clear();//这句针对resin服务器,如果是tomacat可以不要这句 
	
	response.setHeader("Pragma","No-cache"); 
	response.setHeader("Cache-Control","no-cache"); 
	response.setDateHeader("Expires", 0); 
	//设置长高
	int width=60, height=20; 
	BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); 
	Graphics g = image.getGraphics(); 
	Random random = new Random(); 
	g.setColor(getRandColor(200,250)); 
	g.fillRect(0, 0, width, height); 
	g.setFont(new Font("Times New Roman",Font.PLAIN,18)); 
	g.setColor(getRandColor(160,200)); 
	for (int i=0;i<155;i++) 
	{ 
	int x = random.nextInt(width); 
	int y = random.nextInt(height); 
	int xl = random.nextInt(12); 
	int yl = random.nextInt(12); 
	g.drawLine(x,y,x+xl,y+yl); 
	} 
	String sRand=""; 
	//设置位数
	for (int i=0;i<4;i++){ 
	String rand=String.valueOf(random.nextInt(10)); 
	sRand+=rand; 
	g.setColor(new Color(20+random.nextInt(110),20+random.nextInt(110),20+random.nextInt(110))); 
	g.drawString(rand,13*i+6,16); 
	} 
	// 将认证码存入SESSION 
	session.setAttribute("rand",sRand); 
	g.dispose(); 
	ImageIO.write(image, "JPEG", response.getOutputStream()); 
	out.clear();
	out = pageContext.pushBody();
	%>	

login.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>
    <base href="<%=basePath%>">
    
    <title>login.jsp</title>
    <script language="javascript"> 
		function loadimage(){ 
		//加个随即数字是为了使每次访问image.jsp的地址不一样,这样浏览器不会取本地缓存的数据。
		document.getElementById("checkid").src = "<%=path%>/pages/image.jsp?"+Math.random(); 
		} 
</script>   
  </head>
  <body>
   <% String str = (String)request.getAttribute("info"); 
      if(null != str)
      response.getWriter().print(str);
   %>
     <form action="<%=path%>/servlet/LoginCk" method="post" style="margin-left: 40% ;margin-top: 8%" >
  用户id:<input type="text" name="id"><br>
  密        码:<input type="password" name="pwd"><br>
 验证码: <input type="text" name="checkid"><img border=0  id="checkid" src="<%=path%>/pages/image.jsp"/>
 <a href="javascript:loadimage();">看不清点我</font></a>
 <br> 
 <input type="submit">  <input type="reset"> 
  </form>
  </body>
</html>



禁用cookie和禁用session
1、浏览器设置禁用cookie(原session失效,将重新创建session,每次请求都要创建session)
2、实现禁用cookie后继续使用原session:url重写

c标签的遍历list/map
  
<%-- <c:forEach items="${books}" var="vo">
     ${vo}<br/>
  </c:forEach> --%>
 id----> 书   名---->购买数量<br/>
  <c:forEach  items="${books}" var="vo">
            ${vo.key}----> ${vo.value.name}---->${vo.value.num}<br/>
  </c:forEach>
  <br/>


public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
	     	String id = request.getParameter("id").trim();
		    String name = request.getParameter("name").trim();
		    HttpSession session = request.getSession();
		    HashMap<String, Book> hm = (HashMap<String, Book>)session.getAttribute("books");
		    if(null == hm)
		    {
		    	hm = new HashMap<String, Book>();
		    	Book b = new Book();
		    	b.setId(Integer.parseInt(id));
		    	b.setName(name);
		    	b.setNum(1);
		    	session.setAttribute("books", hm);
		    }else
		    {
		    	//已经购买,数量+1
		    	if(hm.containsKey(id))
		    	{
		    		Book b = hm.get(id);
		    		b.setNum(b.getNum()+1);
		    		hm.put(id, b);
		    	}
		    	//第一次购买
		    	else
		    	{
		    		Book b = new Book();
		    		b.setId(Integer.parseInt(id));
		    		b.setName(name);
		    		b.setNum(1);
		    		hm.put(id, b);
		    	}
		    }
			/*ArrayList list = (ArrayList)session.getAttribute("books");
			if(null == list)
			{
				list = new ArrayList();
			}
			list.add(book);*/
			session.setAttribute("books", hm);
			request.getRequestDispatcher("/pages/booklist.jsp").forward(request, response);
    		return;  
	}
  • 大小: 6.8 KB
  • 大小: 8.7 KB
分享到:
评论

相关推荐

    图片验证的SERVLET

    &lt;/init-param&gt;&lt;br/&gt; &lt;init-param&gt;&lt;br/&gt; &lt;param-name&gt;height&lt;/param-name&gt;&lt;br/&gt; &lt;param-value&gt;20&lt;/param-value&gt;&lt;br/&gt; &lt;/init-param&gt;&lt;br/&gt; &lt;/servlet&gt;&lt;br/&gt; &lt;br/&gt; &lt;servlet-mapping&gt;&lt;br/&gt; &lt;servlet-name&gt;checkimage&lt;/...

    ACCP 6.0 S2-5-使用JSP/Servlet/Ajax技术开发新闻发布系统 PPT课件

    ACCP 6.0 S2-5-使用JSP/Servlet/Ajax技术开发新闻发布系统 PPT课件

    一个在线报名系统

    &lt;servlet-class&gt;servlet.loginServlet&lt;/servlet-class&gt; &lt;/servlet&gt; &lt;servlet-mapping&gt; &lt;servlet-name&gt;loginServlet&lt;/servlet-name&gt; &lt;url-pattern&gt;/servlet/loginServlet&lt;/url-pattern&gt; &lt;/servlet-mapping&gt; ...

    Axsis and XFire Demo src code

    &lt;servlet-name&gt;AxisServlet&lt;/servlet-name&gt; &lt;servlet-class&gt; org.apache.axis.transport.http.AxisServlet &lt;/servlet-class&gt; &lt;/servlet&gt; &lt;servlet&gt; &lt;servlet-name&gt;AdminServlet&lt;/servlet-name&gt; ...

    jakarta.servlet-api-4.0.4-API文档-中文版.zip

    赠送jar包:jakarta.servlet-api-4.0.4.jar; 赠送原API文档:jakarta.servlet-api-4.0.4-javadoc.jar; 赠送源代码:jakarta.servlet-api-4.0.4-sources.jar; 赠送Maven依赖信息文件:jakarta.servlet-api-4.0.4....

    xfire的使用详解

    &lt;servlet-class&gt;org.codehaus.xfire.spring.XFireSpringServlet&lt;/servlet-class&gt; &lt;/servlet&gt; &lt;!-- 用来管理Webservice的Servlet --&gt; &lt;servlet-mapping&gt; &lt;servlet-name&gt;XFireServlet&lt;/servlet-name&gt; &lt;url-...

    javax.servlet-api-3.0.1.jar中文文档.zip

    javax.servlet-api-***.jar中文文档.zip,java,javax.servlet-api-***.jar,javax.servlet,javax.servlet-api,***,jar包,Maven,第三方jar包,组件,开源组件,第三方组件,Gradle,javax,servlet,api,中文API文档,手册,开发...

    jfreechart使用手册

    &lt;servlet-name&gt;DisplayChart&lt;/servlet-name&gt; &lt;servlet-class&gt;org.jfree.chart.servlet.DisplayChart&lt;/servlet-class&gt; &lt;/servlet&gt; &lt;servlet-mapping&gt; &lt;servlet-name&gt;DisplayChart&lt;/servlet-name&gt; &lt;url-pattern...

    简单spring MVC 配置

    &lt;servlet-class&gt;org.springframework.web.servlet.DispatcherServlet&lt;/servlet-class&gt; &lt;load-on-startup&gt;1&lt;/load-on-startup&gt; &lt;/servlet&gt; &lt;servlet-mapping&gt; &lt;servlet-name&gt;test&lt;/servlet-name&gt; &lt;url-pattern&gt;...

    javax.servlet-api-4.0.0-API文档-中文版.zip

    赠送jar包:javax.servlet-api-4.0.0.jar; 赠送原API文档:javax.servlet-api-4.0.0-javadoc.jar; 赠送源代码:javax.servlet-api-4.0.0-sources.jar; 赠送Maven依赖信息文件:javax.servlet-api-4.0.0.pom; ...

    java web 登录验证码生成类

    &lt;servlet-name&gt;CheckCodeImage&lt;/servlet-name&gt; &lt;servlet-class&gt;com.netshop.common.util.CheckCodeImage&lt;/servlet-class&gt; &lt;/servlet&gt; &lt;servlet-mapping&gt; &lt;servlet-name&gt;CheckCodeImage&lt;/servlet-name&gt; ...

    javax.servlet-api-4.0.1-API文档-中英对照版.zip

    赠送jar包:javax.servlet-api-4.0.1.jar; 赠送原API文档:javax.servlet-api-4.0.1-javadoc.jar; 赠送源代码:javax.servlet-api-4.0.1-sources.jar; 赠送Maven依赖信息文件:javax.servlet-api-4.0.1.pom; ...

    servlet-api-3.1-源代码.zip

    servlet源代码本来就是开放的,CSDN居然那么多人要...本资源是来自从Maven的servlet-api-3.1源代码,原地址还有servlet-api、servlet-api-doc,本资源仅仅下载了源代码的部分,需要的朋友可以去以下网址下载其它内容: ...

    FCK在线编辑器源码及部署项目引用示例

    &lt;servlet-name&gt;Connector&lt;/servlet-name&gt; &lt;servlet-class&gt; com.FCKeditor.connector.ConnectorServlet &lt;/servlet-class&gt; &lt;init-param&gt; &lt;param-name&gt;baseDir&lt;/param-name&gt; &lt;param-value&gt;/upload/&lt;/param-value...

    jsp版富文本编辑器fckeditor-java-2.5

    &lt;servlet-name&gt;Connector&lt;/servlet-name&gt; &lt;servlet-class&gt;net.fckeditor.connector.ConnectorServlet&lt;/servlet-class&gt; &lt;load-on-startup&gt;1&lt;/load-on-startup&gt; &lt;/servlet&gt; &lt;servlet-mapping&gt; &lt;servlet-name...

    jakarta.servlet-api-4.0.4-API文档-中英对照版.zip

    赠送jar包:jakarta.servlet-api-4.0.4.jar; 赠送原API文档:jakarta.servlet-api-4.0.4-javadoc.jar; 赠送源代码:jakarta.servlet-api-4.0.4-sources.jar; 赠送Maven依赖信息文件:jakarta.servlet-api-4.0.4....

    javax.servlet-api-3.1.0-sources.zip

    下地址https://repo1.maven.org/maven2/javax/servlet/javax.servlet-api/3.1.0/ 各个版本都有 javax.servlet-api-3.1.0-sources.jar

    spring mvc

    &lt;servlet-class&gt;org.springframework.web.servlet.DispatcherServlet&lt;/servlet-class&gt; &lt;load-on-startup&gt;1&lt;/load-on-startup&gt; &lt;/servlet&gt; &lt;servlet-mapping&gt; &lt;servlet-name&gt;account&lt;/servlet-name&gt; &lt;url-...

    jaxrs-api,javax.ws.rs.Path;

    &lt;servlet-class&gt;org.jboss.resteasy.plugins.server.servlet.HttpServlet30Dispatcher&lt;/servlet-class&gt; &lt;/servlet&gt; &lt;servlet-mapping&gt; &lt;servlet-name&gt;Resteasy&lt;/servlet-name&gt; &lt;url-pattern&gt;/app/service/*...

    sentinel-web-servlet-1.8.0-API文档-中英对照版.zip

    赠送jar包:sentinel-web-servlet-1.8.0.jar; 赠送原API文档:sentinel-web-servlet-1.8.0-javadoc.jar; 赠送源代码:sentinel-web-servlet-1.8.0-sources.jar; 赠送Maven依赖信息文件:sentinel-web-servlet-...

Global site tag (gtag.js) - Google Analytics