JSP_1th_第一个JSP程序
来源:互联网 发布:大数据时代 pdf 编辑:程序博客网 时间:2024/05/01 13:56
一、JSP(Java Server Page)
1、为什么需要JSP?
Servlet:
优点:逻辑处理方便。
缺点:页面表现麻烦。
JSP:
优点:页面表现方便。
缺点:逻辑处理麻烦。
所以要互补使用,一般项目采用:
jsp(页面表现)+servlet(业务逻辑)+javabean(数据处理)
(当然,学了ssh后,可以采用ssh框架)
2、举例
新建一个Web项目,取名为TestJSP,在其WebContent目录下,新建一个1.jsp文件,写入如下html代码:
第一次访问某jsp文件时,才会对该jsp文件进行编译。(这也是为什么访问一个未被访问过的jsp会比较慢,而第二次访问就很快的原因)
JSP编译后生成的Java文件和Java类文件(即Servlet)都存放在Tomcat服务器的work目录下,在我的环境中是:
...\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\work\Catalina\localhost\MyJSP\org\apache\jsp目录下,有一个_1_jsp.java和_1_jsp.class
在_1_jsp.java文件中,_1_jsp这个类继承了HttpJspBase,可以猜测HttpJspBase继承了HttpServlet:
_1_jsp中有几个方法,其中最重要的方法是public void _jspService():
可以看到我们写的1.jsp中的两个标签变成了:
jsp引擎,将jsp文件转译为上述形式的java文件。
3、服务器内部是怎样处理用户对jsp文件的请求?
在C:\apache-tomcat-8.0.17\conf\web.xml中有如下代码:
二、JSP本质
1、JSP是一种动态网页技术。
1)动态生成网页数据,而不是由动态效果的网页。
2)常见的几种动态网页技术:
①JSP(Java Server Page)
②ASP(Active Server Page)
③PHP(Hypertext Preprocessor)超文本预处理语言
2、jsp就是servlet,所以jsp也是java类,通过jsp引擎把jsp转译成了servlet。
总结:
JSP工作过程:
①浏览器输入:http://localhost/MyJSP/1.jsp
②Tomcat收到*.jsp请求,则会到org.apache.jasper.servlet.JspServlet处理(Tomcat的web.html中有配置)
③JspServlet调用相应的java类,即jsp引擎根据1.jsp生成的java类(位于Tomcat目录work下面或是Eclipse的工程目录的work目录下:_1_jsp.java、_1_jsp.class)。
④执行_1_jsp.class,将HTML数据输出给Tomcat,Tomcat再将这些数据输出给客户端。
二、语法
之前,我们在1.jsp文件中随意写了两个标签,而没有写<html></html>、<body></body>等标签,就能被转义为对应的html文件,说明不论在jsp文件中写什么,都会被转义为文档的内容,如果直接写java代码,那代码的内容就会被显示在页面上,因为在jsp引擎来看,java代码就是没有任何语法意义的普通字符串。
页面效果:
1、为什么需要JSP?
Servlet:
优点:逻辑处理方便。
缺点:页面表现麻烦。
JSP:
优点:页面表现方便。
缺点:逻辑处理麻烦。
所以要互补使用,一般项目采用:
jsp(页面表现)+servlet(业务逻辑)+javabean(数据处理)
(当然,学了ssh后,可以采用ssh框架)
2、举例
新建一个Web项目,取名为TestJSP,在其WebContent目录下,新建一个1.jsp文件,写入如下html代码:
<strong>aaaaaaaa</strong><p>bbbbbbbb</p>
这里就不再讲怎么部署项目,启动服务器的过程了,在浏览器访问:http://localhost:8080/TestJSP/1.jsp(在WebContent目录下的文件都位于Web项目的根目录下,jsp也是如此,不像Servlet一样还要指定<url-pattern></url-pattern>),页面效果:
可能第一印象都会觉得jsp就是html,好像没啥区别。
其实jsp和servlet的关系很密切:jsp就是servlet。
jsp是无法直接在页面被显示出来的,之所以会显示出jsp的部分是因为jsp经过转换变成了servlet,而servlet通过resp.getWriter().println()即可以字符串形式打印出html代码)
第一次访问某jsp文件时,才会对该jsp文件进行编译。(这也是为什么访问一个未被访问过的jsp会比较慢,而第二次访问就很快的原因)
JSP编译后生成的Java文件和Java类文件(即Servlet)都存放在Tomcat服务器的work目录下,在我的环境中是:
...\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\work\Catalina\localhost\MyJSP\org\apache\jsp目录下,有一个_1_jsp.java和_1_jsp.class
在_1_jsp.java文件中,_1_jsp这个类继承了HttpJspBase,可以猜测HttpJspBase继承了HttpServlet:
public final class _1_jsp extends org.apache.jasper.runtime.HttpJspBase
_1_jsp中有几个方法,其中最重要的方法是public void _jspService():
public void _jspService(final javax.servlet.http.HttpServletRequest request,final javax.servlet.http.HttpServletResponse response)throws java.io.IOException, javax.servlet.ServletException {final java.lang.String _jspx_method = request.getMethod();if (!"GET".equals(_jspx_method) && !"POST".equals(_jspx_method) && !"HEAD".equals(_jspx_method)&& !javax.servlet.DispatcherType.ERROR.equals(request.getDispatcherType())) {response.sendError(HttpServletResponse.SC_METHOD_NOT_ALLOWED, "JSPs only permit GET POST or HEAD");return;}final javax.servlet.jsp.PageContext pageContext;javax.servlet.http.HttpSession session = null;final javax.servlet.ServletContext application;final javax.servlet.ServletConfig config;javax.servlet.jsp.JspWriter out = null;final java.lang.Object page = this;javax.servlet.jsp.JspWriter _jspx_out = null;javax.servlet.jsp.PageContext _jspx_page_context = null;try {response.setContentType("text/html");pageContext = _jspxFactory.getPageContext(this, request, response, null, true, 8192, true);_jspx_page_context = pageContext;application = pageContext.getServletContext();config = pageContext.getServletConfig();session = pageContext.getSession();out = pageContext.getOut();_jspx_out = out;out.write("<strong>aaaaaaaa</strong>\r\n");out.write("<p>bbbbbbbb</p>");} catch (java.lang.Throwable t) {if (!(t instanceof javax.servlet.jsp.SkipPageException)) {out = _jspx_out;if (out != null && out.getBufferSize() != 0)try {if (response.isCommitted()) {out.flush();} else {out.clearBuffer();}} catch (java.io.IOException e) {}if (_jspx_page_context != null)_jspx_page_context.handlePageException(t);elsethrow new ServletException(t);}} finally {_jspxFactory.releasePageContext(_jspx_page_context);}}总结:
可以看到我们写的1.jsp中的两个标签变成了:
out.write("<strong>aaaaaaaa</strong>\r\n");out.write("<p>bbbbbbbb</p>");也就是说jsp中写的html代码并不能直接显示到页面中,而是要经过jsp引擎转译为servlet,通过servlet来out.write()出jsp中的内容。
jsp引擎,将jsp文件转译为上述形式的java文件。
3、服务器内部是怎样处理用户对jsp文件的请求?
在C:\apache-tomcat-8.0.17\conf\web.xml中有如下代码:
... <servlet> <servlet-name>jsp</servlet-name> <servlet-class>org.apache.jasper.servlet.JspServlet</servlet-class> <init-param> <param-name>fork</param-name> <param-value>false</param-value> </init-param> <init-param> <param-name>xpoweredBy</param-name> <param-value>false</param-value> </init-param> <load-on-startup>3</load-on-startup> </servlet>... <!-- The mappings for the JSP servlet --> <servlet-mapping> <servlet-name>jsp</servlet-name> <url-pattern>*.jsp</url-pattern> <url-pattern>*.jspx</url-pattern> </servlet-mapping>即对于所有的jsp请求,服务器都会调用org.apache.jasper.servlet.JspServlet类对象,然后根据请求的名字1.jsp去找相对应的_1_jsp.java文件,如果还没有这个文件,建一个,如果已经有了,直接用。
二、JSP本质
1、JSP是一种动态网页技术。
1)动态生成网页数据,而不是由动态效果的网页。
2)常见的几种动态网页技术:
①JSP(Java Server Page)
②ASP(Active Server Page)
③PHP(Hypertext Preprocessor)超文本预处理语言
2、jsp就是servlet,所以jsp也是java类,通过jsp引擎把jsp转译成了servlet。
总结:
JSP工作过程:
①浏览器输入:http://localhost/MyJSP/1.jsp
②Tomcat收到*.jsp请求,则会到org.apache.jasper.servlet.JspServlet处理(Tomcat的web.html中有配置)
③JspServlet调用相应的java类,即jsp引擎根据1.jsp生成的java类(位于Tomcat目录work下面或是Eclipse的工程目录的work目录下:_1_jsp.java、_1_jsp.class)。
④执行_1_jsp.class,将HTML数据输出给Tomcat,Tomcat再将这些数据输出给客户端。
二、语法
之前,我们在1.jsp文件中随意写了两个标签,而没有写<html></html>、<body></body>等标签,就能被转义为对应的html文件,说明不论在jsp文件中写什么,都会被转义为文档的内容,如果直接写java代码,那代码的内容就会被显示在页面上,因为在jsp引擎来看,java代码就是没有任何语法意义的普通字符串。
所以要告诉JSP引擎这是一段Java代码,使用<%开头,以%>结束来把一段Java代码添加到jsp的html代码中。
在写第一个jsp程序之前,先来做点准备工作,因为我们在eclipse中做后台开发,此时也要写一些前端的代码,而eclipse对前端代码编写效率不高,为了让eclipse能更加高效的编辑前端代码,首先安装一款插件:Emmet。本来是想安装Aptana的,但是搞VPN翻墙去找官网的插件也是无法访问,报503,可能服务器在维修还是怎的,Emmet不需要翻墙也可以下载,具体怎样安装,百度eclipse安装emmet插件。
安装完后会提示重启eclipse,重启后就可以使用Tab键作为快捷键来写html、css了,但是jsp里好像不支持,这是因为在jsp中快捷键默认是ctrl+e,为了方便,在eclipse中找window - preferences,如下图所示输入em,找到emmet,然后把英文状态下的逗号和jsp加到那栏后面,点击确定,无需重启eclipse,直接就可以在jsp文件中敲html代码。
在first.jsp第一行敲一个感叹号!,然后敲Tab,html的doc、head和body都出来了。
完成如下代码:
<!doctype html><html lang="en"><head><meta charset="UTF-8" /><title>first JSP</title></head><body><%out.println("Hello World");out.println(new java.util.Date());%></body></html>
页面效果:
总结:
①JSP本身就是一个servlet。
②直接在HTML中内嵌JSP代码。
③JSP程序由JSP引擎先将它转换成Servlet代码,接着将它编译成类文件载入执行。
④只有当客户端第一次请求JSP时,才需要将其转换、编译。
1 0
- JSP_1th_第一个JSP程序
- 第一个JSP程序
- 第一个jsp程序
- 第一个jsp程序
- 第一个JSP程序
- 第一个JSP程序
- 第一个JSP程序
- 第一个jsp程序
- 书写第一个jsp程序
- JSP介绍第一个JSP程序
- 第一个JSP程序(JSP入门)
- 第一个JSP+JavaBean+Tomcat的程序
- 我的第一个JSP程序 eclipse
- 我的第一个jsp程序
- 第一个Jsp程序,Hello World
- Jsp&Servelet 学习笔记-第一个jsp程序介绍
- 【JavaEE】第一个JSP程序--了解JSP执行过程
- JSP与JavaMail(3)---试着写第一个邮件发送程序
- 新版blast+的使用简介
- 数据结构 二叉树的层序遍历
- Java 集合系列01之 总体框架
- Canvas常用语法详解
- imx6sl recovery.img 解包和打包
- JSP_1th_第一个JSP程序
- bootstrap时间插件【带时分秒和不带时分秒的两个插件】
- PendingIntent 传值 需注意,以及其四个flag常量
- thinkphp3.2 怎么读取config.php 的内容, 并且显示在我们实际应用当中
- php 将秒数转换为时间(年、天、小时、分、秒)
- struts2-spring-hibernate实现员工的增删查功能
- 矩阵变换
- 不要相信缘分和心
- 【PHP】PHP中对于Redis的操作。