JSP——了解Jsp技术

来源:互联网 发布:java架构师视频百度云 编辑:程序博客网 时间:2024/06/14 00:30

JSP——了解Jsp技术

JSP(java server pages)是一种动态网页技术与servlet相同在服务器端执行,它实现了在java当中使用html标签。

常见的动态网站开发技术

JSP java平台 开发大型的企业型的
Asp.net .Net平台,简单易学,拖拉拽可视化
Php LAMP:Linux + Apache + Mysql + Php

Jsp页面的元素构成

指令 表达式 声明…..

指令

page指令 位于jsp页面的顶端

  1. <%@ page 属性1=“属性值”>
  2. 属性
    • language Jsp页面使用的脚本语言
    • import 引用脚本语言的类文件
    • contentType Jsp页面的编码方式

include指令 外部文件嵌入到当jsp文件中

taglib指令 使用自定义标签

Jsp脚本

<% java代码 %>

Jsp注释

jsp注释<%-- --%>jsp脚本注释<%///* */%>

声明

jsp页面中定义变量或者方法 百分号后面有感叹号

<%! java代码 %><%!     String name = "大佬";    String getName(){        return name;    } %>

表达式

<%=表达式 %> //表达式不以分号结束<%=表达式; %>

调用声明的变量和方法
<%=name %>
<%=getName %>

生命周期

发出请求是否为第一次 第一次执行1 否则进入2
1. 把该jsp文件转换成一个servlet文件,这个servlet本质上是java类,编译成字节码文件,并执行jspInit()方法(jspinit方法只在编译期间执行,也就是只执行一次)
2. 生成的对应的字节码(存放在tomcat的work/catalina/localhost文件下有对应的servlet源代码.java和编译的字节码.class)
3. 解析 执行 jspservice(处理用户的请求)

jspservice方法被调用来处理客户端的请求。对每一个请求,Jsp引擎创建一个新的线程来处理该请求。
如果有多个客户端同时请求该jsp文件,则jsp引擎会创建多个线程,每个客户端请求对应一个线程。
多线曾的设计降低了对系统的资源需求,提高系统的并发量和响应时间。由于servlet常驻扎在内存,所以响应很快。

JSP一般的运行方式为:

当服务器启动后,当Web浏览器端发送过来一个页面请求时,Web服务器先判断是否是JSP页面请求。
1. 如果该页面只是一般的HTML/XML页面请求,则直接将HTML/XML页面代码传给Web浏览器端。
2. 如果请求的页面是JSP页面,则由JSP引擎检查该JSP页面

  • 如果该页面是第一次被请求、或不是第一次被请求但已被修改,则JSP引擎将此JSP页面代码转换成Servlet代码,然后JSP引擎调用服务器端的Java编译器javac.exe对Servlet代码进行编译,把它变成字节码(.class)文件,然后再调用JAVA虚拟机执行该字节码文件,然后将执行结果传给Web浏览器端。

  • 如果该JSP页面不是第一次被请求,且没有被修改过,则直接由JSP引擎调用JAVA虚拟机执行已编译过的字节码.class文件,然后将结果传送Web浏览器端。

采用JSP来表现页面,采用Servlet来完成大量的处理,Servlet扮演一个控制者的角色,并负责响应客户请求。
Servlet创建JSP需要的Bean和对象,根据用户的行为,决定将哪个JSP页面发送给用户。

JSP是如何执行的?

首先由浏览器向Web服务器提出访问JSP页面的请求(Request),然后由JSP容器根据请求,将用户所需的JSP页面转换成Servlet,产生的Servlet经过编译后生成类文件,然后再把类文件加载到内存进行执行。最后由Web服务器将执行结果响应(Response)给客户端浏览器。
MVC模式:Jsp + Servlet + JavaBean。M-JavaBean V-Jsp C-Servlet

JSP未出来前,servlet的解决办法

目前主流的Web开发语言,包括 JSP、PHP、ASP 等,都支持在HTML中插入代码,比 CGI 强大很多。
CGI 早已被程序员所抛弃,已经没有人写纯 CGI 程序了,一条一条地输出HTML代码是一件令人抓狂的事情。

查找jsp编译后的文件位置

tomcat的work/catalina/localhost文件下有对应的servlet源代码.java和编译的字节码.class
打开.java文件可以找到对应的jspInit jspService方法

Jsp重新编译时刻

Jsp页面修改更新一,就会重新执行生命周期

Jsp内置对象

Jsp内置对象是web容器创建的一组对象,不使用new关键字就可以使用内置对象
out对象可以对浏览器打印输出 out.println()
1. out —–> response.getwriter()
2. request —–> service(request)
3. response —–> service(response)
4. session ——> request.getsession()
5. application ——> getServletContext()
6. exception —–> Throwable
7. Page —–> this
8. PageContext —–> PageContext
9. Config —–> getServletConfig

out对象

out是JspWriter类的实例,是向客户端输出内容常用的对象
常用方法:
1. void println()
2. void clear()//flush后 执行这个方法后会报异常
3. void clearBuffer()//flush后 执行这个方法后不会报异常
4. void flush()
5. int getBufferSize()
6. int getRemaining()
7. boolean isAutoFlush()
8. void close()

request对象

内容:

客户端的请求信息被封装在request对象中,通过它才能了解到客户的需求,然后做出响应。
它是HttpServletRequest类的实例。request对象具有请求域,即完成客户端的请求之前,该对象一直有效。

方法:

  1. object getAttribute(String name) 返回指定属性的属性值
  2. Enumeration getAttributeNames() 返回所有可用属性名的枚举
  3. String getCharacterEncoding() 返回字符编码方式
  4. int getContentLength() 返回请求体的长度(以字节数)
  5. String getContentType() 得到请求体的MIME类型
  6. ServletInputStream getInputStream() 得到请求体中一行的二进制流
  7. String getParameter(String name) 返回name指定参数的参数值
  8. Enumeration getParameterNames() 返回可用参数名的枚举
  9. String[] getParameterValues(String name) 返回包含参数name的所有值的数组
  10. String getProtocol() 返回请求用的协议类型及版本号
  11. String getScheme() 返回请求用的计划名,如:http.https及ftp等
  12. String getServerName() 返回接受请求的服务器主机名
  13. int getServerPort() 返回服务器接受此请求所用的端口号
  14. BufferedReader getReader() 返回解码过了的请求体
  15. String getRemoteAddr() 返回发送此请求的客户端IP地址
    密码:<%=request.getAttribute("password")%><br>    请求体的MIME类型:<%=request.getContentType() %><br>    协议类型及版本号:<%=request.getProtocol() %><br>

request的中文乱码问题

解决URL传中文参数乱码的问题的方法:
1. 进入tomcat目录下conf\server.xml,找到Connector标签,在标签最后面加上一个属性URIEncoding=”utf-8”
2. 重启tomcat服务器
注:在提交jsp页面body标签内增加如下代码代码只能解决表单提交的中文乱码问题,无法解决URL传中文出现的乱码问题

<%    request.setCharacterEncoding("utf-8");%>

谢谢。
参考

原创粉丝点击