一、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的基本内容如下:

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee

http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"

version="4.0"

metadata-complete="true">

Servlet and JSP Examples.

Servlet and JSP Examples

index.html

index.xhtml

index.htm

index.jsp

websocket.drawboard.DrawboardContextListener

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

1、配置jsp

Servlet and JSP Examples.

Servlet and JSP Examples

2、配置servlet

HelloWorldExample

HelloWorldExample

HelloWorldExample

/servlets/servlet/HelloWorldExample

3、配置Listener

listeners.ContextListener

listeners.SessionListener

4、配置Filter

Set Character Encoding

org.apache.catalina.filters.SetCharacterEncodingFilter

true

encoding

UTF-8

ignore

false

5、配置web应用首页页面

index.html

index.xhtml

index.htm

index.jsp

上述配置表示无论浏览器输入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页面直接输出相应的值。表达式可以是任何变量,方法和算数表达式。如,

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指令

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

指令是不同的。

3、jsp的动作指令

1)forward指令

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

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

实例:

2)include指令

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

或者

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

实例

3)javaBean相关指令

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

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

page:仅在该页面有效。

request:本次请求有效

session:本次会话内有效

application:在本应用中一直有效

实例:

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

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

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

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 and jsp_java web jsp相关推荐

  1. java web 开发——第一章jsp简介

    目录 前言 1.1 JSP的概念? 1.2 安装和配置JSP运行环境 1.2.1 下载tomcat9.0 1.2.2 下载安装jdk并配置jdk环境 1.2.3 测试tomcat是否安装成功 1.3 ...

  2. jboss7 Java API for RESTful Web Services (JAX-RS) 官方文档

    原文:https://docs.jboss.org/author/display/AS7/Java+API+for+RESTful+Web+Services+(JAX-RS) Content Tuto ...

  3. Java和PHP在Web开发方面的比较

    Java和PHP在Web开发方面的比较,比较PHP和JSP这两个Web开发技术,在目前的情况是其实是比较PHP和Java的Web开发.以下是我就几个主要方面进行的比较: 一. 语言比较 PHP是解释执 ...

  4. 01_Weblogic课程之概念篇:代理服务器,web服务器,应用程序服务器,JNDI概念,JTA概念,Java消息服务,Java验证和授权(JAAS),Java管理扩展,Web客户机,客户机应用程序

     1 什么是服务器 Weblogic中服务器分为两种,一种是受管服务器,另外一种是管理服务器. Weblogic课程(Weblogic是Oracle公司的,最开始的是BEA公司的) 一 系统管理 ...

  5. java 实现 web 客户端_Java web客户端和服务器端交互的原理

    Java web客户端和服务器端交互的原理 其实HTTP客户端和服务器端的交互原理很简单:即先是浏览器和服务器端建立Socket无状态连接,也就是短连接,然后通过IO流进行报文信息(这个报文是严格遵循 ...

  6. ldap java_使用LDAP保护Java EE6中的Web应用程序

    ldap java 在上一篇文章中,我们解释了如何在通过传输层安全性(TLS)/安全套接字层(SSL)传输数据时保护数据. 现在让我们尝试了解如何为使用LDAP服务器进行身份验证的基于JEE 6的We ...

  7. 使用LDAP保护Java EE6中的Web应用程序

    在上一篇文章中,我们解释了如何在通过传输层安全性(TLS)/安全套接字层(SSL)传输数据时保护数据. 现在,让我们尝试了解如何为使用LDAP服务器进行身份验证的基于JEE 6的Web应用程序应用安全 ...

  8. web project、web service project和java project的区别

    java project就是普通的用java写的程序,直接就能运行的,web project,web service project不能直接运行,必须在容器里面运行,这个容器就是web server, ...

  9. Java网络02基本Web概念

    URI Uniform Resource Identifier 同一资源标识符 以特定语法标识一个资源的字符串 绝对URI:URI模式+模式特有部分 scheme:scheme-specific-pa ...

最新文章

  1. 机器学习理论《统计学习方法》学习笔记:第十一章 条件随机场(CRF)
  2. 阿里:马云从未转让和退出淘宝股份 也没有这个打算
  3. python-文件和流
  4. 搜索引擎、相关性算法的测试
  5. Python 获取剪切板
  6. 【IJCAI2021】长文本知识抽取:基于语义分割的文档级三元组关系抽取
  7. 润乾报表没有数据时显示空行_实现报表数据分库存储
  8. gif跟随ProgressBar一起动/pk进度条gif特效
  9. mysql更改数据库密码
  10. 正则判断数字加下划线加数字
  11. word文档单独删除或修改首页或某一页的页眉页脚及其下划线
  12. python选股模型 均线_python量化 双均线策略(金叉死叉)
  13. Mac通过转接口用千兆网线连接电信宽带
  14. 元引擎视频制作工具 一键生成原创视频软件
  15. JavaScript-WebAPIs学习记录
  16. PHP+Laravel+Fpdi+Fpdf 在PDF模板上编辑自定义文字并输出新PDF文件示例
  17. NIO学习笔记——缓冲区(Buffer)详解
  18. 大数据日志分析系统-logstash
  19. matlab reff,R语言逻辑回归和泊松回归模型对发生交通事故概率建模
  20. 深度学习中的特征(feature)指的是什么?

热门文章

  1. RowMapper rowMapper=new BeanPropertyRowMapper(User.class);
  2. “人为什么要工作” 劳动究竟为了什么?
  3. 面试官:遇到过什么系统故障?怎么解决?看完后能轻松应对
  4. 1050显卡装linux卡住,安装 Ubuntu 后卡死的问题
  5. 玩手游哪款蓝牙耳机续航高?2020新款高人气蓝牙耳机推荐
  6. 荣耀手机现在更新鸿蒙系统了吗,华为EMUI不会更新了!直接升级鸿蒙系统,荣耀手机也不会放弃...
  7. 【计算机网络原理】1.1计算机网络基本概念
  8. word2003应用基础
  9. gta5线上显示无法连接服务器,gta5线上模式连接不上怎么回事_gta5线上模式进不去如何解决...
  10. 显示来客IP地址代码