Java-Web————day37 jst的jsp标准和标签库,MVC模式,javaBean,注解

jsp标准和标签库

jsp标准的标签库语言(第三方写好的)

  • 作用:代替jsp脚本
  • 使用:
    导入两个jar包 (jstl.jar和standard.jar)
    在页面上导入标签库

<%@taglib prefix="" uri=""%>

		例如:
			<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

jstl的分类

core:核心库
fmt:格式化|国际化
xml:过时了
sql:过时了
函数库:很少使用了

core掌握

if
forEach

c:if判断
<%--比较大小--%>
<c:if test="${3>4}">
    3大于4
</c:if>
<c:if test="${3<=4}">
    3不大于4
</c:if>
<%--判断是否登录成功--%>
<c:if test="${not empty name}">
    ${name}+欢迎来到主页
</c:if>
<c:if test="${empty name}">
您还没有进行登录,请先登录<a href="/login.jsp">登录</a>
</c:if>

c:forEach 循环

  • 格式:
    <c:forEach begin=“从哪里开始” end=“到哪里结束” stop=“步长” var=“给变量起名字” varStatus=“循环状态变量”>
    i − − {i }-- i{vs.count }–${vs.current }

    </c:forEach>
  • varStatus:用来记录循环的状态
    常用的属性:
    count:记录次数,从1开始
    current:当前遍历的内容
    index:索引从0开始
    例子:
<%--list 集合--%>
<%
    ArrayList<Student> list = new ArrayList<>();
    list.add(new Student("张三",1));
    list.add(new Student("李四",2));
    list.add(new Student("王五",3));
    list.add(new Student("赵六",4));
    request.setAttribute("list",list);

%>
<c:forEach items="${list}" var="ele" >
    ${ele.name}------${ele.age}
</c:forEach>
<%--map 集合--%>
<%
    HashMap<String, Student> map = new HashMap<>();
    map.put("一个歌手",new Student("邓紫棋",32));
    map.put("一个演员",new Student("赵丽颖",35));
    map.put("一个锦鲤",new Student("杨超越",25));
    request.setAttribute("map",map);
%>
<c:forEach items="${map}" var="ele">
    ${map.key}<br>
    ${map.value.name}----${map.value.age}<br>
</c:forEach>

c:url

  • 功能:
    自动补全项目路径
    自动url重写
  <a href="${pageContext.request.contextPath}/student.jsp">student.jsp</a>
    <<a href='<c:url value="/student.jsp">'>student.jsp</a>

多个标签

  1. set标签保存数据
 <a href='<c:url value="/student.jsp">'>student.jsp</a>
        <a:set var="name" value="rose" scope="request"></a:set>
        <%
        String msg=null;
        request.setAttribute("msg",msg);

        %>
        ${name}
        ${smg}
  1. get标签取出数据
    default:当value值为null的时候,使用默认值
    escapeXml: 是否对value值进行转义,false,不转义,true,转义(默认)
   <c:out value="${msg}" default="<h1>默认标题</h1>" escapeXml="true"></c:out>
  1. <%–choose标签+when标签+otherwirse标签: 多条件判断 --%>
<c:set var="score" value="69"></c:set>
        <c:choose>
            <c:when test="${score>=90 && score<=100}">优秀</c:when>
            <c:when test="${score>=80 && score<=90}">良好</c:when>
            <c:when test="${score>=70 && score<=80}">一般</c:when>
            <c:when test="${score>=60 && score<=70}">及格</c:when>
            <c:otherwise>
                不及格
            </c:otherwise>
        </c:choose>
  1. <%-- forToken标签: 循环特殊字符串 --%>
 <%
        String str="在一个页面之内";
        pageContext.setAttribute("str","str");
        %>
        <c:forTokens items="${str}" delims="-" var="s">
            ${s}
        </c:forTokens>
        <%--重定向--%>
        <c:redirect  url="https://www.baid.com">百度</c:redirect>

mvc

  • MVC模式 一种前辈们总结出来的开发模式
    M :Model 模
    封装数据,处理业务逻辑
    V : View 视图
    界面显示
    C :Controller 控制器
    调度
  • JavaWeb的三层架构
  • org.westos.web.servlet :web层
    • org.westos.service:service层
      *org.westos.dao:dao层
    • org.westos.domain : JavaBean
    • org.westos.util:工具包
      org.westos.test:测试包
  • 登陆注册案例

JavaBean

概念

符合特定规范的java类

特定规范

  1. 私有成变量
  2. 公共的get set 方法
  3. 必须有无参构造
  4. 实现序列化接口

javabean用来封装参数

  1. 分别获得各个表单项提交的参数
  2. 创建javabean
  3. 调用javabean的set方法

BeanUtils的组件

使用步骤

1.导包
2.使用
BeanUtils.populate(user,map);

注意

1.自定义日期的转换格式
DateConverter dc = new DateConverter();
2.设值日期的字符串格式
dc.setPattern(“yyyy-MM-dd”);
3.注册日期的转换器
ConvertUtils.register(dc, Date.class);
BeanUtils.populate(user, map);

注解(元数据)

概念:

  • 注释:给人看的
  • 注解也叫元数据,一种代码说明,给代码看的
  • djk1.5之后提供的,它和类,枚举接口在用一个层次
  • 它可以声明类, 成员变量,方法,局部变量,方法参数的前面,用来对这些元素进行解释说明,注释

本质

本质就是接口,接口可以定义抽象方法
接口的抽象方法=注解的属性

格式

@interface 注解名{}

作用

替代配置文件
对数据进行限定

java中常见的三个注解

@Override:加在方法上,该方法是否重写父类的
@FunctionalInterface检查一个接口是不是函数式接口
函数式接口:此接口中只有一个抽象方法
@SupperessWarnings:抑制警告,之需要一个all就可以抑制所有的警告
@Deprecated:标注一个类或者方式过期

赋值
  • 方式
    属性名=属性值
    @MyAnnotation(value=“zhangsan”)
  • 如果注解的属性名只有value的时候,value可以省略
    @MyAnnotation(“zhangsan”)
  • 可以给属性设置默认值
    public @interface MyAnnotation {
    int num() default 100;
    String name() default “zhangsan”;
    }
    @MyAnnotation()//因为它有默认值,所以我们可以不用赋值
    public class Test {
    }
元注解

是java给我们提供的注解,它的作用就是来限定我们的自定义注解应该加在哪个位置,哪个阶段

  • 规定注解应该保留到哪个位置
    @Target
    值为ElementType的枚举值
    TYPE:作用在类 接口 等上面
    METHOD:作用方法上面 @Target(ElementType.METHOD)
    FIELD:作用字段上面

  • 规定注解应该保留到哪个阶段
    @Retention
    值为RetentionPolicy的三个枚举值
    SOURCE:只在代码中保留,在字节码文件中就删除了
    CLASS:在代码和字节码文件中保留
    RUNTIME:所有阶段都保留@Retention(RetentionPolicy.RUNTIME)

  • 例子

自定义注解

注解的属性:

  • 注解的本质就是一个接口可以用javap反编译一下注解的字节码文件,例如:javap myan.class
  • 接口中可以有常量和抽象方法,该抽象方法称之为注解的属性
  • 例如
    public @interface MyAnnotation{

}

注解的属性类型都支持那些类型

基本类型:四类八种,byte short int long char booolean float double
字符串类型:String
枚举类型
注释类型
字节码class类型型
数组类型

  • 在注释中右哟个特殊的属性类型叫value()
  • 如果单独使用value的属性的时候,value可以省略不写
  • 如果注解的属性是个数组类型,那么给注解的属性赋值的时候要用{}括起来
例子
//定义数据库所需要的四参数
@Targent(ElementType.METHOD)//加在方法上
@Retention(RetentionPolicy.RUNTIME)//保留在运行阶段
public @interface JDBCAnnotation {
   		 String driverClass() default "com.mysql.jdbc.Driver";
    		String url() default "jdbc:mysql://localhost:3306/hbm";
    		String user() default "root";
    		String password() default "123456";
	}
@JDBCAnnotation(password = "123456")

	public static Connection getConnection() throws NoSuchMethodException, ClassNotFoundException, SQLException {
//获取该类的字节码文件对象
 Class clazz= JDBCUtils.class;
 //获取方法的对象
 Method m = clazz.getMethod("getConnection");
 //判断该方法上是否有注解有的话就进行判断
   boolean b = m.isAnnotationPresent(JDBCAnnotation.class)
if(b){//如果方法上面有注解就获取注解而且拿到注解的属性值
 JDBCAnnotation annotation = m.getAnnotation(JDBCAnnotation.class);
 //获取注解属性的值
String driverClass = annotation.driverClass();
            			String url = annotation.url();
           			 String user = annotation.user();
           			 String password = annotation.password();
           			 Class.forName(driverClass);
          	 return DriverManager.getConnection(url,user,password);
 }
        return null;
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值