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页面的顶端
- <%@ page 属性1=“属性值”>
- 属性
- 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对象具有请求域,即完成客户端的请求之前,该对象一直有效。
方法:
- object getAttribute(String name) 返回指定属性的属性值
- Enumeration getAttributeNames() 返回所有可用属性名的枚举
- String getCharacterEncoding() 返回字符编码方式
- int getContentLength() 返回请求体的长度(以字节数)
- String getContentType() 得到请求体的MIME类型
- ServletInputStream getInputStream() 得到请求体中一行的二进制流
- String getParameter(String name) 返回name指定参数的参数值
- Enumeration getParameterNames() 返回可用参数名的枚举
- String[] getParameterValues(String name) 返回包含参数name的所有值的数组
- String getProtocol() 返回请求用的协议类型及版本号
- String getScheme() 返回请求用的计划名,如:http.https及ftp等
- String getServerName() 返回接受请求的服务器主机名
- int getServerPort() 返回服务器接受此请求所用的端口号
- BufferedReader getReader() 返回解码过了的请求体
- 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");%>
谢谢。
参考
- JSP——了解Jsp技术
- JSP技术(二)——JSP指令
- JSP技术(四)——JSP标签
- JSP 技术 —— 是敌是友
- JSP 技术 —— 是敌是友?
- JavaEE技术——JSP
- JSP入门——第4章JSP技术入门
- jsp技术(一)—— jsp简介与原理
- jsp 建站 jsp技术
- J2EE技术(六)——JSP
- Jsp学习——JavaBean技术
- Java Web技术——JSP
- JSP详细篇——JavaBean技术
- J2EE的十三个技术——JSP
- JavaWeb入门实战—JSP技术
- J2EE动态网页技术—JSP
- JSP技术
- JSP技术~~~~~~~~~
- 小四旋翼无人机学习日记(一)
- Python3从入门到放弃
- 接上文,终于解决了mamp安装扩展的问题.
- ssh中难理解的问题总结(一)-关于hibernate中的sessionFactory与http中的session
- 链表中倒数第k个结点
- JSP——了解Jsp技术
- 【Git】git的高级用法
- FTP连接时出现“227 Entering Passive Mode”
- ADT
- 卷积神经网络CNN
- Python—itchat小程序之——景点信息获取
- Jquery初识及用法
- jquery对象与dom对象
- Jedis介绍和入门案例