JSP学习笔记(1) -- JSP 2.0基础

来源:互联网 发布:卸载隐藏软件 编辑:程序博客网 时间:2024/04/29 18:52

1.服务器,选用了Resin,用它自己的http服务器,没有用IIS或Appach

2. 编辑器,下载了Eclipse Jee版

3. 改了页面之后发现不能立即更新显示,显示的一直是旧的页面,而改CSS文件后一刷新即可,先考虑可能是Resin的缓冲,但得启了几次都不行,后来打开网站的目录一看WEB-INF文件夹,里面是编译后的Java文件,怀疑可能是第一次运行时全部编译,完了之后就不再编译,不能跟ASP.NET一样更改某个文件的源码之后立即编译。我把这个文件夹里的文件删掉之后再打开页面就是更新过的了。
现在还没有系统学习,在这儿瞎摸着先玩玩吧,肯定还得系统学习一下。

4. Servlet
就好比ASP.NET的一个页面,客户端请求时调入内存,执行完毕则释放资源。一个简单的Servlet示例:(helloServelet.java)
package tw.com.javaworld.CH2;
import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;
public class HelloServlet extends HttpServlet {
//Initialize global variables

public void init(ServletConfig config) throws ServletException {
super.init(config);
}

//Process the HTTP Get request
public void doGet(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=GB2312");
PrintWriter out = response.getWriter();
out.println("/nCH2 - HelloServlet/n");
out.println(" Hello World
");
out.println("大家好");
out.println("/n");
out.close();
}

//Get Servlet information
public String getServletInfo() {
return "tw.com.javaworld.CH2.HelloSerlvet Information";
}
}

所有Servlet 都必须实现javax.servlet.Servlet 接口(Interface),但是通常我们都会从
javax.servlet.GenericServlet 或javax.servlet.http.HttpServlet 择一来实现。若写的Servlet
程序和HTTP 协议无关,那么必须继承GenericServlet 类;若有关,就必须继承HttpServlet 类。

配置web.xml

Java爱好者 http://www.javafan.net制作
}
public void destroy() {
}
}
从Sayhi.java的程序当中,可以发现Servlet是利用HttpServletRequest类的getParameter( )
方法来取得由网页传来的数据。不过数据通过HTTP协议传输时会被转码,因此在接收时,必须再做转
码的工作,才能够正确地接收到数据。下面这段程序是做转码的动作:
request.setCharacterEncoding("GB2312");
编译Sayhi.java 之后,再来设定web.xml:

Sayhi
tw.com.javaworld.CH2.Sayhi


Sayhi
/CH2/Sayhi

5. JSP = Elements + Template Data
Elements = Directive| Scripting | Action | EL Elements : text由Container处理的部分
Template Data是不用处理直接给客户端的部分,如HTML

6.注释
客户端可以看得到的: 里面可以有Java脚本
客户端看不到的:<%-- 批注 --%>

7.Quoting 和Escape 规则
特殊字符:' ==> /'; " ==> /"; / ==> //; < ==> < > ==> >

8. Directive Elements
<%@ directive attr1="value1"  attr2="value2"%>
或<%@ directive attr1="value1" %> <%@ directive attr2="value2" %>
或用XML语法

page指令
属性language(基本不用,默认为java),
extend="className",
import="package1.*, package2.*",
session="true | false",
buffer="none | size in kb"(默认8k)
autoFlush = "true | false"(true,溢出会抛出异常)
isThreadSave = "true | false" (true,false=singleThread)
info="Text",
erroPage = "error_url",
isErrorPage="true | false"
conentType="text/html;charset=utf-8";
pageEncoding="utf-8",
isELIgnored="true | false"
其中只有import属性可以设定两次或以上,其它属性只能设定一次

Include指令
<%@ include file = "relativeURLspec" %>或

taglib 指令
<%@ taglib uri = "tagLibraryURI" prefix="tagPrefix" %>

9. Scripting Elements

声明:<%! declaration; [ declaration; ]+ ... %>
eg. <%! Circle a = new Circle(2.0); %> , 每一个声明仅在一个页面中有效

Scriptlets:<% code fragment %>

表达式: <%= expression %>

10. Action Element
以XML语法为基础



或:

*

eg. 

  

将客户端所发出来的请求,从一个JSP 网页转交给另一个JSP网页,之后的程序将不能执行
"} />
或:
"} >
*

用来提供key/value 的信息


对应于HTML中的标签,

code="objectCode" // 以.class结尾
codebase="objectCodebase" // java类目录
[ align="alignment" ]
[ archive="archiveList" ]
[ height="height" ]
[ hspace="hspace" ]
[ jreversion="jreversion" ]
[ name="ComponentName" ]
[ vspace="vspace" ]
[ width="width" ]
[ nspluginurl="URL" ]
[ iepluginurl="URL" ] >
[
[ ] +
]
[ text message for user ] //不能启动时显示的内容

元素用来动态定义XML 元素标签的值
本体内容

或:








11. 错误处理
一段简单的错误处理页面的代码:
<%@ page contentType="text/html;charset=GB2312" isErrorPage="true" %>
<%@ page import="java.io.PrintWriter" %>


CH4 - Error.jsp


ErrorPage.jsp 错误产生:<%= exception %>



     
问题如下:<% exception.printStackTrace(new PrintWriter(out)); %>


12。属性与作用域
request、session、application 和pageContext可以使用setAttribute( )和getAttribute( )来操作
Page: pageContext, 只在本页内有效
Request: 从一个请求到另一个页面间,如使用指令的操作
Session:用户的一个会话
Application:服务器从启动到关闭
注意,getAttribute传回的是java.lang.Object对象,使用时需要进行类型转换,与ASP.NET的HttpSession对象类似

13. Servlet 中的隐含对象
page:页面本身,
config:初始的数据结构,config 对象实现于javax.servlet.ServletConfig 接口,它共有下列四种方法:
public String getInitParameter(name)
public java.util.Enumeration getInitParameterNames( )
public ServletContext getServletContext( )
public Sring getServletName( )
上述前两种方法可以让config对象取得Servlet 初始参数值,如果此数值不存在,就传回null。

request:包含所有请求的信息,如:请求的来源、标头、cookies和请求相关的参数值等等。
在JSP 网页中,request 对象是实现javax.servlet.http.HttpServletRequest 接口的,FORM中的表单的值可以使用getParameter()读取

response 对象主要将JSP 处理数据后的结果传回到客户端。response 对象是实现javax.servlet.http.HttpServletResponse 接口
eg. 每隔三分钟,就重新加载此网页:
response.setIntHeader("Refresh" , 180)
如果想要过十秒后,调用浏览器转到http://Server/Path 的网页时,可用如下代码:
response.setHeader("Refresh","10; URL=http://Server/Path" )
如果大家对HTML 语法还熟悉,则HTML 语法中也有类似的功能:

out 对象能把结果输出到网页上。

session 对象表示目前个别用户的会话(session)状况,用此项机制可以轻易识别每一个用户,
然后针对每一个别用户的要求,给予正确的响应。

application 对象实现javax.servlet.ServletContext 接口,它主要功用在于取得或更改
Servlet 的设定。

pageContext对象能够存取其他隐含对象,范围参数有四个常数,分别代表四种范围:PAGE_SCOPE 代表Page范围,REQUEST_SCOPE代表Request
范围,SESSION_SCOPE 代表Session 范围,最后APPLICATION_SCOPE 代表Application 范围

exception 对象,若要使用exception 对象时,必须在page 指令中设定。
<%@ page isErrorPage="true" %>

原创粉丝点击