JSP

Posted tripleWen

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JSP相关的知识,希望对你有一定的参考价值。

tomcat解压后目录
   bin:可执行文件(startup.bat shutdown.bat)
   conf:配置文件(server.xml)
   lib:tomcat依赖的jar文件
   log:日志文件(记录出错等信息)
   temp:临时文件
   webapps:可执行的项目(将我们开发的项目放入该目录)
   work:存放由jsp翻译成的java,以及编译成的class文件
 
配置tomcat
   a.配置jdk (必须配置JAVA_HOME)
     JAVA_HOME CLASSPATH PATH
   b.配置CATALINA_HOME
 
访问Tomcat
在浏览器的地址栏中输入
Tomcat服务器的IP地址(或域名)、端口号、Web服务目录和JSP页面的名字
(项目根目录:静态资源文件放在根目录下的,外界能够直接请求获取 
                 即:浏览器可以直接访问WebContent中的文件

Web-INF:资源受保护,外界不能直接请求获取,只能通过服务器获取再响应给用户,只能通过请求转发来访问

注意:并不是任何的内部跳转都能访问WEB-INF;原因是:跳转有2种方式:请求转发、重定向)

 

修改端口号
conf配置文件server.xml中修改如下代码:
 <Connector port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" />
//双击bin/startup.bat启动tomcat
//常见错误:可能与其他服务的端口号冲突
//tomcat端口号默认8080(此端口号较为常见,容易冲突,建议修改此端口)
 
常见状态码
200:一切正常
300/301:页面重定向(跳转)
404:资源不存在
403:权限不足
500:服务器内部错误(代码有误)
HTTP状态码由三个十进制数字组成,第一个十进制数字定义了状态码的类型,后两个数字没有分类的作用。HTTP状态码共分为5种类型:
分类 分类描述
1** 信息,服务器收到请求,需要请求者继续执行操作 
2** 成功,操作被成功接收并处理
3** 重定向,需要进一步的操作以完成请求
4** 客户端错误,请求包含语法错误或无法完成请求 
5** 服务器错误,服务器在处理请求的过程中发生了错误 
 
设置默认的初始页面
在项目/WEB-INF/web.xml中编写
 <welcome-file-list>
     <welcome-file>index.html</welcome-file>
 </welcome-file-list>
 
虚拟路径:
(将项目复制到webapp目录下,缺点:服务器启动很慢、如果其中有一个项目是错误的就会导致整个服务器无法启动)
将web项目配置到webapps以外的目录
a.方式一
conf/server.xml中配置(主配置文件server.xml修改后,必须重新启动Tomcat服务器)
host标签中:
<Context docBase="实际路径" path="虚拟路径(绝对路径、相对路径[相对于webapps])"/>
(若存在多个<Context>,必须保证多个<Context>的path值不同)
(注:docBase的值不是项目路径,而是资源路径)
b.方式二
...\\apache-tomcat-8.5.34\\conf\\Catalina\\localhost
中新建“项目名.xml”内容为:

<Context docBase="...\\WebContent"/>

相当于

<Context path=demo docBase=”...\\WebContent/>

(path的值就是xml的名称 )

 
虚拟主机(了解)
例如:通过www.test.com访问本机
conf/server.xml
   <Engine name="Catalina" defaultHost="www.test.com">
   <Host name="www.test.com" appBase="实际路径">
       <Context docBase="实际路径" path="/"/>
   </Host>
C:\\Windows\\System32\\drivers\\etc\\host
   增加 127.0.0.1 www.test.com
流程: www.test.com -> host找映射关系 -> server.xml找Engine的defaultHost -> 通过"/"映射到实际路径>
 
JSP执行流程
   jsp - java(Servlet文件) - class
   ...\\apache-tomcat-8.5.34\\work\\Catalina\\localhost\\项目名\\org\\apache\\jsp
   JSP和Servlet可以相互转换
   第一次访问:服务端将jsp翻译成java,再将Java编译成class文件
   第二次访问:直接访问class文件(如果服务端代码修改了,将会再访问时重新翻译、编译)
 

配置tomcat运行时环境

       jsp<->servlet

a.将tomcat/lib中的servlet-api.jar加入项目的构建路径

b.右键项目 -> Build Path -> Add library -> Server Runtime

 

部署tomcat

在servers面板新建一个tomcat实例,再在该实例中部署项目(右键add)之后运行

注意:一般建议将eclipse中的tomcat与本地tomcat的配置信息保持一致:将eclipse中的tomcat设置为托管模式:第一次创建tomcat实例之后,双击,选择Server Location的第二项

 

统一字符集编码

编码分类:

设置jsp文件的遍历(jsp文件中的pageEncoding属性): jsp -> java

设置浏览器读取jsp文件的编码(jsp文件中content属性)

一般将上述设置成一致的编码,推荐使用UTF-8

文本编码:

               **将整个eclipse中的文件统一设置(推荐)

                     Window -> Preference ->  Jsp Files -> Encoding

               **设置某一个项目

               **设置单独文件

 

JSP的页面元素:

a.脚本Scriptlet

     <%  局部变量、java语句 %>

     <%! 全局变量、定义方法 %>

     <%= 输出表达式 %>

     (一般而言,修改web.xml、配置文件、java 需要重启Tomcat服务,修改jsp、html、css、js 不需要重启)

b.注释

    html注释  <!--    -->  可以被客户通过浏览器查看源码所观察到

    java注释  //   /* ……  */

    jsp注释    <%--   --%>

c.jsp指令
 
jsp标记
指令标记page
<%@ page 属性1=“属性1的值” 属性2=“属性2的值” … %>
//属性contentType的值:
在JSP页面中page指令只能为contentType指定一个值,以此确定响应的MIME类型.如:
contentType属性的值为“text/html;charset=GB2312”,客户的浏览器启用HTML解析器来解析执行收到的信息
contentType属性的值为“application/msword”,客户的浏览器将启动本地的Word应用程序来解析执行收到的信息
contentType属性的值为“image/jpeg”,客户的浏览器将启动图形解码器来解析执行收到的信息
//属性import的值:
为JSP页面引入java核心包中的类
//属性language的值:
language属性的默认值是"java"
//属性session:
session属性的值用于设置是否需要使用Tomcat服务器内置的session对象,默认属性值是true
//属性buffer:
内置输出流对象out负责将服务器的某些信息或运行结果发送到客户端显示,默认值是8KB
//属性autoFlush:
autoFlush属性指定out流的缓冲区被填满时,缓冲区是否自动刷新,默认值是true
//属性isThreadSafe
默认值是true,即一个客户机的线程没有执行完毕,CPU的使用权也可能要切换给其他线程
指令标记include  
(用嵌入方式处理文件,在编译阶段就处理所需文件,优点是页面的执行速度快)
<%@ include file="文件的URL" %> 作用是在JSP上出现该指令的位置处静态嵌入一个文件
(静态嵌入: Tomcat服务器在编译阶段就完成文件的嵌入操作)
动作标记include
(不使用嵌入方式来处理所需文件,在JSP页面运行时才处理文件,即当Tomcat服务器把JSP页面转译成java文件是,告诉java解释器,这个文件在java文件的字节码文件被加载执行时才被处理,缺点是执行速度要慢一些)
include动作标记要处理的文件如果不是JSP文件,就将文件的内容发送到客户机,由客户机负责执行并显示
格式:  <jsp:include page="文件的URL" />
    或     <jsp:include page="文件的URL">
                  子标记
             </jsp:include>
动作标记param
可以作为include、forward动作标记的子标记来使用
格式:  <jsp:param name="名字" value="指定给name属性的值" />
动作标记forward
作用:从该标记出现处停止当前JSP页面的继续执行,而转向执行forward动作标记中page属性所指定的JSP页面
格式:  <jsp:forward page="要转向的页面" />
    或     <jsp:iforward page="要转向的页面">
                  param子标记
             </jsp:include>
动作标记useBean
用来创建并使用一个JavaBean,Sun公司倡导的是:用HTML完成JSP页面的静态部分,用JavaBean完成动态部分
Tag文件与Tag标记
(Tag文件,在设计Web应用时,可以通过编写Tag文件来实现代码复用)
Tag文件的结构:Tag文件的扩展名为.tag的文本文件,其结构几乎与JSP文件相同
Tag标记: 格式:  <Tag文件的名字/>
                  或   <Tag文件的名字>
                                         标记体
                              <Tag文件的名字/>
Tag文件中的常用指令: tag、taglib、include、attribute、variable
Tag标记的使用:
(把这些Tag文件存放到Tomcat服务器指定的目录中,即存放到"Web服务目录\\WEB-INF\\tags"中,其中的WEB-INF和tags都是固定的子目录名称。tags或其下的子目录是专门存放Tag文件的,而一个Tag文件对应一个Tag标记,称tags或其下的子目录为一个标记库)
<taglib>指令标记引入标记库,一个JSP页面可以使用几个<taglib>指令标记引入若干个标记库
格式:  <%@taglib tagdir="自定义标记库的位置" prefix="前缀" %>
<前缀:Tag文件名字 />
例:将FirstTag.tag存放在tags目录中,而SecondTag存放在tags的子目录tagsTwo中
demo.jsp
<%@page contentType="text/html;Charset=GB2313" %>
<%@taglib tagdir="/WEB-INF/tags" prefix="com" %>
<%@taglib tagdir="/WEB-INF/tags/tagTwo" prefix="game" %>
<HTML>
    <BODY>
        <H3>以下是调用FirstTag.tag文件的效果</H3>
        <com:FirstTag />
        <H3>以下是调用SecondTag.tag文件的效果</H3>
        <game:SecondTag />
    </BODY>
</HTML>
 
 
JSP九大内置对象(自带的,不需要new也能使用的对象)
●request: 请求对象;存储"客户端向服务端发送的请求信息"
request对象的常见方法:
String getParameter(String name) 根据请求的字段名返回字段值value
 String[] getParameterValues(String name) 根据请求的字段名key,返回多个字段值value (checkbox)
void setCharacterEncoding("编码格式utf-8")
设置post方式的请求编码 (tomcat7以前默认iso-8859-1,tomcat8以后改为了utf-8)
getRequestDispatcher("b.jsp").forward(request,response) 请求转发的方式跳转页面 a -> b,可以获得数据,并且地址栏没有改变
getServerContext() 获取项目的ServletContext对象
(get与post请求方式的区别: 
a.  get方式在地址栏显示请求信息,但是地址栏能够容纳的信息有限,4-5KB;如果请求数据存在      大文件、图片等,会出现地址栏无法容纳全部的数据而出错)
b.  文件上传操作,必须是post
统一请求的编码request   (如果出现乱码,解决:)
     get方式请求,则 在server.xml中统一get方式的编码.. URIEncoding="UTF-8"
     post方式请求,request.setCharacterEncoding("utf-8");
●response: 响应对象
提供的方法:
void addCookie(Cookie cookie): 服务端向客户端增加cookie对象
void sendRedirect(String location) throw IOException: 页面跳转的一种方式(重定向),导致数据丢失
void setContentType(String type): 设置服务端响应的编码(设置服务端的contentType类型)
  请求转发 重定向
地址栏是否改变 不变 改变
是否保留第一次请求时的数据 保留 不保留
请求的次数 1 2
跳转发生的位置 服务端 客户端发出的第二次跳转
●session:  会话对象
a.session存储在服务端
b.session是在同一个客户请求时共享
c.实现机制:客户端第一次请求服务端时,服务端会产生一个session队形用于保存客户的信息,服务端会产生一个cookie,并且该cookie的name=JSESSIONED,value=服务端sessionid的值,然后服务端会再响应客户端的同时,将该cookie发送给客户端。客户端第2/n次请求服务端时,服务端会先用客户端cookie中的JSESSIONID去服务端的session中匹配sessionid。
Cookie (存在客户端,不是内置对象): Cookie是由服务端生成的,再发送给客户端保存,相当于本地缓存的作用
Cookie 由 javax.servlet.http.Cookie 类产生的
public Cookie (String name,String value)
String getName(): 获取name
String getValue(): 获取value
void setMaxAge (int expiry): 最大有效期(秒)
服务端准备Cookie:  response.addCookie(Cookie cookie)
页面跳转(转发,重定向)
客户端获取Cookie:  request.getCookie( );
不能直接获取某一个单独对象,只能一次性将全部的cookie拿到
通过F12可以发现,除了自己设置的Cookie对象外,还有一个name为JSESSIONID的cookie
(建议cookie只保存英文数字,否则需要进行编码)
session方法:
String getId() :  获取sessionId
boolean isNew() :  判断是否是新用户
void invalidate() :  使session失效
void setMaxInactiveInterval(秒) :  设置最大有效非活动时间
int getMaxInactiveInterval() :  获取最大有效非活动时间
void  setAttribute()
Object getAttribute()
●application:  全局对象
String getContextPath() :  虚拟路径
String getRealPath(String name): 绝对路径(虚拟路径相对的绝对路径),参数是虚拟路径
●out: 输出对象,向客户端输出内容
page: 当前JSP页面对象(相当于java中的this)
pageContext : JSP页面容器
●config: 配置对象
exception: 异常对象
JSP作用域范围从小到大: (作用域:对象的声明周期和可访问性)
pageContext : 当前页面有效
request: 同一次请求有效 (请求转发后有效,重定向后无效)
session: 同一次会话有效 (无论怎么跳转都有效,关闭/切换浏览器后无效)
application : 整个项目运行期间有效  (切换浏览器仍然有效,关闭服务/其他项目无效)
 

<wiz_tmp_tag id="wiz-table-range-border" contenteditable="false" style="display: none;">





以上是关于JSP的主要内容,如果未能解决你的问题,请参考以下文章

JSP基础

day06-jsp

jsp

JSP语法

JSP 语法

JSP 基础语法