0%

foreach一般用于遍历数组:

<?php
$a=array("1"=>"one","2"=>"two");
foreach ($a as $value)
{//只取值
    echo $value.'<br/>';
}
foreach ($a as $key=>$value)
{//取键与值
    echo $key."&nbsp;".$value.'<br/>';
}
?>

将dos命令用1左边的键包围,再echo,会返回执行命令的结果。

<?php
$a=`dir c:\\`;
//不是单引号,而是1左边的键
echo $a;
?>

+ 两数组元素合并 == 键值相同返回true ===键值相同且数据类型相同,顺序一致返回true != 键值不同返回true !==不具有相同键值,且顺序及数据类型不一致时返回true

===会判断两者数据类型是否相同,如:

<?php
$a="7";
$b=7;
var_dump($a==$b);//true
var_dump($a===$b);//false
?>

<?php
define("COLOR","RED",TRUE);
echo cOLOR;
?>

第三个参数可选,TRUE即忽略常量名大小写

<?php
function fun(){
    static $a=0;
    //定义静态变量,第二次执行不会再赋0值
    echo $a;
    $a=$a+1;
    
}
fun();
fun();
fun();
//运行函数
?>

结果应该是012

直接上代码了:

<?php
function fun(){
    Global  $a;
    //在函数内部用global关键字定义全局变量,不能同时赋值,global不区分大小写
    $a="abcd";
    
}
fun();
//运行函数
echo $a;
//函数外部读取全局变量
?>

jsp:setProperty和jsp:getProperty分别用于设置或读取JavaBean的属性,在Java中,设置或读取属性就是调用setter和getter方法。 写个JavaBean,User.java:

package pocketdigi;

public class User {
    private String userName;
    //定义变量
    public String getUserName() {
        return userName;
    }

    public void setUserName(String userName) {
        this.userName = userName;
    }
    //定义Getter和Setter方法,可以按alt+shift+s,再按r,快速生成
    
}

JSP中使用方法:

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<jsp:useBean id="user" class="pocketdigi.User"></jsp:useBean>
<html>
<head>
<title>My JSP '1.jsp' starting page</title>
</head>
    <body>
    <jsp:setProperty property="userName" name="user" value="张三"/>
    <!-- property填变量名就可以,不用填setter或getter方法名,因为变量一般是private,所以需要通过public的setter或getter方法名来判断变量名.上面一行相当于user.setUserName("张三"); -->
    <jsp:getProperty property="userName" name="user"/>
    <!-- 直接输出user的userName属性,相当于out.println(user.getUserName()); -->
    </body>
</html>

下面的例子是1.jsp包含index.jsp,并向index.jsp传递参数,index.jsp接收参数并显示. 1.jsp:

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>My JSP '1.jsp' starting page</title>
</head>

<body>
    <jsp:include page="index.jsp">
        <jsp:param value="我是中文" name="param" />
    </jsp:include>
</body>
</html>

index.jsp接收参数:

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
    String param=request.getParameter("param");
    out.println(param);
 %>

运行时发现,即使两个文件的Encoding都是UTF-8,中文还是显示乱码。解决方法:增加一个过滤器,把ServletRequest的编码转换成UTF-8. 新建一个类EncodeFilter,实现javax.servlet.Filter接口:

package pocketdigi;

import java.io.IOException;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;

public class EncodeFilter implements Filter {
    private FilterConfig filterConfig;
    private String encode;
    @Override
    public void destroy() {
        // TODO Auto-generated method stub
        filterConfig=null;
    }

    @Override
    public void doFilter(ServletRequest request, ServletResponse response,
            FilterChain filterChain) throws IOException, ServletException {
        // TODO Auto-generated method stub
        request.setCharacterEncoding(encode);
        //设置编码
        filterChain.doFilter(request, response);
        //调用FilterChain中的下一个过滤器,如果这是最后一个过滤器,调用请求的资源
        //过滤器是在传送参数之后,被接收到之前调用的
        
    }

    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        // TODO Auto-generated method stub
        this.filterConfig = filterConfig;
        encode=filterConfig.getInitParameter("Encode");
        //读取web.xml中配置的参数
    }

}

在web.xml中还需要配置过滤器:

  <filter>
      <filter-name>EncodeFilter</filter-name>
      <filter-class>pocketdigi.EncodeFilter</filter-class>
      <init-param>
          <param-name>Encode</param-name>
          <param-value>UTF-8</param-value>
          <!-- 设置参数,在过滤器中读取 -->
      </init-param>
  </filter>
  <filter-mapping>
          <filter-name>EncodeFilter</filter-name>
          <url-pattern>/*</url-pattern>
          <!-- /是相对该项目而言,并非站点根目录,这里过滤该对项目所有jsp和servlet请求 -->
  </filter-mapping>

编译指令include只能包含静态页面,而且是在编译过程前包含,如在a.jsp中include b.jsp,其实就是把b.jsp的源文件复制到a.jsp对应的位置,然后再编译生成一个Servlet,注意,这里只生成一个Servlet。 而jsp:include是在编译后,运行时包含,在上面的例子中,编译时会生成两个servlet,运行时,a.jsp生成的servlet再包含b.jsp生成的servlet,所以jsp:include可以包含动态页面,传递参数。 举个最简单的例子,a.jsp中包含b.jsp,在b.jsp中声明一个变量,如果是用编译指令include,在a.jsp中,include b.jsp代码后面,就可以直接引用这个变量,而如果用jsp:include,MyEclipse会直接报错,提示变量未声明。