JavaWeb
来源:互联网 发布:越南人 知乎 编辑:程序博客网 时间:2024/06/05 07:23
第一部分:jsp
1、jsp的简介
1.1 sun公司用于动态网站的开发技术,servlet jsp1.2 jsp:java server pages,运行在服务器端的页面,jsp就是servlet,最终jsp会被编译成servlet1.3 jsp在访问时候编译成servlet,会编译到tomcat的work目录里面1.4 jsp组成:html+java代码+jsp自身的一些东西1.5 jsp嵌入java代码有三种方式(1)<%! %>:定义的变量是成员变量(2)<%= %>:向页面输出内容,代码生成到servlet里面service方法里面(3)<% %>:写java代码,代码生成到servlet里面service方法里面
2、jsp的注释
2.1 html的注释(1)写法 <!-- -->2.2 java的注释(1)有三种注释(2)单行注释 // 多行注释 /* *. 文档注释 /** */(3)把java注释写到java代码2.3 jsp自身的注释(1)<%-- --%>2.4 代码 <!-- html的注释 --> <!-- java的注释 --> <% // 单行注释 /* 多行注释 */ /** 文档注释 */ %> <!-- jsp自身的注释 --> <%-- jsp自身的注释 --%>2.5 jsp里面三种注释的作用范围(1)jsp自身的注释存在jsp源代码阶段(2)jsp编译成servlet之后,html的注释和java的注释存在(3)通过浏览器看到的内容,只有html的注释
3、jsp的指令
3.1 有三个指令 (1)写法: <%@ 指令名称 属性="属性值"%>3.2 page指令(1)设置jsp页面的一些信息(2)写法: <%@ page 属性="属性值"%>(3)属性= language:jsp支持语言类型,目前支持是java语言= extends:jsp会编译成servlet,继承的类,默认继承的是HttpJspBase= session:在jsp中是否可以直接使用session对象,默认值true== 代码 <!-- session属性:在jsp中是否可以直接使用session对象 --> <% //向session域设置值 //request.getSession().setAttribute("msg", "sessionValue"); session.setAttribute("msg", "sessiontest"); %> ${msg }= import:在jsp中导入包== 可以分开写,也可以写在一起 <%@ page import="java.util.List,java.util.ArrayList"%>= buffer:设置jsp对客户端输出的缓冲区的大小 8kb= autoFlush:如果内容超出缓冲区是否会正确输出 默认值是true= errorPage:如果jsp页面出现异常,设置跳转到错误页面= isErrorPage:在错误页面中是否显示错误信息 java.lang.Throwable exception = org.apache.jasper.runtime.JspRuntimeLibrary.getThrowable(request); if (exception != null) { response.setStatus(javax.servlet.http.HttpServletResponse.SC_INTERNAL_SERVER_ERROR); }== 使用exception对象 <%=exception.getMessage() %>= contentType:设置打开的浏览器的编码= pageEncoding:jsp编译成servlet,使用编码方式的设置,优先权大于contentType= isELIgnored:是否忽略el表达式,默认不忽略false;如果设置成true之后,把el表达式作为普通文本重点掌握的属性:session、import、errorPage、contentType、pageEncoding3.3 include指令 (1)在一个页面中包含其他页面内容 (2)写法: <%@ include 属性="属性值"%> (3)规范: 第一:在被包含的页面中,直接写内容 第二:被包含的页面不能使用变量传递 第三:包含的页面路径后面不能加参数 (4)include包含也称为静态包含 多个jsp页面,最终会编译成几个servlet? 多个jsp页面,最终编译成一个servlet3.4 taglib指令 (1)经常和jstl标签库一起使用,替代页面中的<%%> (2)写法:<%@ taglib uri="jstl标签库的路径" prefix="jstl标签库的别名"%>jsp中有几个指令?三个指令分别是什么?三个指令分别可以做什么?
4、jsp的内置对象
4.1 在jsp中有9个内置对象,在jsp不需要创建,可以使用的对象request:相当于servlet里面的HttpServletRequest,获取请求的信息,是一个域对象可以存值和取值response:相当于servlet里面HttpServletResponse,向页面输出内容,把cookie回写到浏览器session:相当于servlet里面HttpSession,是一个域对象存值和取值config:相当于servlet里面ServletConfig,获取servlet名称,获取初始化参数application:相当于servlet里面ServletContext,是一个域对象存值和取值,获取web项目中文件exception:page指令属性isErrorPage,把这个属性值设置成true之后,才可以使用这个对象 java.lang.Throwable exception = org.apache.jasper.runtime.JspRuntimeLibrary.getThrowable(request); if (exception != null) { response.setStatus(javax.servlet.http.HttpServletResponse.SC_INTERNAL_SERVER_ERROR); }page:当前对象out:输出的对象out和response.getWriter()使用的是不是一个对象= out使用的是JspWriter= response.getWriter()使用的是PrintWriter= 现在分别使用out输出和response.getWriter()输出= out的输出机制:== 会产生两个缓冲区,out缓冲区和response缓冲区== out输出会把内容放到out缓冲区,response输出会把内容放到response缓冲区== out缓冲区不能直接向页面输出,把内容先放到response缓冲区里面,通过response缓冲区才能向页面输出pageContext:(1)是一个域对象= pageContext范围是当前页面,不能在servlet里面,只能使用在jsp中= 向pageContext域里面设置值:setAttribute(java.lang.String name, java.lang.Object value)= 从pageContext域里面获取值:getAttribute(java.lang.String name) = 代码 <% //设置值 pageContext.setAttribute("page", "pageValue"); %> <!-- 从pageContext域里面获取值 --> <%=pageContext.getAttribute("page") %>= application、session、request、pageContext(2)向其他的域对象里面设置值= 使用传统方式向四个域对象设置值 <!-- 使用传统方式向四个域对象里面设置值 --> <% //向application里面设置值(servletContext) application.setAttribute("app", "appvalue"); //向session里面设置值 session.setAttribute("session", "sessionvalue"); //向request里面设置值 request.setAttribute("request", "requestvalue"); //向pageContext里面设置值 pageContext.setAttribute("page", "pagevalue"); %> <%=application.getAttribute("app") %> <%=session.getAttribute("session") %> <%=request.getAttribute("request") %> <%=pageContext.getAttribute("page") %>= 使用pageContext内置对象向application、session、request域里面设置== 使用setAttribute(java.lang.String name, java.lang.Object value, int scope) == 有三个参数:第一个参数是名称;第二个参数设置的值;第三个参数哪个域(PageContext里面的常量表示不同的域)== 代码 <!-- 使用pageContext内置对象向四个域对象里面设置值 --> <% //向application pageContext.setAttribute("app100", "app100value", PageContext.APPLICATION_SCOPE); //向session pageContext.setAttribute("session100", "session100value", PageContext.SESSION_SCOPE); //向request pageContext.setAttribute("request100", "request100value", PageContext.REQUEST_SCOPE); //向pageContext pageContext.setAttribute("page100", "page100value", PageContext.PAGE_SCOPE); %>(3)从其他的域对象里面获取值= 获取四个域对象里面的值:getAttribute(java.lang.String name, int scope) == 两个参数:第一个参数域名称;第二个参数是哪个域(PageContext里面的常量表示不同的域)= 代码 <!-- 使用pageContext内置对象获取四个域对象里面的值 --> <!-- 获取application里面的值 --> <%=pageContext.getAttribute("app", PageContext.APPLICATION_SCOPE) %> <!-- 获取session里面的值 --> <%=pageContext.getAttribute("session", PageContext.SESSION_SCOPE) %> <!-- 获取request里面的值 --> <%=pageContext.getAttribute("request", PageContext.REQUEST_SCOPE) %> <!-- 获取pageContext域里面的值 --> <%=pageContext.getAttribute("page",PageContext.PAGE_SCOPE) %>(4)获取到其他的八个内置对象= 代码 <!-- 使用pageContext内置对象获取其他八个内置对象 --> <% //获取request内置对象 pageContext.getRequest(); //获取response内置对象 pageContext.getResponse(); //获取session内置对象 pageContext.getSession(); ....... %>(5)findAttribute(java.lang.String name)方法的使用= 分别向四个域对象里面设置值,名称相同= 获取到域范围最小的里面的值== <%=pageContext.findAttribute("test") %>4.2 四个域对象servletContext(application):范围是整个web项目session:范围是一次会话request:范围是一次请求pageContext:范围是当前页面4.3 在jsp中有几个内置对象? jsp中九个内置对象分别是什么? jsp中九个内置对象分别做什么? out内置对象的输出机制? pageContext内置对象的四个用途?
5、jsp的动作标签
5.1 什么是动作标签,在jsp使用动作标签可以完成功能5.2 写法: 在jsp中使用 <jsp:动作标签名称 属性="属性值"></jsp:动作标签名称>5.3 常用的动作标签(1)<jsp:forward> :转发= <jsp:forward page="/forward/hello.jsp"></jsp:forward>(2)<jsp:include> :页面包含(动态包含)= <jsp:include page="head.jsp"></jsp:include>= 有多个jsp文件,最终会编译成几个servlet?== 多个jsp文件会编译成多个servlet(3)<jsp:param> :传递参数= 在带路径的动作标签里面使用= 代码 <jsp:forward page="/forward/hello.jsp"> <jsp:param value="aaa100" name="id11"></jsp:param> </jsp:forward>5.4 下面的三个动作标签用于操作javabean(4)<jsp:useBean>(5)<jsp:setProperty>(6)<jsp:getProperty>
第二部分:javabean
1、什么是javabean
1.1 javabean就是一个java类,遵循一定书写规范第一个规范:在javabean里面有一个公开的没有参数的构造方法第二个规范:在javabean里面属性是私有的第三个规范:在javabean里面私有的属性通过公开的方法暴露出来(1)代码 //私有的属性 private String id; private String username; private String password; //公开方法暴露私有的属性 public String getId() { return id; } ......1.2 javabean主要的用途是 封装数据(1)使用set方法设置值(2)使用get方法获取值
2、封装数据到javabean
2.0 创建jsp页面,在页面中写表单,提交到servlet中,在servlet进行数据封装到javabean的操作2.1 使用传统方式进行封装(1)实现的步骤 * 1、得到表单提交的数据 * 2、创建User的对象 * 3、使用user里面的set方法进行封装(2)代码 //获取表单提交的数据 //处理中文乱码问题 request.setCharacterEncoding("utf-8"); String id = request.getParameter("id"); String username = request.getParameter("username"); String password = request.getParameter("password"); //创建user对象 User user = new User(); //使用user里面的set方法进行封装 user.setId(id); user.setUsername(username); user.setPassword(password); System.out.println(user.getId()+" :: "+user.getUsername()+" :: "+user.getPassword());2.2 使用jsp的动作标签进行封装(0)表单输入项里面的 name属性值 和 javabean里面的属性值一样(1)使用到jsp中三个动作标签第一个:<jsp:useBean> :设置要封装数据到的是哪一个javabean第二个:<jsp:setProperty>:向哪个属性里面设置值第三个:<jsp:getProperty>:从哪个属性里面或者值(2)代码 <!-- 使用动作标签封装数据到javabean --> <!-- 创建封装的javabean的对象 --> <jsp:useBean id="user" class="com.mythmayor.bean.User"></jsp:useBean> <!-- 设置值到javabean里面 --> <%-- <jsp:setProperty property="id" name="user"></jsp:setProperty> <jsp:setProperty property="username" name="user"></jsp:setProperty> <jsp:setProperty property="password" name="user"></jsp:setProperty> --%> <!-- 设置值到javabean的简写的方式 --> <!-- 表单输入项里面的 name属性值 和 javabean里面的属性值一样 --> <jsp:setProperty property="*" name="user"></jsp:setProperty> <!-- 获取javabean里面值,显示到页面上 --> <jsp:getProperty property="id" name="user"></jsp:getProperty> <jsp:getProperty property="username" name="user"></jsp:getProperty> <jsp:getProperty property="password" name="user"></jsp:getProperty>2.3 使用beanutils框架进行封装(1)beanutils框架是apache组织开发的,用于封装数据到javabean的操作(2)如果要想使用beanutils框架,首先导入jar包(3)使用框架里面 BeanUtils类里面方法 populate(Object bean, Map properties) = 要求:表单输入项的name的属性值,必须和javabean里面的属性值一样= populate(Object bean, Map properties) 方法里面有两个参数== 第一个参数是封装的javabean对象;== 第二个参数是要封装数据的map集合(map结构是key-value,key是属性的名称,value是值)=== 在request里面方法getParameterMap(),返回map集合,key是表单输入项name属性的值,value是输入值(4)代码 //创建user对象 User user = new User(); //进行封装数据到javabean try { BeanUtils.populate(user, request.getParameterMap()); } catch (Exception e) { e.printStackTrace(); } System.out.println(user.getId()+" :: "+user.getUsername()+" :: "+user.getPassword());
第三部分:el表达式
1、使用el表达式获取域对象里面的值
(1)el表达式使用在jsp页面中,不能在html中使用(2)写法: ${域对象名称}(3)使用el表达式获取四个域对象里面的值= 代码 <!-- 向四个域对象里面设置值 --> <% //向application里面设置 application.setAttribute("test", "appvalue"); //向session域里面设置值 session.setAttribute("test", "sessionvalue"); //向request域里面设置值 request.setAttribute("test", "requestvalue"); //向pageContext域里面设置值 pageContext.setAttribute("test", "pagevalue"); %> <!-- 使用el表达式获取四个域对象里面的值 --> <!-- 获取application里面的值 --> ${applicationScope.test } <!-- 获取session里面的值 --> ${sessionScope.test } <!-- 获取request里面的值 --> ${requestScope.test } <!-- 获取pageContext里面的值 --> ${pageScope.test }(4)如果使用el表达式获取的名称不存在,返回空字符串 "",不会出现空指针异常 如果使用传统方式getAttribute获取名称不存在,返回null,容易出现空指针异常(5)使用el表达式获取域对象名称相同的,获取的是域范围最小的里面的值
2、使用el表达式获取域对象里面数组、集合(list、map)、对象属性的值
(1)使用el表达式获取域对象里面的数组的值= 使用数组的下标得到里面的值,数组下标从0开始= ${域对象名称[数组的下标] }= 代码 <!-- 使用el表达式获取域对象里面的数组的值 --> <% //创建数组 String[] arr = {"lucy","mary","jack"}; //把数组放到域对象里面 request.setAttribute("arr100", arr); %> <!-- el表达式获取值 --> <!-- 使用传统方式:遍历数组,根据数组的下标得到数组里面的值,数组下标从0开始 --> ${arr100[2] }= 如果获取的数组的下标不存在,返回是空字符串 ""(2)使用el表达式获取域对象里面list集合的值= 使用list集合的下标获取里面的值,list下标从0开始的= ${域对象名称[list集合的下标]}= 代码 <!-- 使用el表达式获取域对象里面的list集合的值 --> <% //创建list集合 List<String> list = new ArrayList<String>(); //向list集合里面放数据 list.add("AAAA"); list.add("BBBB"); list.add("CCCC"); //把list集合放到域对象里面 request.setAttribute("list100", list); %> <!-- el表达式获取值 --> <!-- 使用传统方式遍历list,有四种方式 普通for:根据下标得到,下标从0开始 迭代器 增强for list迭代器 --> ${list100[2] }= 如果获取list集合的下标不存在,返回是空字符串 ""= 向域对象里面放set集合,使用el表达式不可以获取域对象里面set集合的值== list和set的区别:list是有序的,set是无序的(3)使用el表达式获取域对象里面map集合的值= 根据map的key名称得到对应的value值= 写法:${域名称.key名称}= 另外写法:${域名称["key名称"]}= 代码 <!-- 使用el表达式获取域对象里面map集合的值 --> <% //创建map集合 Map<String,String> map = new HashMap<String,String>(); map.put("aa", "AA"); map.put("bb", "BB"); map.put("cc", "CC"); //把map集合放到域对象里面 request.setAttribute("map100", map); %> <!-- el表达式获取值 --> <!-- 使用传统方式遍历map,有两种方式 第一种:得到所有的key,根据key得到value 第二种:得到key-value关系 --> ${map100.aa }= 如果key的名称不存在,返回是空字符串 ""= 如果map集合的key的类型是int类型,使用el表达式不能获取里面的值,报错(4)使用el表达式获取域对象里面的对象的属性值= 使用名称.对象里面的属性的名称得到值= ${域对象名称.属性的名称}= 代码 <!-- 使用el表达式获取域对象里面对象的属性的值 --> <% //创建对象 User user = new User(); user.setUsername("东方不败"); user.setPassword("999"); //把user对象放到域对象里面 request.setAttribute("user100", user); %> <!-- el表达式获取值 --> ${user100.username } <br/> ${user100.password }= 如果获取的域对象里面的对象的属性名称不存在,报错
3、el表达式的其他操作
3.1 运算的操作(1)算术的运算 + - ......(2)关系的运算 < > <= >=.....(3)逻辑的运算 && ||....3.2 empty运算符(1)判断对象是否为空= ${user == null}= ${empty user}= ${user != null}= ${not empty user}3.3 三元表达式(1)${user != null ? user.name : ""}= 如果user对象不为空,获取user的name值,否则返回空字符串= ${ not empty user ? user.name : ""}3.4 在el表达式中有11个隐含对象(1)pageContext隐含对象:对应于jsp中pageContext内置对象,获取其他的八个内置对象
阅读全文
0 0
- javaweb
- JavaWeb
- JavaWeb
- javaweb
- javaWeb
- JAVAweb
- 【JavaWeb】
- javaweb
- javaweb
- javaweb
- javaweb
- javaWeb
- javaweb
- javaweb
- JavaWEB
- JavaWeb
- javaweb
- JavaWeb
- Fragment异常:android.view.InflateException: Binary XML file line #35: Error inflating class fragment
- Android服务器——TomCat服务器的搭建
- Android 本地存储
- 2017年第0届浙江工业大学之江学院程序设计竞赛决赛—C
- android自定义的抽屉
- JavaWeb
- RabbitMQ 官方NET教程(五)【Topic】
- XML文档解析---SAX和StAX解析技术
- 修改 React-Native Android App 包名
- Android – Drawing multiline text on canvas If you always wanted to know how to draw multiline text
- java后台如何将rgb与16进制颜色进行转换
- Invalid bean definition with name 'dataSource' defined in class
- JAVA的23种设计模式---门面模式
- Android项目架构--知识体系简单梳理(一)