存档

‘jsp servlet及ajax学习’ 分类的存档

获取路径的几个方法

2008年12月24日

获取路径有诸多方法,但是每一种方法获得的结果是不同的,下面列举几种常用的获取方法及得到的结果,为简单起见,以一个例子为说明。

假设现在输入的是http://localhost:8080/ofon/user/Login.do

  1. request.getRequestURI():/ofon/user/Login.do

    获取相对路径

  2. request.getRequestURL():http://localhost:8080/ofon/user/Login.do

    获取绝对路径

  3. request.getContextPath():/ofon

    获取web应用根名称

  4. request.getServletPath():/user/Login.do

    获取相对于根路径的路径名称

jsp servlet及ajax学习

web.xml配置文件总结

2008年11月20日

每一个规范的web应用在WEB-INF目录下都应该有一个web.xml配置文件,用来对web应用的属性进行配置。web.xml配置文件包含的内容很多,但是基本的配置应该包括如下几部分:

  • 环境参数初始化
  • Servlet配置
  • 过滤器配置
  • 监听器配置
  • JNDI配置
  • Session配置
  • JSP网页相关配置
  • MIME
    TYPE配置
  • welcome文件清单
  • 错误处理

根元素和头

因为该配置文件是一个xml文档,因此必须遵循xml的书写规范,例如大小写敏感,需要声明版本号和字符编码等,一个没有任何配置的原始的xml文件为:



<?xml
version=”1.0″ encoding=”ISO-8859-1″?>
<web-app 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

version=”2.4″>

</web-app>



环境参数初始化

根元素:<init-param>

子元素:<param-name>和<param-value>,分别对应参数的名称和参数取值,其中全局参数的设置必须在与文档有关的元素之后,而必须在filter、listener及servlet等元素之前;Servlet的初始参数在<servlet-class>之后;jsp中初始参数在<jsp-file>之后;filter初始参数在<filter-class>之后。应用范围内的初始化参数可以通过ServletContext的getInitParameter()方法获得。


<!–全局范围内环境参数初始化–>

<context-param>

<param-name>username</param-name>

<param-value>Lily</param-value>

</context-param>

Servlet配置

该配置在Servlet简介一文中有相关介绍,在这儿就省略了,要增加的一点说明就是如果一个Servlet有多个映射,则需要写多个<servlet-mapping>模块,而不能在一个<servlet-mapping>中写多个<url-pattern>。


<servlet>

<description>add
affice</description>

<display-name>Affice_add</display-name>

<servlet-name>Affice_add</servlet-name>

<servlet-class>servlets.Affice_add</servlet-class>

<init-param>

<param-name>…</param-name>

<param-value>…</param-value>

</init-param>

</servlet>

<!–servlet映射名称及映射路径–>

<servlet-mapping>

<servlet-name>Affice_add</servlet-name>

<url-pattern>/affice/affice_add</url-pattern>

</servlet-mapping>

过滤器配置

过滤器可以截取和修改一个Servlet或JSP页面的请求或从一个Servlet或JSP页面发出的响应,用<filter>元素和<filter-mapping>元素完成设置,具体配置见本空间《Servlet过滤器配置》一文。

<!–过滤器定义–>

<filter>

<filter-name>EncodingFilter</filter-name>

<filter-class>filter.EncodingFilter</filter-class>

<init-param>

<param-name>Encoding</param-name>

<param-value>GB2312</param-value>

</init-param>

</filter>

<!–过滤器映射路径,可以与一个或多个Servlet或jsp页面相关联–>

<filter-mapping>

<filter-name>EncodingFilter</filter-name>

<url-pattern>/*</url-pattern>

</filter-mapping>


监听器配置

注册一个监听程序用<listener>元素,在listener元素中,只有一个<listener-class>子元素,指明监听器对应的类。

<!–监听器配置–>

<listener>

<listener-class>listener.OnlineListener</listener-class>

</listener>

数据库连接池配置

(可参考《tomcat数据库连接池配置》一文)

<!–数据库连接池配置–>

<resource-ref>

<description>DataSource</description><!–描述–>

<res-ref-name>jdbc/mysql/bookstore</res-ref-name><!–资源名称–>

<res-type>javax.sql.DataSource</res-type><!–资源类型–>

<res-auth>Container</res-auth><!–指出由Application或Container提供–>

</resource-ref>



Session配置

如果某个会话在一定时间未被访问,则服务器可以扔掉以节约内存,该功能的实现可借助web.xml文件来实现,使用<session-config>及其子元素<session-timeout>,其中过期时间以分钟为单位

<!–设置会话过期时间–>

<session-config>

<session-timeout>180</session-timeout>

</session-config>



JSP网页相关配置

<jsp-config>元素主要用来设置JSP的相关配置,该元素包括<taglib>和<jsp-property-group>两个子元素,分别完成标签库和JSP相关属性的设置。


<jsp-config>

<!–自定义标签配置–>

<taglib>

<taglib-uri>/formtag</taglib-uri>
<!-与tld中的uri一致–>

<taglib-location>/WEB-INF/tlds/FormTag.tld</taglib-location><!-tld文件路径–>

</taglib>

<!–设置jsp-property-group–>

<jsp-property-group>

<display-name>bookstore4</display-name>

<url-pattern>*.jsp</url-pattern>
<!-设定影响范围–>

<el-ignored>false</el-ignored>
<!-是否支持EL语法–>

<scripting-invalid>false</scripting-invalid>

<!-是否支持脚本–>

<page-encoding>gb2312</pageencoding>
<!-设置编码–>

<include-prelude>head.jspf</include-prelude>
<!–设置jsp网页的抬头–>

<include-coda>end.jspf</include-coda>

<!–设置jsp网页的结尾–>

</jsp-property-group>

</jsp-config>

Welcome文件清单

指出默认的欢迎界面,按照顺序依次查找,直到找到对应的页面为止。

<!–welcome欢迎清单–>

<welcome-file-list>

<welcome-file>index.html</welcome-file>

<welcome-file>index.htm</welcome-file>

<welcome-file>index.jsp</welcome-file>

</welcome-file-list>

错误处理

主要是当JSP页面或Servlet出现错误或者抛出异常时,显示指定的页面。

根元素:<error-page>

子元素:<error-code>设置HTTP错误代码;<exception-type>设置java异常类型,<error-location>元素用来设置发生错误或异常时要显示的页面。

<!–错误处理–>

<error-page>

<error-code>404</error-code>

<location>/notfound.jsp</location>

</error-page>

<error-page>

<exception-type>exception.BookNotFound</exception-type>

<location>/exception.jsp</location>

</error-page>

jsp servlet及ajax学习

MVC的一点思考和一点进展

2008年11月18日

好几天没写日志了,周末回家小住了一下,结果时间过得飞快,感觉一眨眼就过去了。回来之后就忙今天下午的ppt。

以前写过几个MVC的例子,可前几天回过头来看的时候,发现自己写的例子并不完全符合MVC模式的核心,因为在一个比较规范的Model2的程序中,servlet只是负责流程的控制,它根据用户的请求选择合适的模型处理,并选择相应的视图进行显示,而自己之前写的程序在servlet中涉及了许多业务逻辑的处理。而且在使用模式二的时候,servlet控制器的控制作用如何实现,是有一个对应的配置文件来记录其流程控制吗?如果没有这个配置文件,那该怎么办?如果加入这个配置文件,在现在已经很成熟的框架面前是不是显得有些被动?

针对这个问题,我和实验室的一个师兄讨论过,感觉他的思路和框架如出一辙,现在比较流行的框架是建立在MVC模式基础上,可是这并不代表非要有一个配置文件来支撑Model
2啊。其实,无论怎样在servlet中实现流程控制,采取配置文件或是抛开配置文件,但在本质上思路应该是一样的。

今天晚上终于写出了一个比较符合MVC规范的程序,大体思路是这样的,对应于数据库中的表有一个Entity
Bean,用来封装数据,Action Bean用来进行业务逻辑的处理,但我写的Action
Bean并没有一个确定的规范(是否有一个比较好的规范还在考虑之中),servlet完成流程的控制,这主要是通过用户请求的URL来完成控制,应该有一个小小的约定,那就是请求的URL+“.jsp”正好是对应的要重定向到的视图(JSP页面),同时要在web.xml文件中完成相应的配置。

jsp servlet及ajax学习

ServletConfig与ServletContext

2008年11月12日

在看web.xml配置文件关于环境初始化参数的配置时,发现了ServletConfig与ServletContext这两个对象的应用,于是就写了一个Servlet来体验了一下。

首先从作用范围来说,ServletConfig作用于某个特定的Servlet,即从该Servlet实例化,那么就开始有效,但是该Servlet之外的其他Servlet不能访问;ServletContext作用于某个web应用,即在一个web应用中相当于一个全局对象,在Servlet容器启动时就已经加载,对于不同的web应用,有不同的ServletContext。

其次,来看一下二者参数的使用。如果一个参数为整个web应用所用,那么就配置为ServletContext参数,如下所示:

<context-param>

<param-name>encoding</param-name>

<param-value>gb2312</param-value>

</context-param>

如果一个参数仅为一个Servlet所用,那么就应该配置为ServletConfig参数,如下所示:

<servlet>

<servlet-name>affice_add</servlet-name>

<servlet-class>servlet.Affice_add</servlet-class>

<init-param>

<param-name>filepath</param-name>

<param-value>/webContent/affice</param-value>

</init-param>

</servlet>

最后,说明一下参数的获取。访问ServletConfig参数,取得ServletConfig对象后,调用getInitParameter()方法;访问ServletContext对象,只要调用现有的ServletConfig对象的getServletContext()即可,然后同样调用getInitParamter()方法就能获取参数。例如对于上面的参数,可以通过如下方法获取各自参数。

public
class TestServletConfig extends HttpServlet {

ServletConfig
config;

public void
init(ServletConfig config){

this.config=config;

}

public
void doGet(HttpServletRequest request,HttpServletResponse
response)

throws ServletException,IOException{

String
filepath=(String)config.getInitParameter(”filepath”);

System.out.println(filepath);

String
encode=(String)config.getServletContext().getInitParameter(”encoding”);

System.out.println(encode);

}

public
void destroy(){

}

}

对上面Servlet编译后,在浏览器中输入http://localhost:8080/my/TestServletConfig(该链接地址与servlet在webx.xml中的配置有关)后,就可以分别对应输出/WebContent/affice和gb2312

jsp servlet及ajax学习

Ecllipse插件安装方式

2008年11月3日

接触Eclipse的时间不长,插件用的也很少,对插件的安装方式也没有在意,确切地说是没有思考过安装方式的问题。一直采用的都是下载相关插件,然后解压缩到eclipse安装目录下的plugins文件夹,直到今天上午看同学的博客才发现原来还有安装方式这回事,虽然是个很简单的问题,还是总结一下。

Eclipse插件安装有三种方式:在线安装,此种方法比较慢;复制安装,即我一直用的方法;link方式安装,应该说是最好的一种方式。



复制安装,下载相关插件解压缩到eclipse安装目录下的plugins文件夹,然后重启Eclipse就可以自动找到相应的插件,然后根据需要在Eclipse中进行设置或者直接使用即可。

link方式,首先建立一个目录存放插件,例如把插件统一存放于如下目录D:\Program
Files\eclipseplugins,因为Eclipse在启动的时候是按照eclipse\plugins和eclipse\features寻找相应的插件或功能部件,所以在插件目录下必须有eclipse目录,如果解压后的文件已经有该目录,则无需人工建立,否则需要自己建立,这样才能使用。

解压到目的目录后,要在eclipse\links文件夹下建立对应的.link文件。link文件的内容:path=D:/Program
Files/eclipseplugins/tomcatPlugin(插件解压路径,上述内容为tomcat插件的link文件)。在建立link文件时需要注意的是link文件名称必须与插件解压路径下的插件目录名称相同(大小写不敏感),否则将建立不成功。

以tomcat插件为例,来具体说明插件的link安装方式。解压tomcatPluginV3.zip到目录D:\Program
Files\eclipseplugins\tomcatPlugin目录下,其中tomcatPlugin文件夹是自己建立的,但是解压后发现解压后的文件夹无eclipse目录,因此需要在D:\Program
Files\eclipseplugins\tomcatPlugin目录下继续建立eclipse\plugins目录,在eclipse下的links文件夹下新建tomcatplugin.link文件,输入如下内容path=D:/Program
Files/eclipseplugins/tomcatPlugin,然后重启eclipse设置一下tomcat-home就可以用了。

jsp servlet及ajax学习

获取Servlet运行环境信息

2008年10月27日

在Servlet中可以很方便的获取各种运行环境信息,这些信息包括Servlet自身信息、服务器端信息和客户端信息三类。

1.

获取Servlet自身信息

Servlet自身信息主要是指在web.xml文件中的配置信息,包括初始化参数和配置名称等,通过javax.serlet.ServletConfig接口定义的方法获取。

  • 获取初始化参数

所谓的获取初始化参数即获得web.xml配置文件中<servlet>元素下子元素<init-param>子元素的相关设置,这些信息的获得是在Servlet生命周期中的初始化阶段完成。参数的获得可以通过getInitParameter(String
name)方法获得,其中方法中的参数name为<init-param>子元素中定义的参数名称,返回值为该子元素中设置的初始值。因为在GenericServlet中实现了ServletConfig接口,因此在其子类中可以直接调用getInitParameter()方法。

另外,getParameterNames()方法可以返回初始化参数名称的一个集合,返回类型为Enumeration

  • 获取Servlet配置名称

获得Servlet在web.xml配置文件中配置名称getServletName(),返回类型为String,与getInitParameter()方法类似,可以在子类中直接使用该方法。

2.获取服务器端信息

在Servlet中可以很方便的获取正在执行它的服务器的信息,例如站点名称、监听端口、Servlet软件名称和版本、Servlet容器属性等。这些信息的获取是通过ServletContext和ServletRequest接口提供的方法实现的。

ServletRequest

String
getServerName()

获取服务器的站点名称

int
getServerPort()

获取服务器的监听端口号

ServletContext

String
getServerInfo()

获取服务器的名称和版本

Enumeration
getAttributeNames()

获取服务器所有的属性名称

Object
getAttribute(String name)

按名称获取服务器的属性值

int
getMajorVersion()

服务器支持的Servlet主版本号

int
getMinorVersion()

服务器支持的Servlet次版本号

3.获取客户端信息

客户请求的相关信息存储在ServletRequest对象中,获取客户端信息主要是通过调用ServletRequest接口或者子接口HttpRequest提供的方法。

String
getRemoteHost()

获取客户端主机名

String
getRomoteAddr()

获取客户端IP地址

int
getRemotePort()

获取客户端端口号

String
getProtocol()

获取客户端请求协议

String
getCharacterEncoding()

获取客户请求的编码方式

Enumeration
getParameterNames()

获取客户端发送的所有请求参数名称

String
getParameter(String name)

获取name指定的参数值

jsp servlet及ajax学习