笔记--jsp

/*
*jsp
	*servlet/jsp是两种动态的web资源技术
	*使用servlet可以生产一个前端页面,但是,非常麻烦,而且页面的调试和维护会非常麻烦
		*response.getWriter().write(...);
	*简介:java server pages  java服务器端页面们,是在服务器端执行的。
		*jsp可以写HTML+java+jsp自己的代码
		*运行原理:jsp -- 翻译成servlet -- 编译 -- 访问
	*jsp脚本元素(jsp页面可以编写java代码)
		*<%! %>:定义类,变量,方法  成员变量
		*<%= %>:输出语句(直接可以输出到页面)
		*<% %> :定义变量,语句(循环,判断语句)  局部变量
	*jsp页面注释  
		*HTML:
   
   
			*一直存在
		*java:大家都懂
			*jsp文件的阶段存在,翻译成java文件之后也存在
		*jsp注释:<%-- --%>
			*只会存在于jsp文件的阶段,即翻译成java文件之后就不存在了
	*jsp指令元素
		*用于指示jsp执行某些步骤
		 用于指示jsp表现特定行为
		*语法:<%@ 指令元素 属性名=属性值 %>
		*page       设置jsp属性	
			*属性:可以单独使用或多个同时使用
			       用来定义jsp文件的全局属性
				*language:jsp文件允许嵌入的语言,暂时只支持java
				*extends:jsp翻译成servlet文件,servlet继承的类。
				**session:默认为true,表示session可以直接使用
				          false,必须先获取再使用(一般不需要改变这个)
				**import:引入java的jar包
				*buffer:设置缓存区大小,默认8kb
				*autoFlush:如果buffer溢出,true,自动刷新
				                            false,发生异常
							(一般不要修改)
				*errorPage:指定错误页面
				*isErrorPage:设置值(true|false)之后可以去使用exception对象,然后可以去获取异常信息
				**contentType:设置浏览器打开文件时采用的编码方式
				**pageEncoding:jsp翻译成servlet文件时采用的编码
				**isELIgnored:是否忽略EL表达式(false,不能忽略,EL表达式很重要)
				
			*import属性可以出现多次,其他属性只能出现一次
		*include    包含页面(页面布局)
			*语法:<%@ include file="要包含的文件的地址(静态包含)" %>
			*静态包含的原理:
				*在翻译之前.jsvs文件之前,会把全部的内容都复制在一起
				 一起翻译,一起编译,一起执行
		*taglib     引入标签库
			*语法:<%@ taglib uri="" prefix="" %>
			*属性
				*uri:引入标签库文件的名称
				*prefix:标签库的前缀名
	*jsp内置对象
		内置对象              真实对象              方法
		*request:           HttpServletRequest     setAttribute,getAttribute
		*response:          HttpServletResponse    addCookie,getWriter
		*session:            HttpSession            setAttribute,getAttribute
		*application:       ServletContext         setAttribute,getAttribute
		*out:               JspWriter              write,print
			*eg:<%= "HELLO" %>
				 <% out.print("AAAA"); %>
				 <% response.getWriter().print("BBBB"); %>
				 <% out.print("CCCC"); %>
			* 输出结果:BBBB  HELLO AAAA CCCC 
			*HELLO AAAA CCCC都是由out对象输出的,BBBB是用printWriter对象输出的
			 而printWriter是由response对象提供的
			 out对象缓存区中的东西也是需要先输出到response对象缓存区的
			 所以直接存在于resource缓冲区中的BBBB最先输出
			 HELLO AAAA CCCC以及头部的HTML信息,都是后输出的。
			 只是关于HTML头部的那些信息我们不可见,只见到了HELLO AAAA CCCC
			 所以输出结果如上
			
		*pageContext:       PageContext            setAttribute,getAttribute
			*域对象
				*自己存取值
				*向其他域存取值
					*setAttribute(name,value,scope)
					*getAttribute(name)
					*findAttribute(name)
			*可以获取其他8个对象
			*应用:编写框架或者其他通用性较高的代码
			
		*page:              Object                 一般不使用这个对象
			*一般代表当前页面对象
			
		*config:            ServletConfig          getInitParameter, getInitParameterNames
		*exception:         Throwable              getMessage
			*和异常信息相关
			*使用前提:把isErrorPage=true
	*在jsp的时候
		*application   整个web应用
		*session       一次会话
		*request       一次请求
		*pageContext   当前页面
	*jsp标签(jsp动作)
		*用于在jsp页面上提供业务逻辑功能,避免在jsp页面中直接编写java代码,造成jsp页面难以维护
		*把数据封装到javabean中
			*
   
   
    
    
				*javabean和内省
				*javabean:遵循特定写法的java类,一个无参构造方法,私有化属性,对外提供getter和setter
						   用于封装数据
						   它的属性可以是任意类型的。属性可以只有getter或只有setter
			*
    
    
     
     
			*
     
     
      
      
				*
      
      
				//为javabean里面的属性赋值
				
      
      
				
      
      
								||
				
      
      
				//取出javabean里面的值
				
      
      
				
      
      
		*转发
			*
      
      
       
       
				*page:要转发的页面
		*页面的包含(动态)
			*
       
       
         *动态包含时间较长,因为没一个文件都会翻译成自己的.java文件,再编译成.class文件 然后再把结果复制到一起,对外显示。 *参数的传递 * 
        
          *name:属性名 value:属性值 *内省:Introspector,基于反射 *beanutils: **成员变量:在类中的方法外,存在于堆内存中,随着对象的创建而存在,随着对象的消失而消失,有默认初始化值 局部变量:在方法中或方法声明上,存在于栈内存,随着方法的调用而存在,随着方法调用完毕而消失,没有默认初始化值,必须定义,赋值,然后使用 *EL表达式 eg:获取域对象中的内容 request。setAttribute("xx","yy"); *写法:$(xx); *执行运算 *获取域对象中的值 *获取web开发中的对象 *pageScope *requestScope *sessionScope *applicationScope *param 获取请求的参数 getParameter() *paramValues 获取请求的参数 getParameterValues() *header 获取请求头的信息 *headerValues 获取请求头的信息 *initParam 获取全局的初始化参数 *cookie 获取cookie *pageContext对象 *会话技术 *会话:从打开一个浏览器,打开网页,浏览信息,期间可以多次浏览网页,点击多个超链接,再关闭浏览器的过程 *要解决的问题 *每个用户与服务器交互的过程中,格子会有一些数据,程序要想办法保存每个用户的额数据 *cookie:客户端技术 *程序把每个用户的数据以cookie的形式写到用户各自的浏览器 当用户使用浏览器再去访问服务器中的web资源时,就会带着各自的数据去 *显示上次的访问时间 *如果是第一次访问,输出欢迎 如果不是第一次,就输出上次的访问时间 *判断是否是第一次访问: *通过制定名称来查找,如果没找到,就是第一次访问 *回写到浏览器 *addCookie(Cookie cookie):Cookie(name,value) *获取cookie内容 *Cookie[] getCookies() *cookie的常用API: *构造方法:Cookie(name,value) *String getName() 获取cookie名称 *String getValue() 获取cookie值 *void setMaxAge(int expiry) 设置有效时间 *失效cookie:setMaxAge(0): 前提:设置有效路径,必须和之前设置过的相同 *void setPath(String uri) 设置有效域名 *void setDomain() 设置有效路径 *会话级别的cookie:默认将cookie保存到浏览器的内存中 *持久的cookie:将cookie保存到哦磁盘上,通过setMaxAge设置 *浏览器一般只允许存放300个,每个站点最多20个,每个cookie大小限制为4kb *session:服务端技术 *服务器在运行时可以为每一个用户浏览器创建一个独享的session对象 由于session为用户浏览器独享,所以用户在访问服务器的web资源时,可以把各自的数据放在各自的session中 当用户去访问服务器中的其他数据时,其他web资源再从用户格子的session中取出数据为用户服务 *cookie是基于客户端,不安全,并且有大小和个数的限制 *于cookie的区别:cookie把用户的数据写给用户的浏览器 session是把用户的数据写到用户独占的session中 *session是域对象,返回是一次会话的范围,存放于每个用户自己相关的数据 *setAttribute() 获取session中存放的数据 *getAttribute() 存放数据 *getId() 获取session唯一的id *invalidate() 销毁session */ 
         
       
      
      
     
     
    
    
   
   
商品页
<%@ page language="java" contentType="text/html; charset=utf-8"%>



Insert title here


	

手电筒加入购物车

冰箱加入购物车

电视加入购物车

洗衣机加入购物车

电脑加入购物车

/* * 逻辑处理页 */ package cn.itcast.khl.testcode; import java.awt.Color; import java.awt.Font; import java.awt.Graphics2D; import java.awt.image.BufferedImage; import java.io.IOException; import java.util.Random; import javax.imageio.ImageIO; 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("/CheckCode") public class CheckCode extends HttpServlet { private static final long serialVersionUID = 1L; protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { /* * 在内存中生产图片,但是没有设置背景颜色的方法,即填充的矩形,并且和纸的大小相同,然后给矩形设置颜色 * 获取笔的对象(设置颜色,字体,画字符串,画矩形) * 先准备好数据,英文字母大小写和数字的结合,把字符串画到画布上 * 画干扰线 * 把内存中的图片输出到客户端 */ final int width=120; final int height=30; //在内存中生产图片,默认黑色 BufferedImage image=new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); //先获取画笔对象 Graphics2D graphics=(Graphics2D) image.getGraphics(); //设置灰色 graphics.setColor(Color.GRAY); //画一个可以填充画布的矩形 graphics.fillRect(0, 0, width, height); //设置颜色 graphics.setColor(Color.BLUE); //画边框 graphics.drawRect(0, 0, width-1, height-1); //准备数据,随机获取四个字符 String words="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890"; //设置字体颜色 graphics.setColor(Color.RED); //设置字体 graphics.setFont(new Font("隶书", Font.BOLD, 20)); //随机获取下标 Random random=new Random(); int x=20; int y=20; for(int i=0;i<4;i++) { //void rotate(double theta,double x,double y) //theta:弧度=角度*Math.PI/180 int degree=random.nextInt(60)-30; double hudu=degree*Math.PI/180; graphics.rotate(hudu,x,y); int index=random.nextInt(words.length()); //返回指定下标位置的字符 char ch=words.charAt(index); graphics.drawString(""+ch , x , y); graphics.rotate(-hudu,x,y); x+=20; } //画干扰线 int x1,x2,y1,y2; for(int i=0;i<4;i++) { x1=random.nextInt(width); y1=random.nextInt(height); x2=random.nextInt(width); y2=random.nextInt(height); graphics.drawLine(x1, y1, x2, y2); graphics.setColor(Color.GREEN); } //输出到客户端 ImageIO.write(image, "jpg", response.getOutputStream()); } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } } <%@page import="java.util.Set"%> <%@page import="java.util.Map"%> <%@ page language="java" contentType="text/html; charset=utf-8"%>

结算页面

<% //获取购物车,把购物车中的商品信息和数量显示到页面上 Map car=(Map )request.getSession().getAttribute("car"); //如果购物车不为空,循环遍历 if(car!=null) { //遍历map Set keySet= car.keySet(); //遍历keySet,拿出商品名称 for(String key:keySet) { %>

亲,您购买的商品是:<%=key %>,数量是:<%=car.get(key) %>

<% } } else { %>

亲,您还没有购买任何商品,请您继续败家吧!

<% } %>
哈哈,可能是秋招给了我力量吧,每天看那么多视频,没怎么玩儿,都不觉得累。
加油,秋招,我一定可以的。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值