笔记--jsp

来源:互联网 发布:.net敏捷开发框架源码 编辑:程序博客网 时间:2024/05/21 17:21
/**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/180int 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){//遍历mapSet keySet= car.keySet();//遍历keySet,拿出商品名称for(String key:keySet){%>

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

<% }}else{%>

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

<% }%>
哈哈,可能是秋招给了我力量吧,每天看那么多视频,没怎么玩儿,都不觉得累。
加油,秋招,我一定可以的。
原创粉丝点击