因为 最近比较忙,没时间发帖.
这是以前学J2EE整理的笔记,就把这个送给J2EE的新手吧!
写这个的主要目的是为了介绍STRUTS,不过这些基础知识一定要掌握的,而且我会先把SERVLET和MVC设计模式介绍完.再介绍STRUTS.(请大家关注天统社区:bbs.ttwv.com)(附件 是原始的笔记,大家也可以下载!)
请转帖的人,注明文章出处!谢谢!
本章目的:
本章稍微介绍了J2EE
的基础知识,重点介绍了web.xml
配置文件的运用。因为做WEB
应用的一定要搞清楚配置文件怎么控制程序,这个懂了对后面的学习将取到决定性的作用。当然在这里只要形成一个逻辑,不要求记忆。等后面实际用到了,再翻翻这里,这样学习效率才会高。
1.
JavaWeb应用基础
1.1.
JavaWeb简介
1.1.1.
JavaWeb应用程序组成
l
静态文档:HTML、图片、音频、视频等。
l
Applet:运行与客户端的小应用程序。
l
Servlet:运行于服务端的小程序。
l
JSP页面:当JSP页面第一次被浏览器调用时会被编译成一个Servlet文件,所以JSP本质是Servlet。
l
实用Java类:JavaBean和其他Java类,通常来实现业务逻辑。
l
web.xml:描述部署、配置信息。
l
其他资源文件:JavaScript、XML等。
1.1.2.
JavaWeb应用程序运行环境
l
安装Web服务器。
l
开发、编译Web应用程序,并按照Web服务器的规范组织文件。
l
将应用程序部署到服务器。
1.1.3.
Web服务器l
Borland Enterprise Server
l
Apache Tomcat
l
JavaServlet Web DevelopmentKit(JSWDK)
l
Allaire JRun
l
Java WebServer
l
Websphere
l
Weblogic
1.1.4.
JavaWeb应用程序的组织结构l
/WEB-INF
目录:web
部署目录,该目录专供Web
服务器使用。
l
web.xml
:部署描述文件,WEB-INF
下最重要的文件,描述部署信息、配置信息等。
l
/classes
:类文件存放处,如servlet
、javabean
等
l
/lib
:类库文件存放处。
l
/src
:源代码存放处。
1.1.5.
WAR文件
部署Web
应用程序时,可以把它压缩为一个WAR
文件,类似于JAR
文件。通过使用WAR
文件可以大大简化Web
应用程序的部署。WAR
文件可以通过压缩工具打开。
1.2.
Tomcat服务器1.2.1.
Tomcat优缺点l
优点:免费,使用简单。
l
缺点:不支持EJB
技术。
1.2.2.
Tomcat部分术语解释l
Catalina:一个Servlet容器,也就是Servlet的运行环境。
l
Jasper:Tomcat的JSP组建,一个可以解释和执行JSP页面请求的Servlet。
l
mod_webapp:可以把Tomcat连接到Apache Web服务器上的组件。
1.2.3.
Tomcat服务器的目录结构l
bin:存放启动和关闭tomcat脚本
l
common:存放tomcat所需的jar文件和java文件。
l
conf:包含各种不同的配置文件,其中最重要的是server.xml。
l
logs:存放Tomcat运行过程中产生的日志文件。
l
server:存放Web用于管理Tomcat的两个Web应用程序。
l
webapps:存放Web应用的地方。最简单的发布WEB方式就是将打包后WAR文件,直接拷贝到本目录下。
l
work:存放jsp编译后产生的servlet java源文件和类文件的地方。
1.2.4.
配置Tomcat服务器l
设置Java_Home
变量
我的电脑—
属性—
高级—
环境变量—
新建环境变量
变量名:Java_Hmoe
变量值:jdk
安装目录
l
指定服务器端口
TOMCAT
的默认端口是8080
如果后来装了ORACLE
那么8080
端口会被ORACLE
占用,那么这时就需要修改端口了
TOMCAT
安装目录下 conf—server.xml
ctrl+f
找到:
<!-- Define a non-SSL HTTP/1.1 Connector on port 8080 -->
<Connector port="8080" maxHttpHeaderSize="8192" maxThreads="150" minSpareThreads="25" maxSpareThreads="75"enableLookups="false" redirectPort="8443" acceptCount="100" c disableUploadTimeout="true" />
把port="8080"
改成你想要的端口。
l
设置Catalina_Home
我的电脑—
属性—
高级—
环境变量—
新建环境变量
变量名:Catalina_Home
变量值:tomcat
安装目录
1.3.
web.xml配置文件解释1.3.1.
一个简单的web.xml文件<?xml version="1.0" encoding="UTF-8"?>
<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">
<servlet>
<servlet-name>actionF</servlet-name>
<servlet-class>com.servlet.actionForm</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>actionF</servlet-name>
<url-pattern>/actionFirst</url-pattern>
</servlet-mapping>
</web-app>
部署描述符文件就像所有XML
文件一样,必须以一个XML
头开始。这个头声明可以使用的XML
版本并给出文件的字符编码。
所有部署描述符文件的顶层(根)元素为web-app
。请注意,XML
元素不像HTML
,他们是大小写敏感的。因此,web-App
和WEB-APP
都是不合法的,web-app
必须用小写。
1.3.2.
常用元素标记l
icon icon
元素指出IDE
和GUI
工具用来表示Web
应用的一个和两个图像文件的位置。
l
display-name display-name
元素提供GUI
工具可能会用来标记这个特定的Web
应用的一个名称。
l
description description
元素给出与此有关的说明性文本。
l
context-param context-param
元素声明应用范围内的初始化参数。
l
filter
过滤器元素将一个名字与一个实现javax.servlet.Filter
接口的类相关联。
l
filter-mapping
一旦命名了一个过滤器,就要利用filter-mapping
元素把它与一个或多个servlet
或JSP
页面相关联。
l
listener servlet API
的版本2.3
增加了对事件监听程序的支持,事件监听程序在建立、修改和删除会话或servlet
环境时得到通知。Listener
元素指出事件监听程序类。
l
servlet
在向servlet
或JSP
页面制定初始化参数或定制URL
时,必须首先命名servlet
或JSP
页面。Servlet
元素就是用来完成此项任务的。
l
servlet-mapping
服务器一般为servlet
提供一个缺省的URL
:http://host/webAppPrefix/servlet/ServletName
。但是,常常会更改这个URL
,以便servlet
可以访问初始化参数或更容易地处理相对URL
。在更改缺省URL
时,使用servlet-mapping
元素。
l
session -config
如果某个会话在一定时间内未被访问,服务器可以抛弃它以节省内存。可通过使用HttpSession
的 setMaxInactiveInterval
方法明确设置单个会话对象的超时值,或者可利用session-config
元素制定缺省超时值。
l
mime-mapping
如果Web
应用具有想到特殊的文件,希望能保证给他们分配特定的MIME
类型,则mime-mapping
元素提供这种保证。
l
welcom-file-list welcome-file-list
元素指示服务器在收到引用一个目录名而不是文件名的URL
时,使用哪个文件。
l
error-page error-page
元素使得在返回特定HTTP
状态代码时,或者特定类型的异常被抛出时,能够制定将要显示的页面。
l
taglib taglib
元素对标记库描述符文件(Tag Libraryu Descr
īptor file
)指定别名。此功能使你能够更改TLD
文件的位置,而不用编辑使用这些文件的JSP
页面。
l
resource-env-ref resource-env-ref
元素声明与资源相关的一个管理对象。
l
resource-ref resource-ref
元素声明一个资源工厂使用的外部资源。
l
security-constraint security-constraint
元素制定应该保护的URL
。它与login-config
元素联合使用
l
login-config
用login-config
元素来指定服务器应该怎样给试图访问受保护页面的用户授权。它与sercurity-constraint
元素联合使用。
l
security-role security-role
元素给出安全角色的一个列表,这些角色将出现在servlet
元素内的security-role-ref
元素的role-name
子元素中。分别地声明角色可使高级IDE
处理安全信息更为容易。
l
env-entry env-entry
元素声明Web
应用的环境项。
l
ejb-ref ejb-ref
元素声明一个EJB
的主目录的引用。
l
ejb-local-ref ejb-local-ref
元素声明一个EJB
的本地主目录的应用。
1.3.3.
分配名称和定制的URL在web.xml
中完成的一个最常见的任务是对servlet
或JSP
页面给出名称和定制的URL
。用servlet
元素分配名称,使用servlet-mapping
元素将定制的URL
与刚分配的名称相关联。
l
分配名称
为了提供初始化参数,对servlet
或JSP
页面定义一个定制URL
或分配一个安全角色,必须首先给servlet
或JSP
页面一个名称。可通过 servlet
元素分配一个名称。最常见的格式包括servlet-name
和servlet-class
子元素。
<servlet>
<servlet-name>actionF</servlet-name>
<servlet-class>com.servlet.actionForm</servlet-class>
</servlet>
上面例子给com.servlet.actionForm这个servlet
元素分配了一个名称:actionF
l
定制URL
大多数服务器具有一个缺省的serlvet URL
:
http: //localhost/webAppName/servlet/packageName.ServletName
。虽然在开发中使用这个URL
很方便,但是我们常常会希望另一个URL
用于部署。例如,可能会需要一个出现在Web
应用顶层的URL
(如,http: // localhost/webAppName /Anyname
),并且在此URL
中没有servlet
项。位于顶层的URL
简化了相对URL
的使用。此外,对许多开发人员来说,顶层URL
看上去比更长更麻烦的缺省URL
更简短。
事实上,有时需要使用定制的URL
。比如,你可能想关闭缺省URL
映射,以便更好地强制实施安全限制或防止用户意外地访问无初始化参数的servlet
。如果你禁止了缺省的URL
,那么你怎样访问servlet
呢?这时只有使用定制的URL
了。
<servlet-mapping>
<servlet-name>actionF</servlet-name>
<url-pattern>/actionFirst</url-pattern>
</servlet-mapping>
上面例子给actionF定制了一个URL。
1.3.4.
命名JSP页面命名JSP
页面的原因与命名servlet
的原因完全相同:即为了提供一个与定制设置(如,初始化参数和安全设置)一起使用的名称,并且,以便能更改激活 JSP
页面的URL
(比方说,以便多个URL
通过相同页面得以处理,或者从URL
中去掉.jsp
扩展名)。但是,在设置初始化参数时,应该注意,JSP
页面是利用jspInit
方法,而不是init
方法读取初始化参数的。
<servlet>
<servlet-name>PageName</servlet-name>
<jsp-file>/TestPage.jsp</jsp-file>
</servlet>
<servlet-mapping>
<servlet-name> PageName </servlet-name>
<url-pattern>/UrlTest2/*</url-pattern>
</servlet-mapping>
--------------------------------------------
程序清单5-3 TestPage.jsp
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
</HEAD>
<BODY BGCOLOR="#FDF5E6">
URI: <%= request.getRequestURI() %>
</BODY>
</HTML>
以上程序打印出用来激活它的URL的本地部分
可以用:
http://localhost:8080/webAppName/TestPage.jsp
http://localhost:8080/webAppName/UrlTest2
http://localhost:8080/webAppName/UrlTest2/ahsdjhsdjkhasdh
访问该页面。
1.3.5.
禁止激活器servlet对servlet
或JSP
页面建立定制URL
的一个原因是,这样做可以注册从 init
(servlet
)或jspInit
(JSP
页面)方法中读取得初始化参数。但是,初始化参数只在是利用定制URL
模式或注册名访问servlet
或JSP
页面时可以使用,用缺省URL
http: //localhost/webAppName/servlet/ServletName
访问时不能使用。因此,你可能会希望关闭缺省URL
,这样就不会有人意外地调用初始化servlet
了。这个过程有时称为禁止激活器servlet
。
<servlet>
<servlet-name>Sorry</servlet-name>
<servlet-class>com.servlet.SorryServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Sorry</servlet-name>
<url-pattern>/servlet/*</url-pattern>
</servlet-mapping>
程序清单SorryServlet.java
package com.servlet;
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public
class SorryServlet extends HttpServlet {
public
void doGet(HttpServletRequest request,HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html");
PrintWriter out = response.getWriter();
String title = "Invoker Servlet Disabled";
out.println(ServletUtilities.headWithTitle(title) +"<BODY>" +" " + title +
"对不起,您访问的页面出错!" +
"</BODY></HTML>");
}
public
void doPost(HttpServletRequest request,HttpServletResponse response)
throws ServletException, IOException {
doGet(request,response);
}
}
程序清单:ServletUtilities.java
package com.finaField;
public
class ServletUtilities
{
public
static
final String DOCTYPE ="<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 Transitional//EN\">;";
public
static String headWithTitle(String title)
{
return(DOCTYPE + "\n" + "<HTML>;\n"+"<HEAD>;<TITLE>;" + title + "</TITLE>;</HEAD>;\n");
}
}
当使用http://localhost:8080/webAppName/servlet/...时就会跳转到错误页面
只有http://localhost:8080/webAppName/anyName才能访问。anyName是指web.xml配置的URL.
1.3.6.
全局禁止激活器:TomcatTomcat 4
中用来关闭缺省URL
的方法与Tomcat 3
中所用的不相同。下面介绍这两种方法:
1
.禁止激活器: Tomcat 4
Tomcat 4
用与前面相同的方法关闭激活器servlet
,即利用web.xml
中的url-mapping
元素进行关闭。不同之处在于Tomcat
使用了放在 install_dir/conf
中的一个服务器专用的全局web.xml
文件,而前面使用的是存放在每个Web
应用的WEB-INF
目录中的标准 web.xml
文件。
因此,为了在Tomcat 4
中关闭激活器servlet
,只需在install_dir/conf/web.xml
中简单地注释出/servlet/* URL
映射项即可,如下所示:
<!--
<servlet-mapping>
<servlet-name>invoker</servlet-name>
<url-pattern>/servlet/*</url-pattern>
</servlet-mapping>
-->
再次提醒,应该注意这个项是位于存放在install_dir/conf
的Tomcat
专用的web.xml
文件中的,此文件不是存放在每个Web
应用的WEB-INF
目录中的标准web.xml
。
2
.禁止激活器:Tomcat3
在Apache Tomcat
的版本3
中,通过在install_dir/conf/server.xml
中注释出InvokerInterceptor
项全局禁止缺省 servlet URL
。例如,下面
是禁止使用缺省servlet URL
的server.xml
文件的一部分。
<!--
<RequsetInterceptor
className="org.apache.tomcat.request.InvokerInterceptor"
debug="0" prefix="/servlet/" />
-->
1.3.7.
初始化和预装载servlet与JSP页面l
利用init-param
元素向servlet
提供初始化参数,init-param
元素具有param-name
和param-value
子元素。
<servlet>
<servlet-name>InitTest</servlet-name>
<servlet-class>moreservlets.InitServlet</servlet-class>
<init-param>
<param-name>firstName</param-name>
<param-value>aying</param-value>
</init-param>
<init-param>
<param-name>emailAddress</param-name>
<param-value>aying996@163.com</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>InitTest</servlet-name>
<url-pattern>/Init</url-pattern>
</servlet-mapping>
本例定义了InitServlet的两个初始化参数,
以及访问的url
程序清单InitServlet.java
package moreservlets;
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class InitServlet extends HttpServlet {
private String firstName, emailAddress;
public void init()
{
ServletConfig config = getServletConfig();
firstName = config.getInitParameter("firstName");
emailAddress = config.getInitParameter("emailAddress");
}
public void doGet(HttpServletRequest request,HttpServletResponse response)
throws ServletException, IOException
{
response.setContentType("text/html");
PrintWriter out = response.getWriter();
String uri = request.getRequestURI();
out.println(ServletUtilities.headWithTitle("Init Servlet")+
"<BODY>\n" +" Init Parameters:\n"+
"First name: " + firstName + "\n" +" Email address: " + emailAddress + "\n"+
"</BODY></HTML>");
}
}
注:ServletUtilities.headWithTitle()
这个方法,请参考1.3.5
禁止激活器servlet
的程序清单
ServletUtilities.java。
l
分配JSP初始化参数
注意,这里有两个重点
1.
使用<jsp-file>而不是<servlet-class>
2.
JSP页使用jspInit而不是init
web.xml
<servlet>
<servlet-name>InitPage</servlet-name>
<jsp-file>/InitPage.jsp</jsp-file>
<init-param>
<param-name>firstName</param-name>
<param-value>aying</param-value>
</init-param>
<init-param>
<param-name>emailAddress</param-name>
<param-value>aying996@163.com</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name> InitPage</servlet-name>
<url-pattern>/InitPage</url-pattern>
</servlet-mapping>
InitPage.jsp
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD></HEAD>
<BODY BGCOLOR="#FDF5E6">
Init Parameters:
First name: <%= firstName %>
Email address: <%= emailAddress %>
</BODY>
</HTML>
<%!
private String firstName, emailAddress;
public
void jspInit()
{
ServletConfig config = getServletConfig();
firstName = config.getInitParameter("firstName");
emailAddress = config.getInitParameter("emailAddress");
}
%>
1.3.8.
提供应用范围内的初始化参数一般,对单个地servlet
或JSP
页面分配初始化参数。指定的servlet
或JSP
页面利用ServletConfig
的 getInitParameter
方法读取这些参数。但是,在某些情形下,希望提供可由任意servlet
或JSP
页面借助ServletContext
的getInitParameter
方法读取的系统范围内的初始化参数。
可利用context-param
元素声明这些系统范围内的初始化值。context-param
元素应该包含param-name
、param-value
以及可选的descr
īption
子元素,如下所示:
<context-param>
<param-name>aying</param-name>
<param-value>
dotnet_j2ee@163.com</param-value>
</context-param>
可回忆一下,为了保证可移植性,web.xml
内的元素必须以正确的次序声明。但这里应该注意,context-param
元素必须出现任意与文档有关的元素(icon
、display-name
或descr
īption
)之后及filter
、filter-mapping
、listener
或 servlet
元素之前。
web.xml
<context-param>
<param-name>ayingEmail</param-name>
<param-value>dotnet_j2ee@163.com</param-value>
</context-param>
Jsp
调用
getContentEmail:<%=getServletContext().getInitParameter("ayingEmail")%>
1.3.9.
在服务器启动时装载servlet假如servlet
或JSP
页面有一个要花很长时间执行的 init
(servlet
)或jspInit
(JSP
)方法。例如, init
或jspInit
方法从某个数据库的海量数据中查找数据。这种情况下,在第一个客户机请求时装载servlet
时将有较长时间的延迟。因此,可利用servlet
的load-on - startup
元素规定服务器在第一次启动时装载servlet
。
<servlet>
<servlet-name>Search</servlet-name>
<servlet-class>myPackage.SearchServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet>
<servlet-name>Results</servlet-name>
<servlet-class>/results/index.jsp</servlet-class>
<load-on-startup>2</load-on-startup>
</servlet>
以上例子将指示服务器首先装载和初始化SearchServlet
,然后装载和初始化由位于Web
应用的result
目录中的index.jsp
文件产生的 servlet
。