jsp学习(Tomcat服务器+myeclipse)

阅读前提:了解Tomcat服务器和Servlet

在web开发中我们可以通过Servlet的Response对象对浏览器输出我们的网页内容

这样虽然可以进行网页输出,但是代码编写极其繁杂,冗余很多,所以jsp就出现了;

 

先描述一下现象,首先我们可以在myeclipse新建Manager的web project,在WebRoot下会有index.jsp文件;

 1 <%@ page language="java" import="java.util.*" pageEncoding="ISO-8859-1"%>
 2 <%
 3 String path = request.getContextPath();
 4 String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
 5 %>
 6
 7 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
 8 <html>
 9   <head>
10     <base href="<%=basePath%>">
11
12     <title>My JSP ‘index.jsp‘ starting page</title>
13     <meta http-equiv="pragma" content="no-cache">
14     <meta http-equiv="cache-control" content="no-cache">
15     <meta http-equiv="expires" content="0">
16     <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
17     <meta http-equiv="description" content="This is my page">
18     <!--
19     <link rel="stylesheet" type="text/css" href="styles.css">
20     -->
21   </head>
22
23   <body>
24     This is my JSP page. <br>
25   </body>
26 </html>

index.jsp

开启服务器后我们可以在浏览器访问localhost:8080/mg/index.jsp(mg是我的虚拟项目名)

浏览器页面为:

原理:根据上面的描述似乎我们可以通过 "/项目虚拟名/jsp文件路径" 的方式来访问我们的jsp文件。其实并不是的,我们访问的根本不是我们项目截图看到的index.jsp。

在我们的Tomcat服务器的conf文件夹下的web.xml文件中,有这样几句代码:

所以对于我们浏览器请求中所有的以 .jsp 结尾的请求其实真实访问的都是org.apache.jasper.servlet.JspServlet这个Servlet,那这个Servelt拿到请求后干了什么事情呢?其实主要的就是找到请求的index.jsp文件,将这个jsp文件转译成一个Servlet,并请求给这个Servlet进行处理。

如何转译:1,将所有html语句转成上面第一张图那样的write语句输出。2,保留jsp原有的java代码。

  1 /*
  2  * Generated by the Jasper component of Apache Tomcat
  3  * Version: Apache Tomcat/7.0.56
  4  * Generated at: 2019-08-03 06:25:27 UTC
  5  * Note: The last modified time of this file was set to
  6  *       the last modified time of the source file after
  7  *       generation to assist with modification tracking.
  8  */
  9 package org.apache.jsp;
 10
 11 import javax.servlet.*;
 12 import javax.servlet.http.*;
 13 import javax.servlet.jsp.*;
 14 import java.util.*;
 15
 16 public final class Login_jsp extends org.apache.jasper.runtime.HttpJspBase
 17     implements org.apache.jasper.runtime.JspSourceDependent {
 18
 19   private static final javax.servlet.jsp.JspFactory _jspxFactory =
 20           javax.servlet.jsp.JspFactory.getDefaultFactory();
 21
 22   private static java.util.Map<java.lang.String,java.lang.Long> _jspx_dependants;
 23
 24   private javax.el.ExpressionFactory _el_expressionfactory;
 25   private org.apache.tomcat.InstanceManager _jsp_instancemanager;
 26
 27   public java.util.Map<java.lang.String,java.lang.Long> getDependants() {
 28     return _jspx_dependants;
 29   }
 30
 31   public void _jspInit() {
 32     _el_expressionfactory = _jspxFactory.getJspApplicationContext(getServletConfig().getServletContext()).getExpressionFactory();
 33     _jsp_instancemanager = org.apache.jasper.runtime.InstanceManagerFactory.getInstanceManager(getServletConfig());
 34   }
 35
 36   public void _jspDestroy() {
 37   }
 38
 39   public void _jspService(final javax.servlet.http.HttpServletRequest request, final javax.servlet.http.HttpServletResponse response)
 40         throws java.io.IOException, javax.servlet.ServletException {
 41
 42     final javax.servlet.jsp.PageContext pageContext;
 43     javax.servlet.http.HttpSession session = null;
 44     final javax.servlet.ServletContext application;
 45     final javax.servlet.ServletConfig config;
 46     javax.servlet.jsp.JspWriter out = null;
 47     final java.lang.Object page = this;
 48     javax.servlet.jsp.JspWriter _jspx_out = null;
 49     javax.servlet.jsp.PageContext _jspx_page_context = null;
 50
 51
 52     try {
 53       response.setContentType("text/html;charset=utf-8");
 54       pageContext = _jspxFactory.getPageContext(this, request, response,
 55                   null, true, 8192, true);
 56       _jspx_page_context = pageContext;
 57       application = pageContext.getServletContext();
 58       config = pageContext.getServletConfig();
 59       session = pageContext.getSession();
 60       out = pageContext.getOut();
 61       _jspx_out = out;
 62
 63       out.write(‘\r‘);
 64       out.write(‘\n‘);
 65
 66 String path = request.getContextPath();
 67 String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
 68
 69       out.write("\r\n");
 70       out.write("\r\n");
 71       out.write("<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\r\n");
 72       out.write("<html xmlns=\"http://www.w3.org/1999/xhtml\">\r\n");
 73       out.write("<head>\r\n");
 74       out.write("    <base href=\"");
 75       out.print(basePath);
 76       out.write("\">\r\n");
 77       out.write("<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\" />\r\n");
 78       out.write("<title>欢迎登录后台管理系统</title>\r\n");
 79       out.write("<link href=\"css/style.css\" rel=\"stylesheet\" type=\"text/css\" />\r\n");
 80       out.write("<script language=\"JavaScript\" src=\"js/jquery.js\"></script>\r\n");
 81       out.write("<script src=\"js/cloud.js\" type=\"text/javascript\"></script>\r\n");
 82       out.write("\r\n");
 83       out.write("<script language=\"javascript\">\r\n");
 84       out.write("\t$(function(){\r\n");
 85       out.write("    $(‘.loginbox‘).css({‘position‘:‘absolute‘,‘left‘:($(window).width()-692)/2});\r\n");
 86       out.write("\t$(window).resize(function(){  \r\n");
 87       out.write("    $(‘.loginbox‘).css({‘position‘:‘absolute‘,‘left‘:($(window).width()-692)/2});\r\n");
 88       out.write("    })  \r\n");
 89       out.write("});  \r\n");
 90       out.write("</script> \r\n");
 91       out.write("\r\n");
 92       out.write("</head>\r\n");
 93       out.write("\r\n");
 94       out.write("<body style=\"background-color:#df7611; background-image:url(images/light.png); background-repeat:no-repeat; background-position:center top; overflow:hidden;\">\r\n");
 95       out.write("\r\n");
 96       out.write("\r\n");
 97       out.write("\r\n");
 98       out.write("    <div id=\"mainBody\">\r\n");
 99       out.write("      <div id=\"cloud1\" class=\"cloud\"></div>\r\n");
100       out.write("      <div id=\"cloud2\" class=\"cloud\"></div>\r\n");
101       out.write("    </div>  \r\n");
102       out.write("\r\n");
103       out.write("\r\n");
104       out.write("<div class=\"logintop\">    \r\n");
105       out.write("    <span>欢迎登录后台管理界面平台</span>      \r\n");
106       out.write("    </div>\r\n");
107       out.write("    \r\n");
108       out.write("    <div class=\"loginbody\">\r\n");
109       out.write("    \r\n");
110       out.write("    <span class=\"systemlogo\"></span> \r\n");
111       out.write("     <br />\r\n");
112       out.write("     ");
113
114          Object obj=request.getAttribute("flag");
115          if(obj!=null){
116
117       out.write("\r\n");
118       out.write("     <div style=\"text-align:center;\">\r\n");
119       out.write("     <span style=\"font-size:15px;color:darkred;font-weight:bold;\">用户名或密码错误</span>\r\n");
120       out.write("     </div>  \r\n");
121       out.write("      ");
122 }
123       out.write("\r\n");
124       out.write("      \r\n");
125       out.write("      ");
126
127          Object pwd=session.getAttribute("pwd");
128          if(pwd!=null){
129
130       out.write("\r\n");
131       out.write("     <div style=\"text-align:center;\">\r\n");
132       out.write("     <span style=\"font-size:15px;color:darkred;font-weight:bold;\">密码修改成功</span>\r\n");
133       out.write("     </div>  \r\n");
134       out.write("      ");
135 }
136           session.removeAttribute("pwd");
137
138       out.write("\r\n");
139       out.write("       \r\n");
140       out.write("       \r\n");
141       out.write("       ");
142
143          Object reg=session.getAttribute("reg");
144          if(reg!=null){
145
146       out.write("\r\n");
147       out.write("     <div style=\"text-align:center;\">\r\n");
148       out.write("     <span style=\"font-size:15px;color:darkred;font-weight:bold;\">注册成功</span>\r\n");
149       out.write("     </div>  \r\n");
150       out.write("      ");
151 }
152           session.removeAttribute("pwd");
153
154       out.write("\r\n");
155       out.write("    <div class=\"loginbox loginbox2\">\r\n");
156       out.write("    <form action=\"user\" method=\"post\">\r\n");
157       out.write("    <input name=\"oper\" type=\"hidden\" value=\"login\"/>\r\n");
158       out.write("    <ul>\r\n");
159       out.write("    <li><input name=\"uname\" type=\"text\" class=\"loginuser\" placeholder=\"用户名\"/></li>\r\n");
160       out.write("    <li><input name=\"pwd\" type=\"password\" class=\"loginpwd\" placeholder=\"密码\"/></li>\r\n");
161       out.write("    <li class=\"yzm\">\r\n");
162       out.write("    <span><input name=\"\" type=\"text\" placeholder=\"验证码\"/></span><cite>X3D5S</cite> \r\n");
163       out.write("    </li>\r\n");
164       out.write("    <li><input name=\"\" type=\"submit\" class=\"loginbtn\" value=\"登录\"    /><label><a href=\"/mg/user/reg.jsp\">注册</a></label><label><a href=\"#\">忘记密码?</a></label></li>\r\n");
165       out.write("    </ul>\r\n");
166       out.write("    </form>\r\n");
167       out.write("    \r\n");
168       out.write("    </div>\r\n");
169       out.write("    \r\n");
170       out.write("    </div>\r\n");
171       out.write("    \r\n");
172       out.write("    \r\n");
173       out.write("    <div class=\"loginbm\">版权所有  ZDL <a href=\"http://www.uimaker.com\">uimaker.com</a>  仅供学习交流,勿用于任何商业用途</div>\r\n");
174       out.write("\t\r\n");
175       out.write("    \r\n");
176       out.write("</body>\r\n");
177       out.write("\r\n");
178       out.write("</html>\r\n");
179     } catch (java.lang.Throwable t) {
180       if (!(t instanceof javax.servlet.jsp.SkipPageException)){
181         out = _jspx_out;
182         if (out != null && out.getBufferSize() != 0)
183           try {
184             if (response.isCommitted()) {
185               out.flush();
186             } else {
187               out.clearBuffer();
188             }
189           } catch (java.io.IOException e) {}
190         if (_jspx_page_context != null) _jspx_page_context.handlePageException(t);
191         else throw new ServletException(t);
192       }
193     } finally {
194       _jspxFactory.releasePageContext(_jspx_page_context);
195     }
196   }
197 }

index.jsp转译的Servlet

为什么不直接转译html文件?因为html代码都是写死的,但jsp文件可以写java代码保留到Servlet中执行,可以做逻辑判断,循环输出,获取Session数据等,保留了Servlet编程的灵活性。

下面开始介绍jsp的使用方法:

  1,page指令:配置jsp转成的Servlet的一些参数,还有一些Response对象的参数;

    格式:<%@page 属性名="属性值" 属性名="属性值"...%>

    属性: language:声明jsp要被转译的语言。

        import:声明转译的java文件要导入的包,不同的包使用逗号隔开。
        pageEncoding:设置jsp文件的数据编码格式。
        contentType="text/html; charset=utf-8" 设置jsp数据响应给浏览器时,浏览器的解析和编码格式。
        session:设置转译的servlet中是否开启session支持,默认开启,true表示开启。false表示关闭。
        errorPage:设置jsp运行错误跳转的页面.
        extends:设置jsp转译的java文件要继承的父类(包名+类名)。

  2,局部代码块:会原样转换到转译的Servlet的Service方法中(其实是_JspService方法,但只是换个名字,作用都一样,就当做Servlet方法来理解就好了)

    格式:<% java代码%>   

        <%
            int a=2;
            if(a>3){
        %>
            <b>jsp学习很简单</b>
        <%}%>          

就上面的代码中只有当a大于3时,<b>jsp学习很简单</b>才会输出到客户端,所以可以做逻辑判断了,输出的html不再是程序员写死的了。但是上面的代码很显然有书写麻烦,阅读困难的缺点。

  3,全局代码块:区别于局部代码块写到service方法体中,全局代码块是写到Servlet类中,方法体外,作为全局变量,在程序的一开始就执行;

  格式:<%!全局代码%>

  4,脚本段语句:帮助我们快速的获取变量或者方法的返回值作为数据响应给浏览器。

  格式:<%=变量名或者方法%>

  其实<%=str%>就相当于<%out.write(str);%>

  注意:不要在变量名或者方法后使用分号。

  5,静态引入:会将引入的jsp文件和当前jsp文件转译成一个java(Servlet)文件使用

  格式:<%@include file="要引入的jsp文件的路径" %>

  注意:1,静态引入的jsp文化不会单独转译成java(Servlet)文件。因为两个jsp会被了一个Servlet,但采用的是主动引用的jsp的名字命名Servelt;2,当前文件和静态引入的jsp文件中不能够使用java代码块声明同名变量。

  6,动态引入:会将引入的jsp文件单独转译,在当前文件转译好的java文件中调用引入的jsp文件的转译文件。在网页中显示合并后的显示效果。

  格式:<jsp:include page="要引入的jsp文件的路径"></jsp:include>

  注意:动态引入允许文件中声明同名变量。

  7,转发标签forward:转到别的jsp

  格式:<jsp:forward page="要转发的jsp文件的路径"></jsp:forward>

  特点:一次请求,地址栏信息不改变。

  注意:在转发标签的两个标签中间除了写<jsp:param name="str" value="aaa" />子标签不会报错,其他任意字符都会报错。
    <jsp:param name="str" value="aaa" />
    name属性为附带的数据的键名
    value为附带的数据内容
    name和value会将数据以?的形式拼接在转发路径的后面。

  8,jsp的九大内置对象:

  内置对象:jsp文件在转译成其对应的Servlet文件的时候自动生成的并声明的对象。我们在jsp页面中直接使用即可。

  注意:内置对象在jsp页面中使用,使用局部代码块或者脚本段语句来使用。不能够在全局代码块中使用。
  内容:九个对象(其实基本跟Servlet的对象差不多)
    pageContext:页面上下文对象,封存了其他内置对象。封存了当前jsp的运行信息。
    注意:每个Jsp文件单独拥有一个pageContext对象。
    作用域:当前页面。
    request:封存当前请求数据的对象。
    session:此对象用来存储用户的不同请求的共享数据的。
    application:也就是ServletContext对象,一个项目只有一个。存储用户共享数据的对象,以及完成其他操作。
    response:响应对象,用来响应请求处理结果给浏览器的对象。设置响应头,重定向。
    out:响应对象,Jsp内部使用。带有缓冲区的响应对象,效率高于response对象。
    page:代表当前Jsp的对象。相当于java中的this。
    exception:异常对象。存储了当前运行的异常信息。
      注意:使用此对象需要在page指定中使用属性isErrorPage="true"开启。
    config:也就是ServletConfig,主要是用来获取web.xml中的配置数据,完成一些初始化数据的读取。

  9,Jsp的路径

  使用相对路径,但是资源的位置不可随意更改,要更改会比较麻烦;

  使用绝对路径:
    /虚拟项目名/项目资源路径
 
    注意:在jsp中资源的第一个/表示的是服务器根目录,相当于:localhost:8080
  jsp中自带的全局路径声明:
  <%
  String path = request.getContextPath();
  String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
  %>
  <base href="<%=basePath%>">
  作用:给资源前面添加项目路径,相当于:  http://127.0.0.1:8080/虚拟项目名/

    

原文地址:https://www.cnblogs.com/zdl2234/p/11296860.html

时间: 2024-10-06 07:33:27

jsp学习(Tomcat服务器+myeclipse)的相关文章

JAVA学习-Tomcat服务器介绍

Apache的开源web服务器.可以解析php,js,css,一起jsp/Servlet容器. 安装Tomcat7安装包. 第一步,先下载Tomcat服务器. 下载地址 http://tomcat.apache.org/download-70.cgi#7.0.67 第二步,解压到硬盘. D:\apache-tomcat-7.0.67 第三步,配置环境变量. 系统变量,新建变量CATALINA_HOME名.变量值就是第二步中的服务器根目录. 第四步,测试首页. 运行Tomcat服务器,bin目录下

javaWeb学习之运用myeclipse结合tomcat开发一些简单的jsp和service

servlet是什么?     servlet是java服务器端编程.不同于我们之前写的一般的java应用程序,Servlet程序是运行在服务器上的,服务器有很多种.....现在只是用过 tomcat.....哇咔咔     )—— 最大的特点是没有类方法....    )—— javaWeb学习之运用myeclipse结合tomcat开发一些简单的jsp和service

JSP学习笔记(二):Tomcat服务器的安装及配置

一.Tomcat的下载及安装. 前往Tomcat官网下载安装包或者免安装压缩包.链接http://tomcat.apache.org/ 这里,我选择的是Tomcat8.0,而不是最新的Tomcat9.0,这是因为Eclipse现在支持的最新的是8.0. 选择下载的是安装文件,下载后为,点击安装. 安装时可以配置HTTP访问的端口,默认的是8080(localhost:8080),在下图这个界面时是可以进行配置的,也可以在安装完后通过配置文件server.xml进行修改. 进行JRE的路径设置,如

Linux下安装MyEclipse和Tomcat服务器详解,以及我安装过程中所出现的问题以及解决办法,并实现一个web小程序

1.首先,先要去MyEclipse和Tomcat的官网去下载Linux版的压缩文件,而MyEclipse的中文官网是需要登录并有可能要付钱,大家可以去网上下载,还有就是Tomcat的linux版,这个直接上官网就可以下载了,下载后我还是通通把它们放在我E盘下的as目录底下,如果大家还没配置好jdk,即Java环境的话,可看我这篇文章:http://blog.csdn.net/u012561176/article/details/45119047 这里我就直接进行操作了! 我E盘下的as文件夹

JavaWeb学习总结(三)——Tomcat服务器学习和使用(二) 包含https 非对称秘钥 NB

JavaWeb学习总结(三)--Tomcat服务器学习和使用(二) 一.打包JavaWeb应用 在Java中,使用"jar"命令来对将JavaWeb应用打包成一个War包,jar命令的用法如下: 范例:将JavaWebDemoProject这个JavaWeb应用打包成war包 执行完之后,就可以得到一个文件,平时开发完JavaWeb应用后,一般都会将JavaWeb应用打包成一个war包,然后将这个war包放到Tomcat服务器的webapps目录下,当Tomcat服务器启动时,就会自动

怎样给Myeclipse配置tomcat服务器

Meclipse是java Web企业级开发中最流行的工具,java web的开发离不开服务器,作为J2EE平台上最流行的服务器,tomcat发挥着巨大的作用,那么该如何给Myeclipse配置tomcat呢? 首先来介绍下MyEclipse吧!MyEclipse企业级工作平台(MyEclipse Enterprise Workbench ,简称MyEclipse)是对EclipseIDE的扩展,利用它我们可以在数据库和JavaEE的开发.发布以及应用程序服务器的整合方面极大的提高工作效率.它是

第二部分_搭建Java Web开发环境与配置Tomcat服务器&amp;JSP详解

MyEclipse集成Tomcat 首先配置Tomcat,即配置环境变量Java_HOME.path,在第一讲中已经完成了,不再赘述. Eclipse代码风格导入MyEclipse: 每个项目都要配置一次代码风格,文字大小,快捷键等等比较麻烦,可以用File下面的导入.导出功能.比如Eclipse下的File->General->Preferences->export all,生成一个*.epf文件,然后用MyEclipse中的File->import->General-&g

MyEclipse应用服务器之部署项目到Tomcat服务器

1. 导入示例Web项目 (1)下载示例Web项目. (2)选择File>Import. (3)展开General,然后在工作区中选择现有项目,并单击下一步. 导入现有项目 (4)选择Select archive file选项,浏览下载的zip文件,并单击Finish. 选择一个归档文件导入 (5)根据向导迁移项目. 2. 部署Web项目 现在您有一个Web项目需要工作,可以将它部署到Tomcat上,同时可以开始开发它的实时性. (1)在服务器视图中右键单击MyEclipse Tomcat服务器

MyEclipse使用总结——设置MyEclipse使用的Tomcat服务器 设置JDK

一.设置使用的Tomcat服务器 如果不想使用MyEclipse自带的tomcat服务器版本,那么可以在MyEclipse中设置我们自己安装好的tomcat服务器 设置步骤如下: Window→Preferences 弹出[Preferences]对话框,如下图所示: 二.设置MyEclipse中的Tomcat服务器使用的Jdk 设置步骤如下: Window→Preferences 这样就将tomcat服务器运行的Jdk版本设置成1.7了