java web jsp
一、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的基本内容如下:
- <?xml version="1.0" encoding="UTF-8"?>
- <!--
- Licensed to the Apache Software Foundation (ASF) under one or more
- contributor license agreements. See the NOTICE file distributed with
- this work for additional information regarding copyright ownership.
- The ASF licenses this file to You under the Apache License, Version 2.0
- (the "License"); you may not use this file except in compliance with
- the License. You may obtain a copy of the License at
- http://www.apache.org/licenses/LICENSE-2.0
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- -->
- <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
- 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">
- <description>
- Servlet and JSP Examples.
- </description>
- <display-name>Servlet and JSP Examples</display-name>
- <welcome-file-list>
- <welcome-file>index.html</welcome-file>
- <welcome-file>index.xhtml</welcome-file>
- <welcome-file>index.htm</welcome-file>
- <welcome-file>index.jsp</welcome-file>
- </welcome-file-list>
- <!-- Websocket examples -->
- <listener>
- <listener-class>websocket.drawboard.DrawboardContextListener</listener-class>
- </listener>
- </web-app>
可以根据实际情况对上述文件进行删减和修改。总的来说,web.xml可以进行如下配置:
1、配置jsp
- <description>
- Servlet and JSP Examples.
- </description>
- <display-name>Servlet and JSP Examples</display-name>
2、配置servlet
- <servlet>
- <servlet-name>HelloWorldExample</servlet-name>
- <servlet-class>HelloWorldExample</servlet-class>
- </servlet>
- <servlet-mapping>
- <servlet-name>HelloWorldExample</servlet-name>
- <url-pattern>/servlets/servlet/HelloWorldExample</url-pattern>
- </servlet-mapping>
3、配置Listener
- <!-- Define example application events listeners -->
- <listener>
- <listener-class>listeners.ContextListener</listener-class>
- </listener>
- <listener>
- <listener-class>listeners.SessionListener</listener-class>
- </listener>
4、配置Filter
- <!-- Example filter to set character encoding on each request -->
- <filter>
- <filter-name>Set Character Encoding</filter-name>
- <filter-class>org.apache.catalina.filters.SetCharacterEncodingFilter</filter-class>
- <async-supported>true</async-supported>
- <init-param>
- <param-name>encoding</param-name>
- <param-value>UTF-8</param-value>
- </init-param>
- <init-param>
- <param-name>ignore</param-name>
- <param-value>false</param-value>
- </init-param>
- </filter>
5、配置web应用首页页面
- <welcome-file-list>
- <welcome-file>index.html</welcome-file>
- <welcome-file>index.xhtml</welcome-file>
- <welcome-file>index.htm</welcome-file>
- <welcome-file>index.jsp</welcome-file>
- </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指向的页面。
实例:
- <jsp:forward page="forward-result.jsp">
- <jsp:param name="age" value="29"/>
- </jsp:forward
2)include指令
用于导入某个页面,是一个动态include指令。仅仅导入页面的body内容。命令格式:
<jsp:include page="页面地址"/>
或者
<jsp:include page="页面地址">
<jsp:param name=" " value=" " />
</jsp:include>
同样,新加入的参数可以通过request对象的相应方法来获取。
实例
<jsp:include page="scriptlet.jsp" />
- <jsp:include page="forward-result.jsp" >
- <jsp:param name="age" value="32"/>
- </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的更多相关文章
- java web jsp学习笔记--概述-常用语法,指令,动作元素,隐式对象,域对象
JSP学习笔记 1.什么是jsp JSP全称是Java Server Pages,它和servle技术一样,都是SUN公司定义的一种用于开发动态web资源的技术.JSP/Servlet规范.JS ...
- java Web jsp和servlet的关系
JSP在本质上就是SERVLET,但是两者的创建方式不一样Servlet完全是JAVA程序代码构成,擅长于流程控制和事务处理,通过Servlet来生成动态网页很不直观JSP由HTML代码和JSP标签构 ...
- 9.Java web—JSP内置对象
容器内置了9大对象,这些对象在jsp页无需实例化,可以直接使用. 分别为request. response .session. application .out. pageContext .confi ...
- 8.Java web—JSP基本语法
1)脚本标识 <%-- <%@这两都之间不能为空格 ,但page前面可以任意空格 --%> <%@ page language="java" content ...
- 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 ...
- java Web jsp嵌入代码的三种方式
1,表达式标签 <%= 2+3%> 唯一有显示功能的标签 作用: 计算表达式的返回值 将表达式的返回值显示到网页中. 注意: 表达式中不能有分号 2,普通脚本标签 <% %> ...
- java Web jsp四大作用域和九大内置对象
JSP中的四大作用域:page.request.session.application 这四大作用域,其实就是其九大内置对象中的四个,为什么说他们也是JSP的四大作用域呢?因为这四个对象都能存储数据, ...
- java Web jsp页面的静态包含和动态包含
现在有头 体 尾 三个jsp页面 top.jsp <%@ page language="java" contentType="text/html; charset= ...
- Eclipse配置Tomcat搭建java Web (JSP)开发环境
配置Tomcat服务 1.打开窗口-首选项-Server-Runtiome Environments 2.点击ADD,选择对应的Tomcat版本,点击下一步 路径选择Tomcat解压后的文件夹目录,点 ...
随机推荐
- VS+QT中文乱码问题
1.使用QStringLiteral把所有中文包起来 2.#pragma execution_character_set("utf-8")
- [nowcoder]contest/172/C保护
C国有n个城市,城市间通过一个树形结构形成一个连通图.城市编号为1到n,其中1号城市为首都.国家有m支军队,分别守卫一条路径的城市.具体来说,对于军队i,他守卫的城市区域可以由一对二元组(xi,yi) ...
- try catch finally return
public override bool Start(IServerConfig config) { bool flag = true; listenSocket = new Socket(Liste ...
- zabbix中监控某个进程的shell脚本
#!/bin/sh ret_ok= ret_warn= ret_critical= ret_unknown= info_count=`ps -aux | awk 'BEGIN {cnt=0} /[^- ...
- ZOJ 2587 Unique Attack(最小割唯一性判断)
http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=2587 题意:判断最小割是否唯一. 思路: 最小割唯一性的判断是先跑一遍最大 ...
- C++总结:C++中的const和constexpr
C++中的const可用于修饰变量.函数,且在不同的地方有着不同的含义,现总结如下. const的语义 C++中的const的目的是通过编译器来保证对象的常量性,强制编译器将所有可能违背const对象 ...
- json文件为空时读取会报错
simplejson.errors.JSONDecodeError: Expecting value: line column () 提示说是解码错误 可以用下面的方法判断json文件是否为空 imp ...
- Tensorflow一些常用基本概念与函数(四)
摘要:本系列主要对tf的一些常用概念与方法进行描述.本文主要针对tensorflow的模型训练Training与测试Testing等相关函数进行讲解.为‘Tensorflow一些常用基本概念与函数’系 ...
- 构建工具 Ant、Maven和Gradle
构建工具的作用 依赖管理 测试,打包,发布 主流的构建工具 Ant:提供编译,测试,打包 Maven:在Ant的基础上提供了依赖管理和发布的功能 Gradle:在Maven的基础上使用Groovy管理 ...
- HDU 1495 非常可乐 bfs 难度:1
http://acm.hdu.edu.cn/showproblem.php?pid=1495 第三个杯子的盛水量可由前两个杯子得到,而前两个杯子状态总数在100*100以内,穷举可实现 #includ ...