JSP相关技术

JSP相关技术

Web应用的基本结构
(1)构建一个Web应用
1.新建工程目录webTest
2.在webTest下新建WEB-INF目录和一个index.jsp文件
3.在WEB-INF下新建录入classes、lib目录和web.xml文件
	classes和lib的目录作用用于保存Web应用需要的Java类文件,区别是classes用于保存单个.class文件,而lib用与保存jar包
4.index.jsp文件内容
	<%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <html>
      <head>
        <title>Hello</title>
      </head>
      <body>
        WELCOME
      </body>
    </html>
5.web.xml文件内容
    <?xml version="1.0" encoding="UTF-8"?>

    <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">

    </web-app>
6.把工程放到Tomcat的apache-tomcat-9.0.36\webapps目录下,并启动Tomcat
7.在浏览器输入http://localhost:8080/webTest/index.jsp即可看到我们jsp页面的内容

(2)配置描述符web.xml

1.web.xml非常总要,每一个JavaWeb应用必须包含一个web.xml并且必须在WEB-INF路径下,在Servlet3.0开始,不是必须的了
2.JavaWeb绝大多的组件都是通过web.xml来配置管理的,Servlet3.0以后,可以使用web.xml配置也可以使用注解的方法配置Web组件
	配置JSP
	配置和管理Servlet,Listener,Filter等
3.web.xml 根元素数web-app元素。
	并且在Servlet3.0新增了metadata-complete="true"属性。当属性为true时,Web应用不会加载主键配置的Web组件
4.在web.xml中配置welcome-file-list,该元素包含多个welcome-file子元素,每个子元素配置一个首页.当浏览器访问应用时,系统会把该页面呈现出来
     ①新建一个跳转的index.html
	 ②配置web.xml
	
    <?xml version="1.0" encoding="UTF-8"?>

    <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">
     <welcome-file-list>
        <welcome-file>index.html</welcome-file>
     </welcome-file-list>
    </web-app>
	③http://localhost:8080/webTest 的时候就自动跳转到index.html	
JSP的基本原理
1.JSP的本质时Servlet,当用户指向指定的Servlet发生请求时,Servlet利用输出流动态生成HTML页面。
2.JSP页面由两部分组成
	静态部分:标准的HTML标签静态页面
	动态部分:受到Java程序的内容,这些内容由Java脚本动态生成
3.例子
    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <html>
      <head>
        <title>Hello</title>
      </head>
      <body>
        WELCOME
        <%
          for(int i = 0;i<10;i++){
            out.println("i" + i);
          }
        %>
      </body>
    </html>
4.当启动Tomcat后,我们打开apache-tomcat-9.0.36\work\Catalina\localhost\webTest\org\apache\jsp目录,我们会发现两个文件index_jsp.class和
index_jsp.java,这两个文件时Tomcat生成的,生成Jsp对应Servlet的Java文件文件和Class文件
5.Jsp运行原理如下
	当用户去第一次访问JSP时,先编译成Servlet,生成对应的html页面返回到用户。
JSP四个基本语法
(1)JSP注释
<%--JSP注释--%>
(2)JSP声明
1.JSP声明用于声明变量和方法
2.格式:<%! 声明部分 %>
(3)输出JSP表达式
<%=表达式%>
(4)JSP脚本
<%java代码%>
html
<%java代码%>
使用
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Hello</title>
</head>
<body>
WELCOME
<%--  我就是Jsp注释  --%>

<%!
    //声明一个整形的变量
    public int count;

    public String info() {
        return "aaaaa";
    }
%>
<%
    System.out.println(count++);
%>
<%
    System.out.println(info());
%>

<%--输出JSP表达式--%>
<%=count %>

<table bgcolor="#9999dd" border="1" width="300px">


<%
    for (int i = 0; i < 10; i++) {
%>

 <tr>
     <td>i = </td>
     <td><%=i%></td>
 </tr>
<%
    }
%>
</table>
</body>
</html>
JSP的三个编译指令
JSP的编译指令式通知JSP引擎的消息,它不直接生成输出。编译指令都是默认值
常见的编译指令由如下三个
(1)page:该指令式指针对当前页面的指令
(2)include:用于指定包含另一个页面
(3)taglib:用于定义和访问自定义标签
使用格式如下
<%@ 编译指令名 属性 ="属性值" %>
(1)page指令
page指令通常位于JSP页面的顶端,可以由多个page指令。


<%@ page contentType="text/html;charset=UTF-8"  <%--用于设定生成网页的文件格式和编码字符集--%>
         language="java"  <%--声明当前JSP页面使用的脚本语言的种类,因为页面时jsp页面,所以通常时java,默认也是java--%>
         extends=""  <%--指定jsp页面编译所产生的Java类所继承的父类,或所实现的接口--%>
         import=""   <%--用来导包。lang,servlet等包不需要显式导入--%>
         session=""  <%-- 这个jsp页面是否需要HTTP session--%>
         buffer=""  <%--指定输出缓冲区的大小。默认8k--%>
         autoFlush=""  <%--当输出缓冲区即将溢出时,是否需要强制输出缓冲区内容。设值为true时正常输出。false,则会在溢出是产生一个溢出--%>
         info=""  <%--设置jsp程序的信息,也可以看做其说明,可以通过Servlet.getServletInfo()方法获取该值--%>
         errorPage="" <%--指定错误处理页面,如果该也页面本身已是错误处理页面,则通过无需指定errorPage属性--%>
         pageEncoding=""  <%--指定生成网页的编码集--%>
         isErrorPage=""  <%--设置jsp页面是否为错误处理程序。--%>

%>
(2)include指令
可以将一个外部文件嵌入到当前jsp文件中,同时解析这个页面中的jsp语句。这是个静态的include语句,他会把目标页面的其他编译指令也包含进来。
<%@include file="index.jsp"%>
JSP的七个动作指令
动作指令于编译指令不同,编译指令是通知Servlet引擎的处理消息,而动作指令字还是运行时的动作。编译指令在将jsp编译为Servlet的时候起作用,而处理指令通常可以替换成jsp脚本,是jsp脚本的标准化
主要有以下7个
(1)forward指令
将页面响应转化到另外的页面。既可以转发静态html页面,也可以转发到动态的jsp页面
格式:
<jsp:forward page="index.jsp" >
<jsp:param name="name" value="wdd"/>
</jsp:forward>
跳转到页面可以通过request.getParamter("name")获取到属性
(2)include指令
include指令是一个动态的include指令,也用于包含某个页面,他不会包含某个页面,他不会导入被include页面编译指令,仅仅将被导入页面的内容插入本页面
格式:
<jsp:include page="index.html" flush="true">
    <jsp:param name="" value=""/>
</jsp:include>
flush属性指定输出缓存是否转移到被导入的文件中。
(3)userBean,setProperty,getProperty指令
这三个指令于javaBean有关
userBean用于在jsp页面中初始化一个Java实例
格式:
    <jsp:useBean id="name" class="classname" scope="" />
    page| javaBean在当前页面有用
    session| javaBean在本次session有效
    request| javaBean在本次请求有效
    application| 在本应用中一直有效
setPropert用于为JavaBean实例的属性设置值
格式
    <jsp:setProperty name="beanName" property="propername" value=""/>
    name确定要设定JavaBean的实例名
    property属性需要设定的属性名
    value属于要设定的属性值
getPropert用于输出JavaBean实例的属性
格式:
	<jsp:getProperty name="beanName" property="propername"/>
    name确定要输出JavaBean的实例名
    property属性需要输出的属性名	
(4)plugin指令
下载服务器端的JavaBean或Applet到客户端指向
(5)param指令
param指令用于设置属性值,在include,forward,plugin都会配合使用
JSP脚本的九个内置对象
jsp脚本包含9个内置对象,这9个内置对象都是Servlet API接口的实例,只是jsp对他们都进行了默认初始化,所以说他们都已经是对象了,可以直接使用
(1)application对象
是javax.servlet.ServletContext的实例,代表jsp所属的web应用本身。

1.让多个jsp、Servlet共享数据
	通过setAttribute(artname,value)方法将一个值设置成application的artname的属性,这个属性在整个web应用中有效,所有在jsp或者servlet中都有效
	通过getAttribute(artname)获取到这个属性
2.获取web应用配置参数
	通过application.getInitParameter(属性name)获取web.xml中的配置文件
	web.xml通过context-param元素配置
   使用方法:
   	(1)web.xml配置
   		<context-param>
        <param-name>url</param-name>
        <param-value>www.baidu.com</param-value>
    </context-param>
    (2)获取application.getInitParameter("url");
(2)config对象
是ServletConfig的实例,代表当前jsp配置信息。

(1)web.xml配置
  <servlet>
        <!--指定servlet的name-->
        <servlet-name>config</servlet-name>
        <!--指定那个jsp配置成servlet-->
        <jsp-file>/index.jsp</jsp-file>
        <!--为属性设置-->
        <init-param>
            <param-name>name</param-name>
            <param-value>dd</param-value>
        </init-param>
        <init-param>
            <param-name>age</param-name>
            <param-value>30</param-value>
        </init-param>
    </servlet>

    <!--将config Servlet配置到/config路径-->

    <servlet-mapping>
        <servlet-name>config</servlet-name>
        <url-pattern>/config</url-pattern>
    </servlet-mapping>
(2)jsp取值
<%
    String confName = config.getInitParameter("name");
    String confage = config.getInitParameter("age");

%>
<%=confage%>
<%=confName%>
(3)exceotion对象
是Throwable的实例,代表jsp脚本中产生的错误和异常,是jsp页面异常机制的一部分
(4)out对象
代表一个页面输出流,通常用于在页面上输出变量值及常量
(5)page对象
代表页面本身,没有多大用的地方。this表示
(6)pageContext对象
是PageContext类的实例,代表页面上下文,该对象主要用于访问jsp之间的共享数据,使用pageContext可以访问到page,request,session,applicarion范围的变量

getAttribute(String name):取得page范围内的name属性
getAttribute(String name,int scope) 取得指定范围内的属性
        PageContext.PAGE_SCOPE
        PageContext.REQUEST_SCOPE
        PageContext.SESSION_SCOPE
        PageContext.APPLICATION_SCOPE
setAttribute(name,value)设置属性,范围page
setAttribute(name,value,scope)设置属性,范围自定义
getRequest():获取request对象
getResponse():获取response对象
getServletConfig():获取config对象
getServletContext():获取application对象
getSession()获取session对象
(7)request对象
request是HttpServletRequest接口的实例,是非常总要的对象,每个对象封装这一次用户请求,并且所有请求参数都被封装在request对象中。因此request对象是获取请求参数的重要途经。
1.获取请求头。请求参数
几个重要的方法
getParameter(String paramterName);获取paramterName请求参数的值
getParameterMap();获取所有的参数名和参数值所组成Map对象
getParameterNames():获取所有参数名组成Enumeration对象

getHeader(String name):或者指定请求头的值
getHeaderNames();获取所有请求头的名称

setCharacterEncoding("GBK"):设置request编码所用的字符集
2.操作request范围的属性
setAttribute(String attName,Object value):将value设置为request范围的属性
getAttribute(String name):获取request范围的属性
3.执行forward或include
HttpServletRequest类提供一个getRequestDispatcher(String path)方法,其中path就是希望forward和include动作指令。

----------------------------------------------------------------------------------------
get方式请求:method属性是get或者空 会把请求的参数名和参数值转为字符串,可以在浏览器地址栏看到请求参数名和参数值
post方式请求:提交表单的方式发送,method属性是post
(8)response对象
reponse是HttpSerletResponse接口实例,代表服务器对客户端的响应,除此之外还可以来重定向请求,以及用于向客户端增加Cookie
1.response响应生成非字符响应
2.重定向
setRedirect(String path),请求重定义到path资源
3.增加Cookie
	①创建Coookie实例
	Cookie c = new Cookie("username",name);
	②设置Cookie生命期限
	c.setMaxAge(24*3600);
	③向客户端设置Cookie对象
	response.addCookie(c);
	
	使用Cookie:request.getCookeies();
(9)session对象
session是HttpSession的实例,这个对象代表用户会话,一次会话是从客户端浏览器连接服务器开始到呼呼的浏览器于服务器断开为止。
session范围内的属性可以在多个页面中共享,一旦关闭浏览器,就结束

两个常用方法
setAttribute(name,value); 设置session范围内的name属性的值value
getAttribute(name);获取范围session范围内的name的属性值。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值