jsp笔记总结

Posted

tags:

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

第一章 JavaWeb简介

1.什么是Web应用程序

什么是Web应用程序是一种通过Web访问的应用程序。Web应用程序一个最大优点就是用户很容易访问。用户只需要有浏览器即可,不需要再安装其他软件。Web开发是目前软件开发领域的三大方向之一。(桌面应用程序,Web应用程序,嵌入式应用程序)

2.静态页面与动态页面

静态网页 
表现形式:网页内容固定,不会更新。 
所需技术:html,CSS 
动态网页 
表现形式:网页中的内容通过程序动态的显示,自动更新,能与用户进行交互(比如登录输入正确用户名和密码时,系统提示登录成功) 
所需技术:HTML,CSS,数据库技术,至少一门高级语言(Java,C#,php),javascript,XML等。主流的动态网页脚本技术(Jsp/Asp.net/Php)

3.搭建Java Web开发环境

工具:JDK官方下载地址
Tomcat下载地址
MyEclipse官方下载地址 
Tomcat服务器简介:

  • Apache Jakarta的开源项目
  • Jsp/Servlet容器

环境搭建:安装Tomcat–>配置环境变量–>测试首页 
Tomcat服务器的目录简介 
技术分享

4.手工编写第一个Web应用程序

在WebApps创建项目目录–>编写index.jsp–>创建WEB-INF目录–>测试运行 
技术分享 
WEB-INF目录结构 
WEB-INF是Java的WEB应用的安全目录。所谓的安全就是客户端无法访问,只有服务端可以访问的目录

  • web.xml,项目的部署文件
  • classes文件夹,用以放置*.class文件
  • lib文件夹,用于存放需要的jar包

5.MyEclipse配置

MyEclipse配置JRE:windows–>Preference–>Java–>Installed JREs 
MyEclipse集成Tomcat服务器windows–>Preference–>Myeclipse–>Server–>Tomcat

6.使用MyEclipse编写第一个Web应用程序

MyEclipse Web项目目录结构 
技术分享 
理解项目的虚拟路径:选择项目–>属性–>MyEclipse–>Web–>查看项目虚拟路径

7.修改Tomcat默认端口号

tomcat安装目录–>conf–>server.xml

<Connector 
        port="8888" 
        protocol="HTTP/1.1"
        connectionTimeout="20000"
        redirectPort="8443" 
        URIEncoding="utf-8"
    />

第二章 Jsp基础语法

1.Jsp简介

JSP全名为Java Server Pages,其根本是一个简化的Servlet设计,他实现了在Java当中使用HTML标签。Jsp是一种动态网页技术标准也是JAVAEE的标准。JSP与Servlet一样,是在服务端执行的。

2.常用动态网站开发技术

技术分享

3.Jsp页面元素构成

静态内容、指令、表达式、小脚本、声明、注释 
技术分享

3.1指令

  • page指令:通常位于jsp页面的顶端,同一个页面可以有多个page指令
  • include指令:将一个外部文件起嵌入到当前JSP文件中,同时解析这个页面中的JSP语句
  • taglib指令:使用标签库定义新的自定义标签,在JSP页面中启用定制行为 
    技术分享
<%@ page language="java" import="java.util.*" contentType="text/html; charset=utf-8" %>

3.2注释

<!--html注释-->//客户端可见
<%--html注释--%>//客户端不可见
//jsp脚本注释
/*
jsp脚本多行注释
*/

3.3Jsp脚本

在jsp中执行java代码

<%Java代码%>

3.4Jsp声明

在JSP页面中定义变量或者方法

<%!Java代码%>

3.5Jsp表达式

在JSP页面中执行的表达式

<%=表达式%>//注意:表达式不以分号结束

技术分享

4.Jsp声命周期

技术分享 
技术分享 
当用户第一次请求一个jsp页面时,首先被执行的方法是构造方法 
pageEncoding是jsp文件本身的编码 
contentType的charset是指服务器发给客户端时的内容编码(更更常用)

5.阶段项目

分别使用表达式和脚本实现打印九九乘法表

 <body>
   <h1>九九乘法表</h1>
   <%!
   //返回九九表,通过表达式调用,在页面上显示
        String printMultiTable1()
        {
            String s="";
            for(int i=1;i<=9;i++)
            {
                for(int j=1;j<=i;j++)
                {
                    s+=i+"*"+j+"="+(i*j)+"&nbsp;&nbsp;&nbsp;&nbsp;";
                }
                s+="<br>";//追加换行标签
            }
            return s;
        }

        //JSP内置out对象,使用脚本方式调用,打印九九表
        void printMultiTable2(JspWriter out) throws Exception
        {
            for(int i=1;i<=9;i++)
            {
                for(int j=1;j<=i;j++)
                {
                    out.println(i+"*"+j+"="+(i*j)+"&nbsp;&nbsp;&nbsp;&nbsp;");
                }
                out.println("<br>");//追加换行标签
            }
        }
    %>
    //表达式,直接在页面上显示
    <%=printMultiTable1() %>
    <br>
    //借助输出方法在页面显示
    <% printMultiTable2( out) ;%>
    <br>
  </body>

第三章 JSP内置对象

1.内置对象简介

常用内置对象(九个):out、request、response、session、application、page、pageContext、config 
JSP内置对象是web容器创建的一组对象,不使用new关键字就可以使用内置对象

<%
int[] value = {60,70,80};
    for(int i:value){
        out.println(i);
    }
%>

2.表单get与post提交的区别

<form name = "regForm" action="动作" method="提交方式"
</form>
  1. get:以明文的方式通过URL提交数据,数据在URL中可以看到。提交的数据最多不超过2KB。安全性较低但效率比post方式高。适合提交数据量不大,安全性不高的数据,比如:搜索、查询等功能。
  2. post:将用户提交的信息封装在HTML HEADER内。适合提交数据量大,安全性高的用户信息。比如:注册、修改、上传等功能。 
    技术分享

3.out

out对象是JspWriter类的实例,是向客户端输出内容常用的对象 
常用方法如下: 
1. void println() 向客户端打印字符串 
2. void clear()清楚缓冲区的内容,如果在flush之后调用会抛出异常 
3. void clearBuffer() 清楚缓冲区内容,如果在flush()之后调用,不会抛出异常 
4. void flush() 将缓冲区内容输出到客户端 
5. int getBufferSize()返回缓冲区以字节数的大小,如果不设缓冲区则为0 
6. int getRemaining() 返回缓冲区还剩多少可以用 
7. boolean isAutoFlush() 返回缓冲区满时,是自动清空还是抛出异常 
8. void close() 关闭输出流 
技术分享

4.request/response

4.1request对象:

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

  • String getParameter(String name) 返回name指定参数的参数值
  • String[] getParameterValues(String name) 返回包含参数name的所有值的数组
  • void setAttribute(String name) 存储此请求中的属性
  • object getAttribute(String name) 返回指定属性的属性值
  • String getContentType() 得到请求体的MIME类型
  • String getProtocol() 返回请求的协议类型以及版本号
  • String getServerName() 返回接受请求的服务器主机名
<body>
    <h1>用户注册</h1>
    <hr>
    <form action="response.jsp" name="regForm" method="post">
        <table>
            <tr>
                <td>用户名:</td>
                <td><input type="text" name="username" />
                </td>
            </tr>
            <tr>
                <td>爱好:</td>
                <td><input type="checkbox" name="favorite" value="read">读书
                    <input type="checkbox" name="favorite" value="music">音乐 
                    <input type="checkbox" name="favorite" value="movie">电影 
                    <input type="checkbox" name="favorite" value="internet">上网</td>
            </tr>
            <tr>
                <td colspan="2"><input type="submit" value="提交" /></td>
            </tr>
        </table>
    </form>
    <br>
    <br>
    <a href="request.jsp?username=李四">测试URL传参数</a>
</body>
</html>
<body>
    <h1>request内置对象</h1>
    <%
        //与第一行编码要一样,无法解决URL传参出现的乱码问题
        request.setCharacterEncoding("utf-8");
        request.setAttribute("password", 123456);
    %>
    用户名:<%=request.getParameter("username")%><br>
     爱好:<%
        if (request.getParameterValues("favorite") != null) {
            String[] favorites = request.getParameterValues("favorite");
            for (int i = 0; i < favorites.length; i++) {
                out.println(favorites[i] + "&nbsp;&nbsp;");
            }
        }
    %><br>
    密码:<%=request.getAttribute("password") %><br>
    请求体的MIME类型:<%=request.getContentType() %><br>
    协议类型以及版本号:<%=request.getProtocol() %><br>
    服务器主机名:<%=request.getServerName() %><br>
    服务器端口号:<%=request.getServerPort() %><br>
    请求文件的长度:<%=request.getContentLength() %><br>
    请求客户端的IP地址:<%=request.getRemoteAddr() %><br>
    请求的真实路径:<%=request.getRealPath("request.jsp") %><br>
    请求的上下文路径:<%=request.getContextPath() %><br>
</body>

4.2response对象

response对象包含了响应客户请求的有关信息,但在JSP中很少直接用到它。他是HttpServletResponse类的实例。response对象具有页面作用域,即访问一个页面时,该页面的response对象只能对这次访问有效,其他页面的response对象对当前页面无效。常用方法如下:

  • String getCharacterEncoding() 返回响应用的是何种字符编码
  • void setContentType(String type) 设置响应的MIME类型
  • PrintWriter getWriter() 返回可以向客户端输出字符的一个对象(注意比较PrintWriter与内置out对象的区别)
  • sendRedirect(java.lang.String location) 重新定向客户端的请求
<%@page import="java.io.PrintWriter"%>
<%@ page language="java" import="java.util.*" contentType="text/html; charset=utf-8"%>
<%
    //设置响应的MIMI类型
    response.setContentType("text/html;charset=utf-8");
    out.println("<h1>responce内置对象</h1>");
    out.println("<hr>");
    //out.flush();
    PrintWriter outer = response.getWriter();
    outer.println("大家好,我是response对象生成的输出流outer对象");
    //请求重新定向(地址栏改变,客户端行为,提交的值丢失)
    response.sendRedirect("request.jsp");
    //请求转发(地址栏不变,服务端行为,提交值未丢失)
    //request.getRequestDispatcher("request.jsp").forward(request,response);
%>

技术分享

5.session

技术分享 
技术分享

5.1session常用方法:

  1. long getCreationTime(): 返回session创建时间
  2. public String getId():返回session创建时JSP引擎为它设计的唯一ID号
  3. public Object setAttribute(String name,Object value):使用指定名称将对象绑定到此会话
  4. public Object getAttribute(String name):返回与此会话中的指定名称绑定在一起的对象,如果没有对象绑定在该名称下,则返回null
  5. String[] getValueNames():返回一个包含此session中所有可用属性的数组
  6. int getMaxInativeInterval():返回两次请求间隔多长时间此session被取消(单位秒)
<body>
     <h1>session内置对象</h1>
     <hr>
     <%
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
        Date d = new Date(session.getCreationTime());
        session.setAttribute("username", "admin");
        session.setAttribute("password", "123456");
        session.setAttribute("age", "21");
        //设置当前session最大生成期限(单位是秒)    
        //session.setMaxInactiveInterval(10);
      %>
      Session创建时间:<%=sdf.format(d) %><br>
      Session的ID编号:<%=session.getId() %><br>
      从Session中获取用户名:<%=session.getAttribute("username") %><br>
        <%  
            //session.invalidate();//销毁当前会话
         %>
        <a href="session_page2.jsp" target="_blank">跳转到Session_page2.jsp</a>
  </body>
<body>
     <h1>session内置对象</h1>
     <hr>
     <%
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
        Date d = new Date(session.getCreationTime());
        session.setAttribute("username", "admin");
      %>
      Session创建时间:<%=sdf.format(d) %><br>
      Session的ID编号:<%=session.getId() %><br>
     从Session中获取用户名:<%=session.getAttribute("username") %><br>
        Session中保存的属性有:<%
            String[] names = session.getValueNames();
            for(int i=0;i<names.length;i++){
                out.println(names[i]+"&nbsp;&nbsp");
            }
         %>
  </body>

5.2session生命周期

技术分享 
技术分享

5.3session销毁和设置最大生命时长

session销毁只有三种方式: 
1. 调用session.invalidate()方法 
2. session过期(超时) 
3. 服务器重新启动

session设置时长: 
1. session.setMaxInactiveInterval(时间);//单位秒 
2. 在web.xml配置

<session-config>
<session-timeout>
    10//单位是分钟
</session-timeout>
</session-config>

Tomcat默认session超时时间为30分钟 
可以在Tomcat Web Application Maniger查看session状态

6.application

6.1application对象概念

技术分享

6.2application对象常用方法

  • public void setAttribute(String name,Object value)使用指定名称将对象绑定到此会话
  • public Object getAttribute(String name)返回与词会话中的指定名称绑定在一起的对象,如果没有对象绑定在该名称下,则返回null
  • Enumeration getAttributeNames() 返回所有可用属性名的枚举。
  • String getServerInfo()返回JSP(SERVLET)引擎名以及版本号。 
    技术分享

7.page对象

技术分享 
技术分享

8.pageContext对象

8.1pageContext对象概念

技术分享

8.2pageContext对象常用方法

技术分享 
技术分享

9.config对象

技术分享

10.exception内置对象

技术分享

<%@ page language="java" import="java.util.*" contentType="text/html; charset=utf-8"  errorPage="exception.jsp"%>

<body>
    <h1>测试异常的页面</h1> <br>
    <%
    out.println(100/0); //会抛出运行时异常,算数异常
    %>
  </body>
</html>
<%@ page language="java" import="java.util.*" contentType="text/html; charset=utf-8"  isErrorPage="true"%>
<body>
    <h1>exception内置对象</h1> <br>
    异常的消息是:<%=exception.getMessage() %><br>
     异常的字符串描述:<%=exception.toString() %><br>
  </body>

10.阶段案例

实现用户登录小例子

10.1 login.jsp

<%@ page language="java" import="java.util.*" contentType="text/html; charset=utf-8" %>
<%
//*请求体的MIME类型:request.getContentType() 
String path = request.getContextPath();
//
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!--  -->
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
    <title>My JSP ‘login.jsp‘ starting page</title>
    <meta http-equiv="pragma" content="no-cache">
    <meta http-equiv="cache-control" content="no-cache">
    <meta http-equiv="expires" content="0">    
    <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
    <meta http-equiv="description" content="This is my page">
    <!--
    <link rel="stylesheet" type="text/css" href="styles.css">
    -->
  </head>
  <body>
  <div id="container">
            <div class="logo">
                    <a href="#"><img  src="assets/logo.png" alt=""/></a>
            </div>
            <div id="box">
                    <form action="dologin.jsp" method="post">
                    <p class="main">
                            <label>用户名:</label>
                            <input name="username" value=""/>
                            <label>密码: </label>
                            <input type="password" name="password" value="">
                    </p>
                    <p class="space">
                            <input type="submit" value="登录" class="login" style="cursor: pointer;"/>
                    </p>        
                    </form>
            </div>
  </div>
  </body>
</html>

10.2 dologin.jsp

<%@ page language="java" import="java.util.*" contentType="text/html; charset=utf-8" %>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";

String username="";
String password="";
//防止中文乱码
request.setCharacterEncoding("utf-8");
//为什么用request(请求)?因为form提交数据就是一个请求
username = request.getParameter("username");
password = request.getParameter("password");

if("admin".equals(username)&&"admin".equals(password))
{
    //设置一个属性,放便login_success调用
    session.setAttribute("loginUser", username);
    //请求转发
    request.getRequestDispatcher("login_success.jsp").forward(request, response);
}
else
{
    //重定向
    response.sendRedirect("login_failure.jsp");
}
%>

10.3 login_failure.jsp

<body>
  <div id="container">
            <div class="logo">
                    <a href="#"><img src="assets/logo.png" alt=""/></a>
            </div>
            <div id="box">
            登录失败!请检查用户名或者密码<br>
            <a href="login.jsp">返回登陆</a>
            </div>
  </div>
  </body>

10.4 login_success.jsp

<body>
  <div id="container">
            <div class="logo">
                    <a href="#"><img src="assets/logo.png" alt=""/></a>
            </div>
            <div id="box">
                <%
                    String loginUser="";
                    if(session.getAttribute("loginUser")!=null)
                    {
                        loginUser = session.getAttribute("loginUser").toString();
                    }
                 %>
            登录成功,欢迎您<font color="red"><%=loginUser %></font>
            </div>
  </div>
  </body>

11.端口占用异常解决

技术分享














































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

JSP 学习笔记

JSP学习笔记:JSP语法和指令

Java Web学习总结JSP

JSP 学习总结---学习笔记

Jsp入门EL表达式_学习笔记

谷歌浏览器调试jsp 引入代码片段,如何调试代码片段中的js