2007年4月2日
第一步,在作为服务器的微机上安装两块网卡,联接到ISP的网卡取名"外网卡",联接到局域网的网卡取名"内网卡";
第二步,在"外网卡"上配置IP地址和子网掩码(由ISP提供),如IP是10.32.101.11,子网掩码是255.255.255.0(表示局域网规模小于256台);其它都按ISP的要求设置。注意:下面的操作是关键:
1、在Windows 2000操作系统中,双击"外网卡"连接属性,选"共享"标签,选中"启用此连接的Internet连接共享"项。
2、在Windows 98操作系统中,点设置,控制面板,双击Internet选项,点"连接"标签,单击"局域网设置"下的"共享"选项,选中"启用此连接的Internet连接共享"项。
第三步,"内网卡"IP地址设为:192.168.0.1。
第四步,局域网中其它客户机网卡静态设置为192.168.0.2到192.168.0.253之间的任何IP地址,网关、DNS均设为192.168.0.1(即服务器"内网卡"的IP地址),照此设置,即可共享一条线路连上Internet,很简单吧。
1):http://blog.csdn.net/jrq/archive/2007/03/17/1531812.aspx
1.使用Servlet2.4/jsp2.0
1. 确定Web Container支持Serverlet2.4, 复制支持jstl 1.1版本的jstl.jar,standard.jar(可查阅meta-inf)到web-inf/lib。
2. 在Web.xml,Root节点改为
<web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd ">
3.在jsp中,对core,ftm taglib的引入改为
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"% >
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"% >
2.直接在html里面使用EL,而不是<c:out value="">
充分使用JSP2.0的EL,直接在html中写${book} 而不是<c:out value="${book}">将获得简洁无比,可比美velocity,freemarker的界面。
3.新增的Function标签
Function标签里最有用的一项是取得List,Map的size了。另外有一些StringUtils和Collection的函数。
JSTL里面不给调用对象除getXXX()外的任何方法真是件很让让人郁闷的事情!!
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%>
${fn:length(myList)}
4.其他的EL知识点
4.1 EL的运算符
除了最基本的算术运算符,逻辑运算符,比较运算符外,还有一个empty运算符,用来判断变量是否为null 或list, map的size 是否为零。
<c:if test="${not empty myList}">
EL的运算符都有文字和符号两种版本,如|| 和 or, >= 和 ge,适用于不能使用文字或符号的时候。
4.2 []与. 两种访问属性或元素的方式
${book.name}与${book["name"]}等价。
${book["name"]}主要用于"name"串为变量,或者字符串中含有"."字符的情况
如 ${myMap[order.status]} 是访问Map元素的一种很重要的方式。
4.3 list与map
orderList[0] 返回第一个元素
用key和value遍历map
<c:forEach var="entry" items="${myMap}">
<option value="${entry.key}">${entry.value}</option>
</c:forEach>
4.4.访问静态变量
EL本身不支持静态变量访问,变通的方法是写一个tag,将某个类的静态变量反射到一个map中, 如http://www.javaranch.com/journal/200601/Journal200601.jsp#a3
不过使用Map将失去静态变量编译期安全的意义,因此还是建议在这种情况下,使用普通JSP,见showOrder.jsp
chapter2:
package com.apress.prospring.ch2;
import java.io.FileInputStream;
import java.util.Properties;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.beans.factory.support.DefaultListableBeanFactory;
import org.springframework.beans.factory.support.PropertiesBeanDefinitionReader;
public class HelloWorldWithDI {
public static void main(String[] args) throws Exception {
//get BeanFactory
BeanFactory factory=getBeanFactory();
MessageRenderer mr=(MessageRenderer)factory.getBean("renderer");
mr.render();
}
private static BeanFactory getBeanFactory() throws Exception {
// get the bean factory
DefaultListableBeanFactory factory = new DefaultListableBeanFactory();
// create a definition reader
PropertiesBeanDefinitionReader rdr = new PropertiesBeanDefinitionReader(
factory);
// load the configuration options
Properties props = new Properties();
props.load(new FileInputStream("./ch2/src/conf/beans.properties"));
rdr.registerBeanDefinitions(props);
return factory;
}
}
beans.properties:
renderer.class=com.apress.prospring.ch2.StandardOutMessageRenderer
renderer.messageProvider(ref)=provider
provider.class=com.apress.prospring.ch2.HelloWorldMessageProvider
DefaultListableBeanFactory负责从properties文件读取BeanFactory的配置信息,然后返回已配置的实例。
这个配置文件已经定义了DI关系,所以在main方法中无需设置MessageRenderer 和MessageProvider的依赖关系。
1:http://tiwen.javaeye.com/blog/66624
2:http://www.blogjava.net/czcode/archive/2006/12/18/88448.html
3:http://hbcui1984.javaeye.com/blog/post/230199