一、WEB应用的目录结构

通常我们是在IDE中创建web应用程序,IDE自动为我们实现了WEB的目录结构,下面来看如何徒手创建一个WEB程序。

首先来看一下Tomcat自带的一个web应用的目录结构

看以看出这个应用采用了MVC的结构。把源代码分为jsp视图,servlet控制和websocket模型三个模块,而index.html是开始界面。其中目录WEB-INF是不可缺少的,而且这个目录下的文件是客户端无法访问到的。也就是说,所有这个文件夹下的jsp文件或者html文件对客户端来说都是隐藏的,无法通过域名直接访问。其目录结构如下:

其中classes目录下存放的是web应用所用到的编译好的类文件,后缀名为.class。lib目录下存放的是web应用所用到的jar包。而web.xml是这个web应用的配置文件,是不可却少的。

创建好这几个关键目录和文件,并在web.xml中做了正确的配置,就可以把这个web应用目录复制到tomcat的webapps目录下,这样就把应用部署到了tomcat服务器中。

二、配置文件web.xml

web.xml的基本内容如下:

  1.  
    <?xml version="1.0" encoding="UTF-8"?>
  2.  
    <!--
  3.  
    Licensed to the Apache Software Foundation (ASF) under one or more
  4.  
    contributor license agreements. See the NOTICE file distributed with
  5.  
    this work for additional information regarding copyright ownership.
  6.  
    The ASF licenses this file to You under the Apache License, Version 2.0
  7.  
    (the "License"); you may not use this file except in compliance with
  8.  
    the License. You may obtain a copy of the License at
  9.  
     
  10.  
    http://www.apache.org/licenses/LICENSE-2.0
  11.  
     
  12.  
    Unless required by applicable law or agreed to in writing, software
  13.  
    distributed under the License is distributed on an "AS IS" BASIS,
  14.  
    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  15.  
    See the License for the specific language governing permissions and
  16.  
    limitations under the License.
  17.  
    -->
  18.  
    <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
  19.  
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  20.  
    xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
  21.  
    http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
  22.  
    version="4.0"
  23.  
    metadata-complete="true">
  24.  
     
  25.  
    <description>
  26.  
    Servlet and JSP Examples.
  27.  
    </description>
  28.  
    <display-name>Servlet and JSP Examples</display-name>
  29.  
     
  30.  
    <welcome-file-list>
  31.  
    <welcome-file>index.html</welcome-file>
  32.  
    <welcome-file>index.xhtml</welcome-file>
  33.  
    <welcome-file>index.htm</welcome-file>
  34.  
    <welcome-file>index.jsp</welcome-file>
  35.  
    </welcome-file-list>
  36.  
     
  37.  
    <!-- Websocket examples -->
  38.  
    <listener>
  39.  
    <listener-class>websocket.drawboard.DrawboardContextListener</listener-class>
  40.  
    </listener>
  41.  
     
  42.  
    </web-app>
  43.  
     

可以根据实际情况对上述文件进行删减和修改。总的来说,web.xml可以进行如下配置:

1、配置jsp

  1.  
    <description>
  2.  
    Servlet and JSP Examples.
  3.  
    </description>
  4.  
    <display-name>Servlet and JSP Examples</display-name>

2、配置servlet

  1.  
    <servlet>
  2.  
    <servlet-name>HelloWorldExample</servlet-name>
  3.  
    <servlet-class>HelloWorldExample</servlet-class>
  4.  
    </servlet>
  5.  
    <servlet-mapping>
  6.  
    <servlet-name>HelloWorldExample</servlet-name>
  7.  
    <url-pattern>/servlets/servlet/HelloWorldExample</url-pattern>
  8.  
    </servlet-mapping>

3、配置Listener

  1.  
    <!-- Define example application events listeners -->
  2.  
    <listener>
  3.  
    <listener-class>listeners.ContextListener</listener-class>
  4.  
    </listener>
  5.  
    <listener>
  6.  
    <listener-class>listeners.SessionListener</listener-class>
  7.  
    </listener>
  8.  
     

4、配置Filter

  1.  
    <!-- Example filter to set character encoding on each request -->
  2.  
    <filter>
  3.  
    <filter-name>Set Character Encoding</filter-name>
  4.  
    <filter-class>org.apache.catalina.filters.SetCharacterEncodingFilter</filter-class>
  5.  
    <async-supported>true</async-supported>
  6.  
    <init-param>
  7.  
    <param-name>encoding</param-name>
  8.  
    <param-value>UTF-8</param-value>
  9.  
    </init-param>
  10.  
    <init-param>
  11.  
    <param-name>ignore</param-name>
  12.  
    <param-value>false</param-value>
  13.  
    </init-param>
  14.  
    </filter>

5、配置web应用首页页面

  1.  
    <welcome-file-list>
  2.  
    <welcome-file>index.html</welcome-file>
  3.  
    <welcome-file>index.xhtml</welcome-file>
  4.  
    <welcome-file>index.htm</welcome-file>
  5.  
    <welcome-file>index.jsp</welcome-file>
  6.  
    </welcome-file-list>

上述配置表示无论浏览器输入index.html/xhtml/htm/jsp都会把页面呈现给浏览器。

6、其他配置如配置标签库和资源引用等

三、jsp的基本原理和使用

1、基本概念

jsp本质是servlet,运行jsp代码时也是先转为servlet再进行编译运行。jsp页面由两部分组成:html代码表示静态部分,java代码表示动态控制部分。其基本运行过程如下:如果第一次收到请求jsp页面,则先编译jsp文件,生成相应的servlet控制类,然后会根据请求参数给予应答,生成动态的html文档,返回给客户端予以显示。

jsp的注释采用<%--   注释内容  --%>,与html的注释<!--   注释内容  -->不同。同时注意的是jsp的注释不会发送到客户端,在客户端查看源代码时只能看到html的注释而看不到jsp的注释。

jsp中可以声明方法和变量,使用<%!    声明的变量和方法  %>的格式。注意的是这种形式声明的变量,对于任何访问者来说,都只有公用的一份。因为jsp运行会转为servlet,而服务器加载servlet时会初始化其属性,而且初始化只进行一次,从而保证每个servlet在容器中只有一个实例。因为servlet实例对访问者来说只有一个,所以其属性对所有访问者来说是共用的。

jsp可是使用<%=  表达式 %>来向jsp页面直接输出相应的值。表达式可以是任何变量,方法和算数表达式。如<%= count++ %>,<%=  num=max(1,20) %>

2、jsp的编译指令

jsp包含三个常见的编译指令page,include,taglib

page指令位于jsp页面的顶端,一个jsp页面可以包含多个page指令。page包含多个属性。下面介绍几个重要的属性

extends:用于指定jsp页面编译生成的java类所继承的父类

import:用来导入包。jsp默认导入的包有java.lang.*,javax.servlet.*,javax.servlet.jsp.*,javax.servlet.http.*

errorPage:指定错误处理页面。

isErrorPage:设置该页面是否为错误处理页面

contentType:设定生成的文件格式和编码字符集。常用格式contentType="text/html; charset=UTF-8  "

pageEncodeing指定生成网页的编码字符集

include指令

格式<%@include file="filePath"  %>。    注意这是一个静态命令,它会把file指向的jsp或者html文件”复制“到当前jsp页面中,然后融合为一个页面来进行编译。这与

<jsp:include>指令是不同的。

3、jsp的动作指令

1)forward指令

用于页面转发,转发指向的页面可以是html也可以是jsp,也可以是servlet。命令格式如下:

<jsp:forward page=''转发地址''>

<jsp:param 加入转发时提供的参数/>

</jsp:forward>

执行forward命令时原请求参数并不会丢失,而是接着传给forward指向的页面。新增加的参数也可以通过HttpServletRequest类的getParameter()方法来获得相应的参数值。执行forward命令后,用户请求的地址也就是在浏览器上显示的地址并没有改变,但显示的页面却是forward指向的页面。

实例:

  1.  
    <jsp:forward page="forward-result.jsp">
  2.  
    <jsp:param name="age" value="29"/>
  3.  
    </jsp:forward

2)include指令

用于导入某个页面,是一个动态include指令。仅仅导入页面的body内容。命令格式:

<jsp:include page="页面地址"/>

或者

<jsp:include page="页面地址">

<jsp:param name="  "  value="   " />

</jsp:include>

同样,新加入的参数可以通过request对象的相应方法来获取。

实例

<jsp:include page="scriptlet.jsp" />
  1.  
    <jsp:include page="forward-result.jsp" >
  2.  
    <jsp:param name="age" value="32"/>
  3.  
    </jsp:include>

3)javaBean相关指令

useBean:在页面中初始化一个javaBean。基本格式如下:

<jsp:useBean id="  "  class=''  ''    scope="     "/>

id就是初始化的javaBean对象名称。class指明是哪个javaBean,注意使用全类名。scope指定javaBean的作用范围。有四个值可选。

page:仅在该页面有效。

request:本次请求有效

session:本次会话内有效

application:在本应用中一直有效

实例:

<jsp:useBean id="p1" class="lee.Person" scope="page"/>

setProperty:为javaBean的属性赋值。基本格式:

<jsp:setProperty  name="   "   proterty="   "    value="   "/>

其中name为javaBean的实例名,proterty为javaBean的属性名,value为属性值。例如:

<jsp:setProperty name="p1" property="name" value="wawa"/>

getProperty:获取javaBean相应的属性值,使用方法与setProperty类似

<jsp:getProperty name="p1" property="name"/>

4)param指令

用于设置参数值,不能单独使用,通常结合include,forward指令来使用。

四、jsp页面中的9个内置对象

jsp页面中有9个内置的servlet API接口的实例,可以在jsp页面中直接使用。

application,session,request,page这四个对象用于jsp和servlet之间的信息交换,只是每个对象有不同的作用范围。通常如果仅仅是为了两个页面之间交换信息,可以将信息放入request对象中,然后执行forward转发请求即可。

1)application对象:代表当前WEB应用本身,作用有两个:1在整个WEB应用的多个servlet和jsp之间共享数据。2访问web应用的配置参数。

常用方法:

getAttribute(name)获取对应的参数值

setAttribute(name,value)在application中设置一个参数并为其赋值为value

getInitParameter(name)获取web配置中的参数值,也就是web.xml中context-param标签下的配置参数。

如何在servlet中获取application对象的属性值呢?

servlet中并没有内置application对象,必须通过getServletConfig().getServletContext()方法获取一个ServletContext对象,然后通过该对象的getAttribute()方法来获取对应的属性值。

通常情况下我们只把WEB应用的状态信息数据存入application中。

2)session对象

代表了一次会话过程。即从客户端连接服务器开始,到客户端与服务器断开连接为止,这个过程就是一次会话。浏览器一关闭,session失效

session用于跟踪用户信息,其属性可以在多个页面之间跳转时保持共享。例如判断用户是否登录,或者保存用户在购物车中的商品信息等等。

session对象是HttpSession的实例,有两个常用方法:setAttribute(name,value),

getAttribute(name)用于设置参数和获取参数。

3)request对象

是HttpServletRequest的实例,代表了本次请求,封装了用户一次请求的所有信息,包括请求参数。

常用方法:

getParameter(name):获取相应的请求参数值

getParameterMap():获取所有请求参数的参数名和参数值,返回值为一个map对象

getParameterNames():获取请求参数名所组成的枚举对象

getParameterValues(name):获取相应请求参数的值,当值有多个时(例如复选框),返回值组成的的string数组

setAttribute(name,value)设置一个参数为request范围并为其赋值

getAttribute(name)获取request范围内的属性值

利用request来实现forward和include

首先获取一个RequsetDispatcher,通过request对象的getRequestDispatcher(path)来实现,path就是forward或者include的路径,注意必须以“/”开头。然后通过这个对象的forward(request,response)和include(request,response)方法来实现。

4)page对象

代表页面本身,没有太多用处,就是servlet中的this。

5)pageContext对象

是javax.servlet.jsp.pageContext的实例,代表了jsp页面的上下文,使用该对象可以访问页面的共享数据。可以访问page,request,session,application范围内的变量。

常用方法

getAttribute(name):访问page范围内的name属性

getAttribute(name,scope):访问指定范围内的属性值

scope可以是如下几个值:PageContext.PAGE_SCOPE,PageContext.REQUEST_SCOPE,PageContext.SESSION_SCOPE,PageContext.APPLICATION_SCOPE

相应的有setAttribute方法来设置指定变量放入相应的范围内。

pageContext还提供相应的方法来获取其他内置对象

getRequest(),getResponse(),getServletConfig(),getSession(),getServletContext()

6)response对象

response对象的主要作用是用于对客户端的请求进行回应,将WEB服务器处理后的结果发回给客户端。
response对象属于javax.servlet.http.HttpServletResponse接口的实例。

response对象的常用方法
Public void addCookie(Cookie cookie):向客户端增加Cookie

Cookie是浏览器所提供的一种技术,这种技术让服务器端的程序能将一些只须保存在客户端,或者在客户端进行处理的数据,放在使用中本身的计算机,不须通过网络的传输,因而提高网页处理的效率,而且也能够减少服务器端的负载,但是由于Cookie是服务器端保存在客户端的信息,所以其安全性也是很差的。
在JSP中专门提供了javax.servlet.http.Cookie的操作类。其常用方法如下:

Public Cookie(String name, String value):实例化Cookie对象,同时设置名字和内容
Public String getName():取得Cookie的名字
Public String getValue():取得Cookie的内容
Public void setMaxAge(int expiry):设置Cookie的保存时间,以秒为单位

我们可以通过 Cookie c[] = request.getCookies();来取得客户端的全部Cookie

Public void setHeader(String name, String value):设置回应的头信息

所有的头信息都是随着请求和回应自动发送到服务器端(客户端),在response中一个比较常用的头信息就是刷新指令,可以完成定时刷新的功能。response.setHeader("refresh", "2");   //页面2秒刷新一次

对于刷新的头信息,除了定时的功能外,还具备了定时跳转的功能,可以让一个页面定时跳转到一个指定的页面
response.setHeader("refresh", "3;URL=welcome.html");      //3秒后跳转到welcome.html页面  
Public void sendRedirect(String location) throws IOException:页面跳转

页面跳转后地址栏改变了,那么跳转就属于客户端跳转,客户端跳转就无法传递request属性范围内容的。

7)out对象

out对象是javax.servlet.jsp.JspWriter类的实例化对象,主要的功能就是完成页面的输出操作,使用println()或print()方法输出,但是从实际的开发来看,直接使用out对象的几率较少,因为<%=%>的形式输出要比使用out.println()更加方便,都会使用表达式完成输出的操作。在开发中尽量避免在JSP中使用out对象

8)config对象

config对象是javax.servlet.ServletConfig接口的实例化对象,主要的功能是取得一些初始化的配置信息。
常用方法:
public String getInitParameter(String name):取得指定名称的初始化参数内容
public Enumeration getInitParameterNames():取得全部的初始化参数名称

9)exception对象

是java.lang.Throwable的实例,代表了其他页面中的异常和错误。只有当页面是错误处理页面,即page中的isErrorPage为true时,对象才可用。

java web jsp的更多相关文章

  1. java web jsp学习笔记--概述-常用语法,指令,动作元素,隐式对象,域对象

     JSP学习笔记 1.什么是jsp JSP全称是Java Server Pages,它和servle技术一样,都是SUN公司定义的一种用于开发动态web资源的技术.JSP/Servlet规范.JS ...

  2. java Web jsp和servlet的关系

    JSP在本质上就是SERVLET,但是两者的创建方式不一样Servlet完全是JAVA程序代码构成,擅长于流程控制和事务处理,通过Servlet来生成动态网页很不直观JSP由HTML代码和JSP标签构 ...

  3. 9.Java web—JSP内置对象

    容器内置了9大对象,这些对象在jsp页无需实例化,可以直接使用. 分别为request. response .session. application .out. pageContext .confi ...

  4. 8.Java web—JSP基本语法

    1)脚本标识 <%-- <%@这两都之间不能为空格 ,但page前面可以任意空格 --%> <%@ page language="java" content ...

  5. java web(jsp)-The superclass "javax.servlet.http.HttpServlet" was not found on the Java Build Path

    在静态项目上新建 jsp文件的时候,报错:The superclass "javax.servlet.http.HttpServlet" was not found on the ...

  6. java Web jsp嵌入代码的三种方式

    1,表达式标签  <%= 2+3%> 唯一有显示功能的标签 作用: 计算表达式的返回值 将表达式的返回值显示到网页中. 注意: 表达式中不能有分号 2,普通脚本标签  <% %> ...

  7. java Web jsp四大作用域和九大内置对象

    JSP中的四大作用域:page.request.session.application 这四大作用域,其实就是其九大内置对象中的四个,为什么说他们也是JSP的四大作用域呢?因为这四个对象都能存储数据, ...

  8. java Web jsp页面的静态包含和动态包含

    现在有头 体 尾 三个jsp页面 top.jsp <%@ page language="java" contentType="text/html; charset= ...

  9. Eclipse配置Tomcat搭建java Web (JSP)开发环境

    配置Tomcat服务 1.打开窗口-首选项-Server-Runtiome Environments 2.点击ADD,选择对应的Tomcat版本,点击下一步 路径选择Tomcat解压后的文件夹目录,点 ...

随机推荐

  1. BurpSuite工具应用

    BurpSuite工具应用 BurpSuite是用于攻击web 应用程序的集成平台.它包含了许多工具,并为这些工具设计了许多接口,以促进加快攻击应用程序的过程.所有的工具都共享一个能处理并显示HTTP ...

  2. 从0开始学习 GITHUB 系列之「加入 GITHUB」【转】

    本文转载自:http://stormzhang.com/github/2016/05/26/learn-github-from-zero2/ 版权声明:本文为 stormzhang 原创文章,可以随意 ...

  3. windows java 环境变量配置

    第一步 找到系统设置环境变量的位置(windows 10): 控制面板\系统和安全\系统   点击 ‘高级系统设置’ 就可以看到   “环境变量”  了 第二步 设置3个路径 1.path (配置JD ...

  4. [sql]java.sql.Types的具体对应值(jdbcType)

    public final static int BIT   =  -7; public final static int TINYINT  =  -6; public final static int ...

  5. 关于浏览器的eventflow(capture and bubble up)

    因为,没有全面的学习javascript,及其事件原理: 全占的课程:4-5 浏览器 Bubble Up 事件模型中 不是很理解它所讲的.网上查找相关知识点.记录中在博客中: 理解了JS的加载 htt ...

  6. 微信小程序引入md5.js

    今天给大家安利一下微信小程序引入md5.js的方法,不多说 md5.js在下面 直接复制到项目的utils/md5.js即可 /* * A JavaScript implementation of t ...

  7. 51nod-1420-贪心

    1420 数袋鼠好有趣  题目来源: CodeForces 基准时间限制:1 秒 空间限制:131072 KB 分值: 40 难度:4级算法题  收藏  关注 有n只袋鼠.每只袋鼠的大小用一个整数表示 ...

  8. IOS-5个可以帮你优化App的优秀网站

    也许现在有一款App可以提供所有你需要的,你不需要的,或者你可以想象到的内容.但是,有多少App真的可以不仅满足需求而且还能提供很好的用户体验呢? 相信很多APP并没有这样的能力.有一些APP的设计特 ...

  9. call()与apply()用法

    call()和apply()的作用都是一样的——通过改变函数体内部 this 的指向,借用对象的方法的目的 还是举个栗子吧: function Cat(){ this.food = 'fish'; t ...

  10. lister.ora配置

    SID_LIST_LISTENER =  (SID_LIST =    (SID_DESC =      (SID_NAME = PLSExtProc)      (ORACLE_HOME = D:\ ...