??xml version="1.0" encoding="utf-8" standalone="yes"?> <FRAMESET> <FRAME> Ʋ明白本?/span>HTMLd剖析】之标记分类Q请?/span> 【标C览】?/span> 谓框架便是网는面分成几个框H,同时取得多个 URL。只需?/span> <FRAMESET> <FRAME> 卛_Q面所有框架标记需要放在一个总v?/span> html 档,q个档案只记录了该框架如何分?/span> Q不会显CZQ何资料,所以不必放?/span> <BODY> 标记Q浏览这框架必须dq档?/span> 面不是其他框H的档案?/span><FRAMESET> 是用来划分框H,每一H框׃?/span> <FRAME> ?/span> 记所标示Q?/span><FRAME>必须?/span> <FRAMESET> 范围中用。如下例Q?/span> <frameset cols="50%,*"> <frame name="hello" src="up2u.html"> <frame name="hi" src="me2.html"> 此例?/span> <FRAMESET> 把画面分成左右两相等部分Q左便是昄 up2u.htmlQ右边则会显C?/span> me2.html q档案,<FRAME> 标记所标示的框H永q是按由上而下、由左至右的ơ序 <FRAME> 参数Q?/span> COLS="90,*" ROWS="120,*" frameborder="no" border="0" bordercolor="#008000" framespacing="5" NAME="top" frameborder=0 framespacing="6" bordercolor="#008000" scrolling="Auto" noresize marginhight=5 marginwidth=5 /** import java.io.IOException; import javax.servlet.Filter; /** @Override } @Override HttpSession session = req.getSession(); if (username == null) { } /* @Override /* }
二、配|Tomcat服务端口
打开Tomcat/conf目录下的server.xml。找到如下代码:
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
其中port="8080"是Tomcat默认的端口,?080修改成Q意的端口?br />
注:量不要使用1000以下的端口,避免与公用端口冲H?br />
三、进入控制台
打开Tomcat/conf目录下的tomcat-users.xml。修Ҏ如下代码Q?br />
<?xml version='1.0' encoding='utf-8'?>
<tomcat-users>
<role rolename="manager"/>
<user username="manager" password="manager" roles="manager"/>
</tomcat-users>
q样添加了一个用户名为:manager、密码ؓQmanager的控制台用户?br />
控制台的用户名和密码旉过Tomcat的JAAS控制?br />
然后Q重启TomcatQ在地址栏输?lt;http://localhost:8080/>
点击左上角的Tomcat ManagerQ如下图Q?br />
输入讄的用户名Qmanager、密码:managerQ如下图Q?br />
d后,控制CؓQ如下图Q?br />
q样可以方便地理自己开发的WEB目?br />
2..在tomcat根目录的conf\catalina\localhost(对于Tomcat6及其以上版本Q需要自己创建catalina和localhostq两个目?下增加wind.xml文g(该文件名Z更好的可L最好和下面的path="/xxx"的xxx相同)
3.该文件内?
------------------------------------------------
<Context path="/wind"
docBase="E:/StartPortableApps/jspTest"
debug="5"
reloadable="true"
crossContext="true">
<Resource name="jdbc/wind"
auth="Container"
type="javax.sql.DataSource"
maxActive="5"
maxIdle="2"
maxWait="10000"
username="root"
password="wind"
driverClassName="com.mysql.jdbc.Driver"
url="jdbc:mysql://localhost:3306/test"/>
</Context>
------------------------------------------------
说明Q?br />
path="虚拟路径" docBase="l对路径"?br />
其中name 指定数据源在容器中的JNDI名?br />
maxActive 指定数据源最大活动连接数?br />
maxIdle 指定数据池中最大空闲连接数?br />
maxWait 指定数据池中最大等待获取连接的客户端?br />
username 指定q接数据库的用户名?br />
password 指定q接数据库的密码?br />
driverClassName 指定q接数据库的驱动?br />
url 指定数据库服务的URL
问题Q?br />
*****Z么要不修改server.xml呢?*****
在Tomcat6的doc帮助文档中,官方是不提倡修改server.xml来添加虚拟目录的Q因Z改该文g可能引入额外的风险,例如DTomcatd崩溃。这样做q有一个好处是非常方便于项目的UL?br />
4.在上面的docBase路径(q里是E:/StartPortableApps/jspTest)下创建index.jsp来测试数据源
------------------------------------------------
<%@ page language="java" pageEncoding="GB2312"%>
<%@ page import="java.sql.Connection"%>
<%@ page import="java.sql.ResultSet"%>
<%@ page import="java.sql.Statement"%>
<%@ page import="javax.naming.Context"%>
<%@ page import="javax.naming.InitialContext"%>
<%@ page import="javax.sql.DataSource"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>index.jsp</title>
</head>
<body>
<h2>试数据?lt;/h2>
<%
Context ctx = new InitialContext();
// 通过JNDI查找数据源,该JNDI为java:comp/env/jdbc/windQ分Z部分Q?br />
// java:comp/env是Tomcat固定的,必需加的前缀Q?br />
// jdbc/wind是定义数据源时的数据源名Q?br />
DataSource ds = (DataSource)ctx.lookup("java:comp/env/jdbc/wind");
Connection conn = ds.getConnection();
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery("select * from echo_message");
while(rs.next()) {
%>
<%=rs.getString(2)%><br>
<%}
%>
</body>
</html>
------------------------------------------------
注意Q?br />
Tomcat数据源的配置分ؓ两种Q?br />
全局数据源:Ҏ有的web应用都可以访问。局部数据源Q只能在某个web应用下访问?br />
q里是用局部数据源。尽量不要用全局数据源,因ؓ使用全局数据源会破坏Tomcat原有的配|文?可能会破坏Tomcatpȝ?br />
4.启动TomcatQ地址栏输入http://localhost:8080/wind/index.jsp
<NOFRAMES>
<IFRAME>
也请先明白围堉|CI标记的分别Q请?/span> ?/span>HTML概念】?/span>
?框架概念 Q?/span>
</frameset>
用法Q 定义一个
开始/l束标识Q 必须Q非?/span>
属性: name="..."定义帧的名字
scr="..."定义在中显C的内容的来?/span>
frameborder="..."定义帧之间的边界(0?/span>1)
margwidth="..."讄帧的边界和其中内容之间的间距
margheight="..."讄帧的边界和其中内容之间的间距?/span>
noresize="..."使的尺怸能变
scrolling="..."讄滚动条的表示方式(auto, yes, no)
I: 不允?/span>
<FRAMESET>...</FRAMESET>
用法Q 定义在一个窗口中帧的布局
开始/l束标识Q 必须Q必?/span>
属性: rows="..."讑֮行的数目
cols="..."讑֮列的数目
onload="..."当蝲入文档时的内部事件触发器
onunload="..."当卸载文档时的内部事件触发器
I: 不允?/span>
注释Q FRAMESET可以嵌套
以上所q只是最单的框架讑֮Q若希望辑ֈ更合适的效果请加入或修改以下各参数?/span>
标记Q?/span><FRAMESET>
例子Q?/span><frameset rows="90,*" frameborder="0" border=0 framespacing="2" border="2" bordercolor="#008000"></frameset>
功用Q宣?/span>HTML文g为框架模式,q设定视H如何分剌Ӏ?/span>
垂直切割画面(如分左右两个画面)Q接受整数倹{百分数Q?/span> * 则代表占用剩余的I间。数值的个数代表分成的视H数目且以逗号分隔。例?/span> COLS="30,*,50%" 可以切成三个视窗Q第一个视H是 30 pixels 的宽度,Zl对分割Q第二个视窗是当分配完第一及第三个视窗后剩下的I间Q第三个视窗则占整个视窗画面?/span> 50% 宽度Z相对分割。你可自p整数字?/span>
q是横向切割Q将画面上下分开Q数D定同上?/span> COLS ?/span> ROWS 两参数尽量不要放在同一?/span> <FRAMESET> 标记中,?/span> Netacape 偶然不能昄q类型的框架Q尽量采用多重分Ԍ如以上各例?/span>
讑֮框架的边框,其值只?/span> no ?/span> yes Q?/span> no 表示不要ҎQ?/span> yes 表示要显C框?/span>
讑֮框架的边框厚度,?/span> pixels 为单位?/span>
讑֮框架的边框颜艌Ӏ颜色D参考【调色原理】?/span>
表示框架与框枉保留的空白的距离?/span>
标记Q?/span><FRAME>
例子Q?/span><frame name="top" src="a.html" marginwidth="5" marginheight="5" scrolling="Auto" frameborder="0" noresize framespacing="6" bordercolor="#0000FF">
功能Q设定每一个框H内的参数属性?/span>
参数Q?/span>
SRC="a.html"
讑֮此框H中要显C的|页档案名称Q每个框H一定要对应一个网|案?/span>
讑֮q个框窗的名Uͼq样才能指定框架来作链接Q必ML命名?/span>
讑֮框架的边框,其值只?/span> 0 ?/span> 1 Q?/span> 0 表示不要ҎQ?/span> 1 表示要边框?/span>
表示框架与框枉的保留的I白的距R?/span>
讑֮框架的边框颜艌Ӏ?/span>
讑֮是否要显C卷_YES 表示要显C卷_NO 表示无论如何都不要显C卷_AUTO 视情况而定?/span>
讑֮不让使用者可以改变这个框框的大小Q如没有讑֮此参敎ͼ使用者可随意地拉动框架改变其大小?/span>
表示框架高度部分边缘所保留的空间?/span>
表示框架宽度部分边缘所保留的空间?/span>
* loginFilter.java
*/
package myFilter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
* ?session 中的 username 内容是否为空QؓI则没有dQ{发到d面Q?如果不ؓI,则分发请求?br />
* @author wind
*
*/
public class loginFilter implements Filter {
private String onErrorUrl;
public void destroy() {
// TODO Auto-generated method stub
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
// TODO Auto-generated method stub
HttpServletRequest req = (HttpServletRequest) request;
HttpServletResponse res = (HttpServletResponse) response;
String username = (String) session.getAttribute("username");
boolean flag = true;
flag = false;
} else {
if (flag) {
* Causes the next filter in the chain to be invoked, or if the
* calling filter is the last filter in the chain, causes the
* resource at the end of the chain to be invoked.
*/
chain.doFilter(request, response);
} else {
/*
* Forwards a request from a servlet to JSP file on the server.
*/
req.getRequestDispatcher(onErrorUrl).forward(req, res);
}
}
public void init(FilterConfig filterConfig) throws ServletException {
* Returns a String containing the value of the named initialization
* parameter, or null if the parameter does not exist.
*/
onErrorUrl = filterConfig.getInitParameter("onError");
if (onErrorUrl == null || "".equals(onErrorUrl)) {
onErrorUrl = "/index.jsp";
}
}
web.xmld以下代码Q?br />
<filter>
<filter-name>loginFilter</filter-name>
<filter-class>myFilter.loginFilter</filter-class>
<init-param>
<param-name>onError</param-name>
<param-value>/index.jsp</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>loginFilter</filter-name>
<url-pattern>/havesession/*</url-pattern>
</filter-mapping>
特别注意Q?lt;url-pattern>/havesession/*</url-pattern>q里意思是qo/havasession/路径中的所有HTTPh?/p>
out.println("根目录所对应的绝对\?" + request.getRequestURI() + "<br/>");
String strPathFile = application.getRealPath(request.getRequestURI());
out.println("文g的绝对\?" + strPathFile + "<br/>");
String strDirPath = new File(application.getRealPath(request.getRequestURI())).getParent();
out.println("目录的绝对\?" + strDirPath + "<br/>");
%>
//Servlet?nbsp;
//JSP中的application对象是Servlet中的ServerContextQ所以在Servlet中是如此获得
System.out.println("根目录所对应的绝对\?" + request.getServletPath());
String strFullPath = request.getSession().getServletContext().getRealPath("");
System.out.println("目录的绝对\? + strFullPath);
String strContextPath = request.getContextPath();
System.out.println("获得Web目的上下文路径" + strContextPath);
System.out.println("获取讉K站点的相对\? + request.getRequestURI());
System.out.println("获取讉K站点的绝对\? + request.getRequestURL());