您的位置:首页 > Web前端 > JavaScript

JSPServlet精华笔记—新手必备

2012-09-27 19:29 323 查看

一、     JSP (Java Server Pages)

JSP是指:

▶    在HTML中嵌入Java脚本代码

▶    由应用服务器中的JSP引擎来编译和执行嵌入的Java脚本代码

▶    然后将生成的整个页面信息返回给客户端

二、     JSP工作原理(执行流程)

Web容器处理JSP文件请求需要经过3个阶段:

▶        翻译阶段(转译阶段)

                   .jsp → .java

▶        编译阶段

                   .java → .class

▶       执行阶段(运行)

                   运行.class

注意:第一次请求之后,Web容器可以重用已经编译好的字节码文件。所以,第一次会比较慢。

三、     JSP中的元素

▶        静态内容

                   HTML内容

▶        指令

                   以“<%@ ” 开始,以“%> ” 结束。

                   比如:<%@ include file = " Filename" %>

▶       表达式

                   <%=Java表达式 %>

                   注意:表达式后不要加分号。

                  相当于out. print(表达式);

▶       Java脚本 (Java Scriptlet)

                   <% Java 代码 %>

▶        声 明

                <%! 方法 %>

                <%! 变量 %>

▶        注释

                <!-- 这是注释,但客户端可以查看到 -->  HTML、XML注释

                <%-- 这也是注释,但客户端不能查看到 --%>  JSP注释

四、     指令

语法:<%@ 指令名 属性n="属性值n"%>

 

常用的指令

▶        <%@ page %>

▶        <%@ include %>

▶        <%@ taglib %>

4.1.           page指令

▶        通过设置内部的多个属性来定义整个页面的属性

▶        可以使用多次

▶        一般JSP页面中,第一行就是page指令

▶        page指令常用属性



4.2.           Java脚本(Scriptlet)

                      语法 :<% Java代码 %>

                      写在Java脚本中的代码,事实上,都是在JSP转译成.java后的同一个方法(_jspService())中的代码。

                      请思考:内置对象从哪来的?

4.3.           声明

                      语法 :<%! 变量或方法%>

                      注意:声明中不可以使用内置对象,请说明和记住原因。

五、     九大内置对象

在JSP的脚本中,可以直接使用的对象。

▶        PageContext pageContext ;

▶        HttpSession session ;

▶        ServletContext application ;

▶        ServletConfig config ;

▶        JspWriter out ;

▶        Object page;

▶        HttpServletRequest request;

▶        HttpServletResponse response

▶        Throwable exception    只有isErrorPage=”true”的页面才拥有

 5.1 request对象

    客户端的请求信息被封装在request对象中,通过它才能了解到客户的需求,然后做出响应。它是HttpServletRequest类的实例。

    方法摘要:

object getAttribute(String name)             //返回指定属性的属性值
Enumeration getAttributeNames()        //返回所有可用属性名的枚举
String getCharacterEncoding()             // 返回字符编码方式
int getContentLength()                             //返回请求体的长度(以字节数)
String getContentType()                          // 得到请求体的MIME类型
ServletInputStream getInputStream()   //得到请求体中一行的二进制流
String getParameter(String name)        //返回name指定参数的参数值
Enumeration getParameterNames()    //返回可用参数名的枚举
String[] getParameterValues(String name) //返回包含参数name的所有值的数组
String getProtocol()                         // 返回请求用的协议类型及版本号
String getScheme()                          //返回请求用的计划名,如:http.https及ftp等
String getServerName()                  //返回接受请求的服务器主机名
int getServerPort()                            //返回服务器接受此请求所用的端口号
BufferedReader getReader()         //返回解码过了的请求体
String getRemoteAddr()                  //返回发送此请求的客户端IP地址
String getRemoteHost()                  //返回发送此请求的客户端主机名
void setAttribute(String key,Object obj) //设置属性的属性值
String getRealPath(String path)    //返回一虚拟路径的真实路径


5.2 response对象

    response对象包含了响应客户请求的有关信息,但在JSP中很少直接用到它。它是HttpServletResponse类的实例。

    方法摘要:

String getCharacterEncoding()        //返回响应用的是何种字符编码
ServletOutputStream getOutputStream()  //返回响应的一个二进制输出流
PrintWriter getWriter()                       // 返回可以向客户端输出字符的一个对象
void setContentLength(int len)        //设置响应头长度
void setContentType(String type)    //设置响应的MIME类型
sendRedirect(java.lang.String location) //重新定向客户端的请求


重定向和转发

response.sendRedirect("main.jsp");//重定向

request.getRequestDispatcher("main.jsp").forward(request,response);    //转发

重定向:

       又称为客户端跳转

1、 请求会丢失

2、 地址会改变

转发:

       又称为服务端跳转。

1、 请求不会丢失

2、 地址栏不改变

 

转发是在服务器端发挥作用,通过forward方法将提交信息在多个页面间进行传递。
转发是在服务器内部控制权的转移,客户端浏览器的地址栏不会显示出转向后的地址
重定向是在客户端发挥作用,通过请求新的地址实现页面转向
重定向是通过浏览器重新请求地址,在地址栏中可以显示转向后的地址
关于路径:

              重定向:basePath+完整路径
              转发:/+完整径

5.3 session对象

    session对象指的是客户端与服务器的一次会话,从客户连到服务器的一个WebApplication开始,

    直到客户端与服务器断开连接为止。它是HttpSession类的实例.

    方法摘要:

long getCreationTime()        //返回SESSION创建时间
public String getId()              // 返回SESSION创建时JSP引擎为它设的惟一ID号
long getLastAccessedTime()   // 返回此SESSION里客户端最近一次请求时间
int getMaxInactiveInterval()   //返回两次请求间隔多长时间此SESSION被取消(ms)
String[] getValueNames()    //返回一个包含此SESSION中所有可用属性的数组
void invalidate()                     // 取消SESSION,使SESSION不可用
boolean isNew()                   // 返回服务器创建的一个SESSION,客户端是否已经加入
void removeValue(String name)  //删除SESSION中指定的属性
void setMaxInactiveInterval()  //设置两次请求间隔多长时间此SESSION被取消(ms)


5.4 out对象

    out对象是JspWriter类的实例,是向客户端输出内容常用的对象

    方法摘要:

void clear()             // 清除缓冲区的内容
void clearBuffer()   //清除缓冲区的当前内容
void flush()             // 清空流
int getBufferSize()  //返回缓冲区以字节数的大小,如不设缓冲区则为0
int getRemaining() //返回缓冲区还剩余多少可用
boolean isAutoFlush() //返回缓冲区满时,是自动清空还是抛出异常
void close()               //关闭输出流


5.5 page对象

    page对象就是指向当前JSP页面本身,有点象类中的this指针,它是java.lang.Object类的实例

    方法摘要:

class getClass              //返回此Object的类
int hashCode()              //返回此Object的hash码
boolean equals(Object obj) //判断此Object是否与指定的Object对象相等
void copy(Object obj)   // 把此Object拷贝到指定的Object对象中
Object clone()               // 克隆此Object对象
String toString()             //把此Object对象转换成String类的对象
void notify()                    //唤醒一个等待的线程
void notifyAll()                // 唤醒所有等待的线程
void wait(int timeout)    //使一个线程处于等待直到timeout结束或被唤醒
void wait()                      // 使一个线程处于等待直到被唤醒
void enterMonitor()        //对Object加锁
void exitMonitor()           //对Object开锁


5.6 application对象

    application对象实现了用户间数据的共享,可存放全局变量。它开始于服务器的启动,直到服务器的关闭,

    在此期间,此对象将一直存在;这样在用户的前后连接或不同用户之间的连接中,

    以对此对象的同一属性进行操作;在任何地方对此对象属性的操作,都将影响到其他用户对此的访问。

    服务器的启动和关闭决定了application对象的生命。它是ServletContext类的实例。

    方法摘要:

Object getAttribute(String name)       //返回给定名的属性值
Enumeration getAttributeNames()    //返回所有可用属性名的枚举
void setAttribute(String name,Object obj)  //设定属性的属性值
void removeAttribute(String name)    //删除一属性及其属性值
String getServerInfo()                           //返回JSP(SERVLET)引擎名及版本号
String getRealPath(String path)         //返回一虚拟路径的真实路径
ServletContext getContext(String uripath)  //返回指定WebApplication的application对象
int getMajorVersion()                             //返回服务器支持的Servlet API的最大版本号
int getMinorVersion()                             //返回服务器支持的Servlet API的最大版本号
String getMimeType(String file)           //返回指定文件的MIME类型
URL getResource(String path)           //返回指定资源(文件及目录)的URL路径
InputStream getResourceAsStream(String path) //返回指定资源的输入流
RequestDispatcher getRequestDispatcher(String uripath) //返回指定资源的RequestDispatcher对象
Servlet getServlet(String name)            //返回指定名的Servlet
Enumeration getServlets()                    //返回所有Servlet的枚举
Enumeration getServletNames()        //返回所有Servlet名的枚举
void log(String msg)                             // 把指定消息写入Servlet的日志文件
void log(Exception exception,String msg)  // 把指定异常的栈轨迹及错误消息写入Servlet的日志文件
void log(String msg,Throwable throwable)  // 把栈轨迹及给出的Throwable异常的说明信息 写入Servlet的日志文件


5.7 exception对象

    exception对象是一个例外对象,当一个页面在运行过程中发生了例外,就产生这个对象。

    如果一个JSP页面要应用此对象,就必须把isErrorPage设为true,否则无法编译。他实际上是java.lang.Throwable的对象

    方法摘要:

String getMessage()               //返回描述异常的消息
String toString()                        //返回关于异常的简短描述消息
void printStackTrace()            //显示异常及其栈轨迹
Throwable FillInStackTrace() //重写异常的执行栈轨迹


5.8 pageContext对象

    pageContext对象提供了对JSP页面内所有的对象及名字空间的访问,

    也就是说他可以访问到本页所在的SESSION,

    也可以取本页面所在的application的某一属性值,

    他相当于页面中所有功能的集大成者,它的本 类名也叫pageContext。

    方法摘要:

JspWriter getOut()                                   //返回当前客户端响应被使用的JspWriter流(out)
HttpSession getSession()                     //返回当前页中的HttpSession对象(session)
Object getPage()                                      //返回当前页的Object对象(page)
ServletRequest getRequest()               //返回当前页的ServletRequest对象(request)
ServletResponse getResponse()        //返回当前页的ServletResponse对象(response)
Exception getException()                        //返回当前页的Exception对象(exception)
ServletConfig getServletConfig()           //返回当前页的ServletConfig对象(config)
ServletContext getServletContext()        //返回当前页的ServletContext对象(application)
void setAttribute(String name,Object attribute) //设置属性及属性值
void setAttribute(String name,Object obj,int scope) //在指定范围内设置属性及属性值
public Object getAttribute(String name)    //取属性的值
Object getAttribute(String name,int scope)     //在指定范围内取属性的值
public Object findAttribute(String name)       //寻找一属性,返回起属性值或NULL
void removeAttribute(String name)         //删除某属性
void removeAttribute(String name,int scope)   // 在指定范围删除某属性
int getAttributeScope(String name)        //返回某属性的作用范围
Enumeration getAttributeNamesInScope(int scope) //返回指定范围内可用的属性名枚举
void release()                    //释放pageContext所占用的资源
void forward(String relativeUrlPath)        //使当前页面重导到另一页面
void include(String relativeUrlPath)        //在当前位置包含另一文件


5.9 config对象

    config对象是在一个Servlet初始化时,JSP引擎向它传递信息用的,

    此信息包括Servlet初始化时所要用到的参数(通过属性名和属性值构成)

    以及服务器的有关信息(通过传递一个ServletContext对象)

    方法摘要:

ServletContext getServletContext()      //返回含有服务器相关信息的ServletContext对象
String getInitParameter(String name)    // 返回初始化参数的值
Enumeration getInitParameterNames()  //返回Servlet初始化所需所有参数的枚举

六、JSP状态管理(会话跟踪)

1. Cookie

      Cookie是Web服务器保存在客户端的一系列文本信息。

Cookie的作用

      对特定对象的追踪
      统计网页浏览次数
      简化登录
安全性能

     容易信息泄露

常见的方法

String getComment() //返回cookie中注释,假如没有注释的话将返回空值.
String getDomain() //返回cookie中Cookie实用的域名. 应用getDomain() 方法可以唆使浏览器把Cookie返回给同 一域内的其他服务器,而通常Cookie只返回给与发送它的服务器名字完整雷同的服务器。留心域名必须以点开端
int getMaxAge() //返回Cookie过期之前的最大时间,以秒盘算。
String getName() //返回Cookie的名字
String getPath() //返回Cookie实用的路径。假如不指定路径,Cookie将返回给当前页面所在目录及其子目录下 的所有页面。
boolean getSecure() //假如浏览器通过安全协议发送cookies将返回true值,假如浏览器应用标准协议则返回false值。
String getValue() //返回Cookie的值。笔者也将在后面具体先容getValue/setValue。
int getVersion() //返回Cookie所屈服的协议版本。
void setComment(String purpose) //设置cookie中注释
void setDomain(String pattern) //设置cookie中Cookie实用的域名
void setMaxAge(int expiry) //以秒盘算,设置Cookie过期时间。
void setPath(String uri) //指定Cookie实用的路径。
void setSecure(boolean flag) //指出浏览器应用的安全协议,例如HTTPS或SSL。
void setValue(String newValue) //cookie创立后设置一个新的值。
void setVersion(int v) //设置Cookie所屈服的协议版本
//获取客户端发送所有的Cookie
<%
//获取客户端发送所有的Cookie
Cookie[] cookies = request.getCookies();

if (null != cookies) {
%>
<table width="600" border="1">
<tr>
<td>
名称
</td>
<td>
值
</td>
<td>
有效时长
</td>
</tr>
<%
for (Cookie cookie : cookies) {
%>
<tr>
<td>
<%=cookie.getName()%>
</td>
<td>
<%=cookie.getValue()%>
</td>
<td>
<%=cookie.getMaxAge()%>
</td>
</tr>
<%
}
//创建Cookie
Cookie nameCookie = new Cookie("username", "accp");
Cookie pwdCookie = new Cookie("password", "123");

//设置有效时长(秒)
nameCookie.setMaxAge(60);
pwdCookie.setMaxAge(60);

//向客户端手动写入Cookie
response.addCookie(nameCookie);
response.addCookie(pwdCookie);
%>


2.session(会话)

      会话就是浏览器与服务器之间的一次通话,包含浏览器与服务器之间的多次请求、响应过程 。

       常用方法

getId //此方法返回唯一的标识,这些标识为每个session而产生。当只有一个单一的值与一个session联合时,或当日志信息与先前的sessions有关时,它被当作键名用。
  GetCreationTime //返回session被创建的时间。最小单位为千分之一秒。为得到一个对打印输出很有用的值,可将此值传给Date constructor 或者GregorianCalendar的方法setTimeInMillis.
  GetLastAccessedTime //返回session最后被客户发送的时间。最小单位为千分之一秒。
  GetMaxInactiveInterval //返回总时间(秒),负值表示session永远不会超时。
  //getAttribute 取一个session相联系的信息。(在jsp1.0中为 getValue)
  Integer item = (Integer) session.getAttribute("item") //检索出session的值并转化为整型
  //setAttribute 提供一个关键词和一个值。会替换掉任何以前的值。(在jsp1.0中为putValue)
  session.setAttribute("ItemValue", itemName); // ItemValue 必须不是must简单类型

七、     JavaBean

                     符合规范的Java类都是JavaBean

JavaBean的分类

       封装数据
            按照OO原则,属性与数据库表字段相对应
            属性私有
            public的无参的构造方法
            具有public的set/get方法
        封装业务
            具有实现特定功能的方法和方法实现
            通常与一个封装数据的JavaBean对应

优势

        解决代码重复编写,减少代码冗余
        功能区分明确,避免业务逻辑处理与页面显示处理集中在一起造成混乱
        提高了代码的维护性

八、     Tomcat配置连接池

1、 将驱动jar包拷贝到%TOMCAT_HOME%\lib目录下

2、 打开%TOMCAT_HOME%\conf\context.xml文件,在<Context>元素下配置:

<Resource name="jdbc/books"

auth="Container"type="javax.sql.DataSource"  maxActive="100"

maxIdle="30" maxWait="10000" username="scott"   password="tiger"

driverClassName="oracle.jdbc.OracleDriver"

url="jdbc:oracle:thin:@192.168.3.80:1521:accp"/>


3、 在web.xml中配置(可选)

<resource-ref>

<res-ref-name> jdbc/ pro</res-ref-name>

<res-type> javax.sql.DataSource </res-type>

<res-auth> Container </res-auth>

</resource-ref>


4、 通过JNDI获取数据源,并从数据源得到连接

Context ic = new InitialContext();

DataSource source = (DataSource)ic.lookup("java:comp/env/jdbc/news");

Connection connection = source.getConnection();

九、     Serlvet基础

Servlet 是一个 Java程序,是在服务器上运行以处理客户端请求并做出响应的程序。

必须实现Servlet接口。

13.1.      Servlet的生命周期



1、 客户端发出HTTP请求,默认情况下,当第一次请求Servlet时,容器创建Servlet实例。否则进入第3步。

2、 调用Servlet的init()方法进行初始化。

3、 调用Servlet的service()方法处理请求和响应。

4、 然后Servlet常驻内存,等待下一次调用。

5、 应用程序停止,调用Servlet的destroy()释放占用的资源。

注意:在整个应用程序的生命周期中,Servlet的实例只有一个。它以多线程的方式进行服务。

记住JSP与Servlet的生命周期及区别

13.2.      Servlet的体系结构



HttpServlet中的doGet()和doPost()由service()方法根据提交请求的方式(GET/POST)来调用。默认为GET

13.3.      常用API

      ServeltConfig接口

      在Servlet初始化过程中获取配置信息
      一个Servlet只有一个ServletConfig对象
      ServeltConfig接口的常用方法

方法名称

         功能描述

String getInitParameter(String name)

获取web.xml中设置的以name命名的初始化参数值

ServletContext getServletContext()

返回Servlet的上下文对象引用

      ServeltConText接口

      获取Servlet上下文
      即JSP中的application内置对象
      ServeltConText接口的常用方法

方法名称

         功能描述

ServletContext getContext(String path)

返回服务器上与指定URL相对应的ServletContext对象

void setAttribute(String name,Object obj)

设置Servlet中的共享属性

Object getAttribute(String name)

获取Servlet中设置的共享属性

      GenericServlet抽象类

      提供了Servlet与ServletConfig接口的默认实现方法
      HttpServlet继承于GenericServlet
      处理HTTP协议的请求和响应

13.4.      Servlet的配置

<!-- 注册Servlet -->

<servlet>

<servlet-name>servlet03</servlet-name>

<servlet-class>com.accp.jspservlet.servlet.Servlet03</servlet-class>

</servlet>

<!-- 映射 -->

<servlet-mapping>

<servlet-name>servlet03</servlet-name>

<url-pattern>/servlet03</url-pattern>

</servlet-mapping>


13.5.      初始化参数

<servlet>

<description>读取初始化参数</description>

<servlet-name>InitParamServlet</servlet-name>    <servlet-class>com.accp.jspservlet.servlet.InitParamServlet</servlet-class>

<!-- 初始化参数,可以配置多个,只有该Servlet能够读取 -->

<init-param>

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

<param-value>UTF-8</param-value>

</init-param>

</servlet>


读取:

//获取所有的初始化参数的名称

Enumeration<String> paramNames = config.getInitParameterNames();

while(paramNames.hasMoreElements()){

String paramName = paramNames.nextElement();

String paramValue = config.getInitParameter(paramName);

System.out.println(paramName+"="+paramValue);

}


13.6.      Servlet上下文参数

<!-- Servlet上下文(ServletContext)参数 -->

<context-param>

<param-name>hello</param-name>

<param-value>world</param-value>

</context-param>


读取:

Enumeration<String> paramNames = context.getInitParameterNames();

System.out.println("Servlet上下文参数,所有的Servlet都可以访问");

while(paramNames.hasMoreElements()){

String paramName = paramNames.nextElement();

String paramValue = context.getInitParameter(paramName);

System.out.println(paramName+"="+paramValue);

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: