java-jsp-learnning

2020-12-22 05:29

阅读:590

标签:tracking   顺序   传输   一起   地方   current   bean   封装   key   

简介:JSP(全称Java Server Pages)

 一种动态网页开发技术。它使用JSP标签在HTML网页中插入Java代码。标签通常以结束。

 

JSP是一种Java servlet,主要用于实现Java web应用程序的用户界面部分。网页开发者们通过结合HTML代码、XHTML代码、XML元素以及嵌入JSP操作和命令来编写JSP。

JSP通过网页表单获取用户输入数据、访问数据库及其他数据源,然后动态地创建网页。

 

jsp的结构 

需要一个JSP引擎,也就是一个容器来处理JSP页面。容器负责截获对JSP页面的请求

 

jsp处理过程:

技术图片

 

 

1就像其他普通的网页一样,您的浏览器发送一个HTTP请求给服务器。

2Web服务器识别出这是一个对JSP网页的请求,并且将该请求传递给JSP引擎。通过使用URL或者.jsp文件来完成。

3JSP引擎从磁盘中载入JSP文件,然后将它们转化为servlet。这种转化只是简单地将所有模板文本改用println()语句,
并且将所有的JSP元素转化成Java代码。 4SP引擎将servlet编译成可执行类,并且将原始请求传递给servlet引擎。 5Web服务器的某组件将会调用servlet引擎,然后载入并执行servlet类。在执行过程中,servlet产生HTML格式的输出
并将其内嵌于HTTP response中上交给Web服务器。 6Web服务器以静态HTML网页的形式将HTTP response返回到您的浏览器中。

一般情况下,JSP引擎会检查JSP文件对应的servlet是否已经存在,并且检查JSP文件的修改日期是否早于servlet。如果JSP文件的修改日期早于对应的servlet,那么容器就可以确定JSP文件没有被修改过并且servlet有效。这使得整个流程与其他脚本语言(比如PHP)相比要高效快捷一些。

 

 

jsp语法:

 

jsp格式:脚本程序

脚本程序可以包含任意量的Java语句、变量、方法或表达式,只要它们在脚本语言中是有效的


eg:


你好


hhhhhhhhhhh
%>

re:

技术图片

 

 jsp格式:声明

声明一个或多个变量、方法,供后面的Java代码使用。在JSP文件中,您必须先声明这些变量和方法然后才能使用它们。


eg:


Jsp的声明
    int i = 0; %>
    



 

jsp格式:表达式

一个JSP表达式中包含的脚本语言表达式,先被转化成String,然后插入到表达式出现的地方。


表达式元素中可以包含任何符合Java语言规范的表达式,但是不能使用分号来结束表达式。

eg:


Jsp的表达式
    

time: new java.util.Date()).toLocaleString()%>

 

jsp格式-注释

 


技术图片

 

 

jsp格式:指令

用来设置与整个JSP页面相关的属性。


包括:

指令 描述
定义页面的依赖属性,比如脚本语言、error页面、缓存需求等等
包含其他文件
引入标签库的定义,可以是自定义标签

 

page指令:为容器提供当前页面的使用说明,一个jsp页面可以包含多个page指令

 

 技术图片

 

 

 inclued指令可以包含一下文件,jsp html等文件,会一起编译

 

target指令,自定义一些标签

 

 

 

 

 

 

jsp格式-行为

JSP行为标签使用XML语法结构来控制servlet引擎。它能够动态插入一个文件,重用JavaBean组件,引导用户去另一个页面,为Java插件产生相关的HTML等等。

 技术图片

 所有动作都哟两个属性:

id属性:动作元素的唯一标识,

 

scope属性:

 该属性用于识别动作元素的生命周期

 scope属性有四个可能的值: (a) page, (b)request, (c)session, 和 (d) application。

 

动作元素:

包含静态和动态的文件。该动作把指定文件插入正在生成的页面

"relative URL" flush="true" />

里的jsp:include动作不同,插入文件的时间是在页面被请求的时候。

属性列表:

  技术图片

 

 

动作

装载一个将在JSP页面中使用的JavaBean。

"name" class="package.class" />

属性:
技术图片

 

 

动作元素

设置已经实例化的Bean对象的属性

再工作useBean后面使用,不管找到一个现有的Bean,还是新建一个Bean实例,setProperty都会执行

再。。。。里面的话,只有咋新建实例时才会执行,如果使用现有实例则不执行。

 "myName" property="someProperty" .../>

name: 表示要设置属性的是哪个Bean,必须

property:表示要设置的属性,必须。如果property的值是"*",表示所有名字和Bean属性名字匹配的请求参数都将被传递给相应的属性set方法。

 

 

 

动作元素

提取指定Bean属性的值,转换成字符串,然后输出

"myName" ... />
...
"myName" property="someProperty" .../>

技术图片

 

 

结合实例:

 

javabean:

package quan;

public class TestBean {
    private String message = "no message specifid";

    public String getMessage() {
        return message;
    }

    public void setMessage(String message) {
        this.message = message;
    }
}

javabean.jsp

"text/html;charset=UTF-8" language="java" %>

Using java Bean
    "quan" class="quan.TestBean"/>
    "quan" property="message" value="quanzhiqinag"/>
    

获取quan类中的message属性

"quan" property="message"/>

技术图片

 

 

 

动作元素

把请求转到另外的页面。jsp:forward标记只有一个属性page。

"Relative URL" />

page:page属性包含的是一个相对URL,可以是一个JSP页面或者一个 Java Servlet.

 

实现转发的jsp

"text/html;charset=UTF-8" language="java" %>

jsp:forward

forward example

"date.jsp"/>

转发到的jsp:

"text/html;charset=UTF-8" language="java" %>



time: new java.util.Date()).toLocaleString()%>

re:

技术图片

 

 

动作元素

、 动作元素,动态定义XML元素

 

动作

允许在JSP页面和文档中使用写入文本的模板

Template data

文本模板不能包含其他元素,只能只能包含文本和EL表达式

 

jsp中的对象:

技术图片

 

 request对象

是javax.servlet.http.HttpServletRequest 类的实例

每当客户端请求一个JSP页面时,JSP引擎就会制造一个新的request对象来代表这个请求。

response对象

是javax.servlet.http.HttpServletResponse类的实例

 服务器创建request对象时会同时创建用于响应这个客户端的response对象。

out对象

out对象是 javax.servlet.jsp.JspWriter 类的实例,用来在response对象中写入内容。

JspWriter类包含了大部分java.io.PrintWriter类中的方法

技术图片

 

 session对象

session对象是 javax.servlet.http.HttpSession 类的实例。

application对象

直接包装了servlet的ServletContext类的对象,是javax.servlet.ServletContext 类的实例

这个对象在JSP页面的整个生命周期中都代表着这个JSP页面。这个对象在JSP页面初始化时被创建,
随着jspDestroy()方法的调用而被移除。通过向application中添加属性,则所有组成您web应用
的JSP文件都能访问到这些属性。

相当于,servlet的Context

config对象

config对象是 javax.servlet.ServletConfig 类的实例,直接包装了servlet的ServletConfig类的对象

允许开发者访问Servlet或者JSP引擎的初始化参数,比如文件路径等。

pageContext对象

是javax.servlet.jsp.PageContext 类的实例,用来代表整个JSP页面。

 

page对象

这个对象就是页面实例的引用。它可以被看做是整个JSP页面的代表。

page 对象就是this对象的同义词。

 

jsp-if elas

int day = 2;%>

ifelse
    if (day ==1 |day ==7) {%>
        

Today is weekend

else {%>

Togy is not weekend

switch (day){ case 0: out.println("00000"); break; case 1: out.println("1111"); break; case 2: out.println("33333"); break; default: out.println("default"); }%>

 

js[请求

"text/html;charset=UTF-8" language="java" %>

http头部信息

http头部信息

"100%" border="1" align="center"> "blue"> Enumeration hname = request.getHeaderNames(); while (hname.hasMoreElements()){ String name = (String)hname.nextElement(); out.print("\n"); String value = request.getHeader(name); out.print("\n"); } %>
HeaderName Values
"+name+" "+value+"

re

技术图片

 

 

 

 

jsp响应

 

"text/html;charset=UTF-8" language="java" %>

自动时钟-respon
    

quans clock

response.setIntHeader("Refresh",1); String amorpm; Calendar calendar = new GregorianCalendar(); if(calendar.get(Calendar.AM_PM) ==0){ amorpm = "AM"; }else { amorpm = "PM"; } int h = calendar.get(Calendar.HOUR); int y = calendar.get(Calendar.YEAR); int m = calendar.get(Calendar.MINUTE); int s = calendar.get(Calendar.SECOND); String T = "current‘s Time " + y + " " + h +":"+m+":"+s +amorpm; out.print(T); %>

re

技术图片

 

 

 

 

设置http状态码方法

 HttpServletResponse 类中用来设置状态码的方法:

技术图片

 

 

// 设置错误代码,并说明原因
   response.sendError(407, "Need authentication!!!" );
%>

 

"text/html;charset=UTF-8" language="java" %>

重定向
    
        String url = "https://www.runoob.com/java/java-string-indexof.html";
        response.setStatus(response.SC_MOVED_TEMPORARILY);//设置响应码
        response.setHeader("Location",url);
    %>

 

 

 

jsp处理表单

 经常需要向服务器提交信息,并让后台程序处理。浏览器中使用 GET 和 POST 方法向服务器提交数据。

get:

GET方法将请求的编码信息添加在网址后面,网址与编码信息通过"?"号分隔。

GET方法是浏览器默认传递参数的方法,一些敏感信息,如密码等建议不使用GET方法。

用get时,传输数据的大小有限制 (注意不是参数的个数有限制),最大为1024字节。

post;

一些敏感信息,如密码等我们可以同过POST方法传递,post提交数据是隐式的。

POST提交数据是不可见的,GET是通过在url里面传递的(可以看一下你浏览器的地址栏)。

JSP使用getParameter()来获得传递的参数,getInputStream()方法用来处理客户端的二进制数据流的请求。

 

jsp读取表单

getParameter(): 使用 request.getParameter() 方法来获取表单参数的值。
getParameterValues(): 获得如checkbox类(名字相同,但值有多个)的数据。 接收数组变量 ,如checkobx类型
getParameterNames():该方法可以取得所有变量的名称,该方法返回一个Emumeration。
getInputStream():调用此方法来读取来自客户端的二进制数据流。

URL-GET

 


Title

name 

age 


 

http://localhost:8088/JSP/form/geturl.jsp?name=quan&age=35

技术图片

 

 

 

FROM-GET

 

最初访问的html文件


form-get
    

Name Age

geturl.jsp就是上面的文件

技术图片

 

 技术图片

 

 显示在URL中

 

FROM-POST

将上面表单的method改为post

 

Name Age

 

结果:

技术图片

 

 

checkbox数据传递到jsp程序

 

 

 

 

jsp-上传文件

 JSP可以通过HTML的form表单上传文件到服务器。 文件类型可以是文本文件、二进制文件、图像文件等其他任何文档。

form表单 method 属性必须设置为 POST 方法 ,不能使用 GET 方法。
form表单 enctype 属性需要设置为 multipart/form-data。
form表单 action 属性需要设置为提交到后台处理文件上传的jsp文件地址。例如 uploadFile.jsp 程序文件用
    来处理上传的文件。 上传文件元素需要使用
标签,属性设置为 type="file"。如果需要上传多个文件,可以
标签中设置不同的名称。

 

 

 

 

预先再web.xml设置上传文件的路径

 

file_upload_pathC:\Users\better.quan\Desktop\initArchetype Created Web Application

 

html表单:


FIle upload
    


 

后端处理表单:








    File file ;
    int maxFileSize = 5000 * 1024;
    int maxMemSize = 5000 * 1024;
    ServletContext context = pageContext.getServletContext();
    String filePath = context.getInitParameter("file_upload_path");

    // 验证上传内容了类型
    String contentType = request.getContentType();
    if ((contentType.indexOf("multipart/form-data") >= 0)) {

        DiskFileItemFactory factory = new DiskFileItemFactory();
        // 设置内存中存储文件的最大值
        factory.setSizeThreshold(maxMemSize);
        // 本地存储的数据大于 maxMemSize.
        factory.setRepository(new File("d:\\temp"));

        // 创建一个新的文件上传处理程序
        ServletFileUpload upload = new ServletFileUpload(factory);
        // 设置最大上传的文件大小
        upload.setSizeMax( maxFileSize );
        try{
            // 解析获取的文件
            List fileItems = upload.parseRequest(request);

            // 处理上传的文件
            Iterator i = fileItems.iterator();

            out.println("");
            out.println("");
            out.println("JSP File upload");
            out.println("");
            out.println("");
            while ( i.hasNext () )
            {
                FileItem fi = (FileItem)i.next();
                if ( !fi.isFormField () )
                {
                    // 获取上传文件的参数
                    String fieldName = fi.getFieldName();
                    String fileName = fi.getName();
                    boolean isInMemory = fi.isInMemory();
                    long sizeInBytes = fi.getSize();
                    // 写入文件
                    if( fileName.lastIndexOf("\\") >= 0 ){
                        file = new File( filePath ,
                                fileName.substring( fileName.lastIndexOf("\\"))) ;
                    }else{
                        file = new File( filePath ,
                                fileName.substring(fileName.lastIndexOf("\\")+1)) ;
                    }
                    fi.write( file ) ;
                    out.println("Uploaded Filename: " + filePath +
                            fileName + "
"); } } out.println(""); out.println("

"); }catch(Exception ex) { System.out.println(ex); } }else{ out.println(""); out.println("

"); out.println("

Servlet upload

"); out.println(""); out.println("

"); out.println("

No file uploaded

"); out.println("

"); out.println("

"); } %>

 

 技术图片

 

 

 re:

技术图片

 

 

 由于目录有中文,乱码了

 

 

 

 

 

 

 

filter过滤器

Servlet和JSP中的过滤器都是Java类,它们存在的目的如下:

  • 在请求访问后端资源时拦截它
  • 管理从服务器返回给客户端的响应

实现了javax.servlet.Filter 接口。javax.servlet.Filter接口定义了三个方法

技术图片

 

 

 和servlet的差不多

 

编写一个filter

import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import java.io.IOException;
import java.util.Date;

@WebFilter(filterName = "FilterJsp")
public class FilterJsp implements Filter {
    public void destroy() {
    }

    public void doFilter(ServletRequest req, ServletResponse resp, FilterChain ch


评论


亲,登录后才可以留言!