jsp上传文件如何实现 jsp获取上传文件名

本书简介这本书的书名是《轻量级JavaEE在企业中的实际应用》,这是我在学习JavaEE框架的时候看的第一本书。这本书详细、深入浅出地讲述了框架和相关的基础知识,适合初学者和需

本文最后更新时间:  2023-03-06 10:56:50

本书简介

这本书的书名是《轻量级JavaEE在企业中的实际应用》,这是我在学习JavaEE框架的时候看的第一本书。这本书详细、深入浅出地讲述了框架和相关的基础知识,适合初学者和需要全面了解JavaEE知识的人。

本文是第二章的第一部分。

WEB应用程序和web.xml

1。构建WEB应用程序

使用IDE创建项目?当然可以。但是今天我们将学习如何在没有IDE的情况下创建一个WEB应用程序。步骤如下:

(1)在任意目录下新建一个文件夹作为应用的根目录,作者使用webDemo文件夹构建一个web应用。

(2)在应用程序根目录中创建一个WEB-INF文件夹(区分大小写)

(3)去Tomcat找到任意一个默认的WEB应用,将其WEB-INF下的web.xml文件复制到你创建的对应文件夹下。

(4)配置web.xml文件(PS:我会再写一篇文章解释相关配置)

<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_3_1.xsd" version="3.1" metadata-complete="true"></web-app>

(5)在WEB-INF目录下,新建两个文件夹:classes和lib。这两个文件夹是用来存储web应用需要的Java类文件的,但不同的是类存储的是单个类文件;Lib保存打包的JAR文件。

(6)建立了空WEB应用。将应用程序复制到Tomcat的webapps路径。

(7)将JSP文件放在WEB应用的根路径中,可以通过浏览器访问这些页面。URL路径:
http://localhost:port/webdemo/*。jsp

如上所述,WEB应用的目录结构如下:<webDemo>|--WEB-INF||--classes||--lib||--web.xml|--*.jsp

2。配置描述符web.xml

WEB.xml文件称为配置描述符。在Servlet2.5之前,web应用程序必须包含一个web.xml文件,并且必须放在WEB-INF路径中。WEB-INF是一个特殊的文件夹,WEB容器会包含这个文件夹下的内容,但是浏览器无法访问WEB-INF下的任何内容。

PS: web.xml对于Servlet3.0规范来说已经不是必须的了,但是通常建议保留。

web.xml可以实现以下所有配置功能:

(1)配置JSP

(2)配置Servlet

(3)配置监听器

(4)配置过滤器

(5)配置标签库。

(6)配置JSP属性

(7)配置JAAS授权和认证

(8)配置资源引用

(9)配置WEB应用的主页。

JSP的基本原则

JSP文件必须在JSP服务器上运行。JSP文件必须生成Servlets来执行每个JSP页面。第一个访问者很慢,因为必须等待JSP编译成ServletJSP页面的访问者不需要安装任何客户端,甚至不需要安装可以运行Java的运行环境。因为JSP页面是作为标准HTML页面交付给客户机的,所以JSP页面内容包含两个部分:静态部分(HTML标记和静态内容)和动态部分(由Java程序控制的内容)。JSP页面会被Tomcat在工作时编译成两个文件:*_jsp.java和* _ jsp.class,这个文件是一个标准的Servlet类。

JSP注释

JSP注释不会输出到客户端,格式如下:

<%-- 注释内容 --%>

JSP声明

JSP声明用于声明变量和方法。

<%! 声明部分 %>

输出JSP

<%=表达式%>

PS:表达式后面不能有分号,相当于out.println

脚本

<% 代码 %>

PS:JSP脚本中的内容会作为Servlet中服务方法的方法体。所以其中声明的变量都是局部变量,方法不能在脚本中定义。

JSP的编译指令(3)

编译指令格式如下

<%@ 编译指令 属性名="属性值"...%>

1.page:它是当前页面的指令,位于页面的顶部

属性描述:

language:声明JSP页面使用的脚本语言,默认javaextends:指定JSP编译后的类所继承的父类或接口import:用来导入包,默认导入的包有:java.lang.*,javax.servlet.*,javax.servlet.jsp.*,javax.serlvet.http.*session:设置当前页面是否需要sessionbuffer:指定输出缓冲区大小。输出缓冲区用于JSP内部对象out,默认8KBautoFlush:当输出缓冲区即将溢出时,是否需要强制输出缓冲区的内容。true正常输出,false产生异常info:设置JSP程序说明,通过Servlet.getServletInfo()获取该值errorPage:指定错误处理页面。如果页面报错,且未做异常处理,则跳转错误处理页面isErrorPage:设置本JSP页面是否为错误处理页面contentType:用于设置页面的文件格式和编码字符集。默认MIME类型为text/html;默认字符集为:ISO-8859-1pageEncoding:设置页面的编码字符集

2.include:指定包含另一个页面

语法如下:

<%@include file="相对路径"%>

Include指令可以在当前页面中嵌入外部文件,这是一个静态的include语句,它还会包含目标页面的其他编译指令。也就是说,在编译之前,目标页面的代码被集成到当前页面中。

PS:如果包含的页面需要经常更改,建议使用<>

3.taglib:用户定义和访问自定义标记

JSP的操作说明(7)

jsp:forward:执行页面转向,将请求转发到下一个页面jsp:param:用于传递参数,必须与其他支持参数的标签一起使用jsp:include:动态导入JSP页面jsp:plugin:用于下载JavaBean或Applet到客户端执行jsp:userBean:创建JavaBean实例jsp:setProperty:设置JavaBean实例的属性值jsp:getProperty:获取JavaBean实例的属性值

1 .转发指令

用于页面转发,可以转发到静态页面,动态页面或者Servlet。转发的请求参数不会丢失。

语法如下:

<jsp:forward page="相对路径"> <jsp:param name="key" value="value"/></jsp:forward>

转发时可以通过param指令传递参数,取值如下:

<%=request.getParameter("key")%>

包含指令

动态页面导入命令,不导入被包含页面的编译指令,只将导入页面的正文内容插入该页面。

语法如下:

<jsp:include page="相对路径" flush="true"> <jsp:param name="key" value="value"/></jsp:include>

flush属性设置是否将输出缓存传输到导入的文件。true包含在导入的文件中,false包含在原始文件中。

动态导入和静态导入的区别(1)静态导入是将被导入页面的代码完全融入,两个页面融合成一个Servlet;而动态导入则在Servlet中使用include方法来引入被导入页面的内容(2)静态导入时被导入页面的编译指令会起作用;而动态导入时被导入页面的编译指令则失去作用(3)动态导入可以传递额外的参数

3.useBean,setProperty,getProperty指令

这三条指令与JavaBean相关。在我们将重复代码定义为Java类的方法之后,这三条指令就可以用来调用。

UseBean语法如下:

<jsp:userBean id="name" class="classname" scope="page|request|session|application"/>id:是JavaBean的实例名class:指定JavaBean的实现类scope:指定JavaBean实例的作用范围,page(当前页面有效)、request(本次请求有效)、session(本次会话有效)、application(当前应用一直有效)

Set语法如下:

<jsp:setProperty name="BeanName" property="propertyName" value="value"/>

GetProperty语法如下:

<jsp:getProperty name="BeanName" property="propertyName"/>

例如,如下所示:

4.param指令

Param指令不能单独使用,但可以与下列指令结合使用:

(1)jsp:包含

(2)jsp:转发

(3)jsp:插件

内置JSP对象(9)

application:ServletContext实例,代表所属WEB应用本身config:ServletConfig实例,代表应用配置信息exception:Throwable实例,代表其他页面的异常,只有当前页面是错误处理页面时可用out:JspWriter实例,代表页面输出流,用于输出内容page:代表页面本身,及生成的Servlet类pageContext:PageContext实例,代表页面上下文,可访问页面的共享数据request:HttpServletRequest实例,该对象封装了一次请求和请求参数response:HttpServletResponse实例,代表服务器响应session:HttpSession实例,代表一次会话。当浏览器与站点建立连接时,会话开始;关闭浏览器时会话结束

PS: JSP内置对象要么是Servlet方法的局部变量,要么是方法的形参,所以我们可以直接在脚本中调用。

1 .应用程序对象

应用程序的两个功能

在整个WEB应用中让多个JSP、Servlet之间共享数据(使用setAttribute,getAttribute)访问WEB应用的配置参数(使用getInitParameter)

2.config对象

用于Servlet获取配置参数(使用getInitParameter)

3 .异常对象

异常对象仅在异常处理页面上有效。

4.pageContext对象

使用pageContext访问页面、请求、会话和应用程序范围内的变量。

getAttribute(String name):取得page范围内的属性getAttribute(String name, int scope):取得指定范围内的属性,scope包含PageContext.PAGE_SCOPE、PageContext.REQUEST_SCOPE、PageContext.SESSION_SCOPE、PageContext.APPLICATION_SCOPEsetAttribute(String name, String value):设置page范围内的属性setAttribute(String name, String value, int scope):取得制定范围内的属性

使用pageContext获取其他内置对象。

getRequest():获取request对象getResponse():获取response对象getServletConfig():获取config对象getServletContext():获取application对象getSession():获取session对象

5 .请求对象

(1)获取请求报头/请求参数

getParameter(String paramName):获取请求参数的值getParameterMap():获取所有请求参数名和值组成的Map对象getparameterValues(String name):获取请求参数多个值时所组成的数组getHeader(String name):获取指定的请求头的值

获取并发布

GET request

:GET request会将请求参数的名称和值转换为字符串,并将其附加到原始URL。URL和参数标有”?”分隔,多个参数用”& amp”分开,且要求传输的数据量较小,一般不超过2KB。

POST-mode request

:POST请求参数的大小不受限制,但通常取决于服务器的限制。post传输的数据比GET大,请求参数在HTTP头中传输,相对安全。

PS:

(1)不是每个表单域都会生成请求参数,只有带有name属性的表单域才会生成请求参数。

(2)每个具有name属性的表单字段对应一个请求参数。

(3)如果每个表单域都有相同的name属性,那么多个表单域只会生成一个请求参数,该参数有多个值。

(4)表单域的name属性是请求参数名,value属性是请求参数值。

如果表单域设置为disabled = & # 8221禁用”属性,则不会生成请求参数。

(2)操作请求范围的属性

setAttribute(String name, Object value):设置request范围属性getAttribute(String name):获取request范围属性

(3)向前执行或包含

getRequestDispatcher(String path).forward(request, response):跳转页面getRequestDispatcher(String path).include(request, response):包含页面

6 .响应对象

(1)

(1)响应生成非字符响应

getOutputStream():获取输出流

(2)重定向

sendRedirect("path"):重定向,重定向会丢失所有请求参数

转发和重定向之间的比较

(3)添加cookie

addCookie(Cookie cookie):增加cookiegetCookies():获取cookie数组

7 .会话对象

session表示一个用户会话,即客户端浏览器连接到服务器,并在浏览器关闭时结束。属性可以在一个会话中的多个页面之间共享数据。session属性的值必须是可序列化的Java对象。

setAttribute(String attName, Object attValue):设置session属性值getAttribute(String attName):获取session属性值

争议与思考

我们在日常开发中经常使用浏览器访问WEB应用。IE、360、火狐和谷歌,你觉得哪个浏览器最好?为什么?在评论区留言吧!

温馨提示:内容均由网友自行发布提供,仅用于学习交流,如有版权问题,请联系我们。