码迷,mamicode.com
首页 > Web开发 > 详细

jsp-servlet篇(三)

时间:2019-02-07 23:41:32      阅读:243      评论:0      收藏:0      [点我收藏+]

标签:技术   标签库   动态   oca   理解   glib   简写   记录   一个   

1.JSP原理分析及语法

技术图片

查看 _jsp.java 源码路径: F:\apache-tomcat-9.0.14\work\Catalina\localhost\ROOT\org\apache\jsp

JSP语法

  1. 注释
    1. <!-- html注释-->    html注释,在网页源代码中可以看到
    2. <%-- jsp注释--%>   在网页源代码中看不到。
  2. 输出数据到页面     <%= hello %>

        3.JSP中的Java脚本片段

      2,3 方式都在_japService() 里面。

<%

    语句1;

    语句2;

%>

 

  4.定义类的成员 ,

<%!

    String str;

    void testMethod(){}

%>

 

JSP中写Java代码相当恶心 和 Servlet中写html代码有一拼。

 

 

2.Jsp的三大指令

1)include指令

作用: 在当前页面用于包含其他页面
语法: <%@include file=”common/header.jsp”%>
注意:
  1)原理是把被包含的页面(header.jsp)的内容翻译到包含页面(index.jsp)中,合并成翻译成一个java源文件,再编译运行,这种包含叫静态包含(源码包含)
  2)抽出去的jsp中只需要<%@page ... %>   和内容即可。

 

(2)page指令

作用: 告诉tomcat服务器如何翻译jsp文件
  语法: <%@ page
      language=”java”              该属性用于设置JSP页面使用的语言,目前只支持Java语言
      import=”java.util.*”           导包,多个包之间用逗号分割 。
      pageEncoding=”utf-8”     定义JSP页面的编码格式,可解决中文乱码问题 
      contentType=”text/html; charset=utf-8” 服务器发送浏览器的数据类型和内容编码
      errorPage=”error.jsp”     当前页面发生错误跳转到错误页面。
      isErrorPage=”false”       该属性可以将当前页面定义为错误页面来处理另一个页面转发而来的错误,即异常处理。设置为true以后可以使用exception对象.
      buffer=”8kb”                  用于设置out对象所使用的缓冲区大小,默认大小是8KB,单位只能是8的倍数。
      session=”true”               定义JSP页面是否使用session会话对象,其值是boolean类型,默认值为true. 
      isELIgnored=”false”      该属性用于定义些页面是否忽略EL表达式的使用
    %>

 


(3)taglib指令

作用:导入标签库
语法:<%@taglib uri=”tld文件的uri名称” prefix=”简写” %>

 

 

3.  jsp 7个动作指令


动作指令与编译指令不间,编译指令是通知 Servlet 引擎的处理消息,而动作指令只是运行时的脚本动作。编译指令在将JSP 编译成 Servlet 时起作用:处理指令通常可替换成 Java脚本,是 JSP脚本的标准化写法。

 JSP7 个 动作指令如下 :

jsp:forward: 执行页面转向,将请求的处理转发到下一个页面。
jsp:param: 用于传递参数,必须与其他支持参数曲标签一起使用。
jsp:include: 用于动态引入一个 JSP 页面。
jsp:p1ugin: 用于下载 JavaBean 或 Applet 到客户端执行。
jsp:useBean: 使用 JavaBean。
jsp:setProperty: 修改 JavaBean 实例的属性值。
jsp:getProperty: 获取 JavaBean 实例的属性值。

 

4. JSP九大内置对象(不需要创建就可以直接使用):

  1. out  :    等同于 response.getWriter(),用来向客户端(浏览器)发送文本信息,
  2. request:    就是指HttpServletRequest类的对象
  3. response:   就是指HttpServletResponse类的对象
  4. session:     是HttpSession类的对象,
  5. application:是ServletContext类的对象
  6. page:        指当前页面的对象,类似于"this"
  7. config:       ServletConfig类的对象
  8. exception:   只能在错误页面中使用该对象,即在page指令中设置了isErrorPage="true",才可用
  9. pageContent:页面的上下文对象,是一个域对象

 

5. 谈谈JavaBean

什么是javaBean?

1. 简单理解JavaBean遵循一定的规范JAVA语言写成的可重用组件().

       1):类必须使用public修饰.

       2):必须保证有公共无参数构造器.  (一般就是可以通过反射轻松的创建对象)

       3):包含了属性的操作(给属性赋值,获取属性值). 

      注意:javaBean的属性(字段+set/get方法)

2. 广义的JavaBean:

       1):复杂:GUI,比如Button,Panel,Window.

       2):简单:domain,dao,service组件,封装数据,操作数据库,逻辑运算等.

 

3. JavaBean中的成员:

       1):方法:Method

       2):事件:event

       3):属性:property

 

4. JavaBean的自省(内省)机制

自省和反射很相似。大家都是通过字节码来映射出自身的元素!

反射映射出整个类,属性自省就映射出属性的全部,就是名字,getter 和setter 方法。

public class TestJavaBean {
    @Test
    public void test1() throws Exception{
        //static BeanInfo getBeanInfo(Class<?> beanClass);  //获取指定字节码对象的javaBean信息对象
        BeanInfo info= Introspector.getBeanInfo(Student.class,Object.class);
      PropertyDescriptor[] propertys= info.getPropertyDescriptors();//获取所有属性的描述器
        for (PropertyDescriptor pd : propertys) {
            System.out.println(pd);//打印每一个属性描述器。
            System.out.println(pd.getName());//属性对象的名称
            System.out.println(pd.getPropertyType());//属性对象的类型
            System.out.println(pd.getReadMethod());//属性对象的读方法  getXxx()
            System.out.println(pd.getWriteMethod());//属性对象的写方法  setXxx()
            System.out.println("-----------------------");
        }
    }
}    

 

5. BeanUtils工具的使用

 

开发(框架),经常使用Apache commonBeanUtils工具来操作JavaBean.

需要的JAR包

commons‐beanutils‐1.9.3.jar // 工具核心包
?
commons‐logging‐1.2.jar // 日志记录包
?
commons‐collections‐3.2.2.jar // 增强的集合包

BeanUtils常用方法

1. public static void setProperty(Object bean, String name, Object value)
//参数一: 对象,  参数二:属性名, 参数三: 属性的值。
给指定对象bean的指定name属性赋值为指定值value。
//如果指定的属性不存在,则什么也不发生。
?
2.public static String getProperty(Object bean, String name)
获取指定对象bean指定name属性的值。
//如果指定的属性不存在,则会抛出异常。
注意:当属性的类型是数组类型时,获取到的值数组中的第一个值。
?
3.public static void copyProperties(Object dest, Object orig)    
将对象orig的属性值赋值给对象dest对象对应的属性
注意:只有属性名名相同且类型一致的才会赋值成功。
?
4. public static void populate(Object bean, Map<String, ? extends Object> properties)
将一个Map集合中的数据封装到指定对象bean中
注意:对象bean的属性名和Map集合中键要相同。

 

将一个Map集合的数据封装到一个JavaBean对象中

class User {
?
    private int id;
    private int age;
    private String name;
    private double sal;
。。。。。
。。。。。。。。。


将一个Map集合的数据封装到一个JavaBean对象中

//模拟的注册
public class BeanUtilsDemo {
    
    public static void main(String[] args) throws Exception {
        
        Scanner scanner = new Scanner(System.in);
        
        //创建Map集合
        Map<String,String> map = new HashMap<String, String>();
        
        System.out.println("请输入您的身份证:");
        String id = scanner.next();
        map.put("id", id);
        
        System.out.println("请输入您的姓名:");
        String name = scanner.next();
        map.put("name", name);
        
        System.out.println("请输入您的年龄:");
        String age = scanner.next();
        map.put("age", age);
        
        
        //给对象封装数据 , 数据全部都在Map中。
        User s = new User();
        
        //把map中的数据封装到对象上。
        BeanUtils.populate(s, map);
        
        System.out.println("用户信息是:"+ s);
    }
}

  

(★)将 获取注册页面中的数据封装成业务对象   

其他页面获取对象:User user = MyBeanUtils.getInstance().req2Obj(request, User.class); 

public class MyBeanUtils {
	private MyBeanUtils() {}
	private static MyBeanUtils instance = new MyBeanUtils();
	public static MyBeanUtils getInstance() {
		return instance;
	}
	
	//获取到注册页面中的数据封装成业务对象
	public <T>T req2Obj(HttpServletRequest request, Class<T> clazz ){
		Map<String, String[]> params = request.getParameterMap();
		T uT = null;
		try {
			uT = clazz.newInstance();
			BeanUtils.copyProperties(uT, params);
		} catch (Exception e) {
			e.printStackTrace();
		}
		return uT;
	}
}

  

 

jsp-servlet篇(三)

标签:技术   标签库   动态   oca   理解   glib   简写   记录   一个   

原文地址:https://www.cnblogs.com/gshao/p/10354292.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!