第一章 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笔记总结的更多相关文章

  1. JAVA JSP笔记

    一.jsp加载项目中资源图片 如果直接将静态页面写的代码copy到jsp中,你会发现图片都无法加载. 获取代码: String path = request.getContextPath(); Str ...

  2. [Java] JSP笔记 - 自定义标签

    自定义标签的创建步骤: 自定义标签的四大功能: 自定义标签的类结构: 在 1.0 中呢, 可以将 <body-content> 的值设置为 JSP, 2.0中则不允许在自定义标签体中出现j ...

  3. [Java] JSP笔记 - Listener 监听器

    Java Web 开发时,可以使用 Listener 来监听来监听一些事件,从而实现一些功能.实际上这个监听器,原理就是 Delphi 中大家常用的各种事件. 1. 那么,监听器的主要用途用哪些呢: ...

  4. [Java] JSP笔记 - EL、JSTL 常用标签

    一. 什么是 EL 语言 表达式语言(EL)是 JSP 2.0 引入的一种计算和输出 Java 对象的简单语言. 二.EL 语言的作用 为了使JSP写起来更加简单.表达式语言的灵感来自于 ECMASc ...

  5. [Java] JSP笔记 - Filter 过滤器

    一.什么是Web过滤器 Servlet API 很久以前就已成为企业应用开发的基石,而 Servlet 过滤器则是对 J2EE 家族的相对较新的补充. Servlet 过滤器是可插入的 Web 组件, ...

  6. [Java] JSP笔记 - Java Bean

    一. Java Bean 是什么? Java Bean 其实就是一个符合特定规则的 Java Class.这些规则包括: 使用 public 声明的公用类 属性使用public 的get,set方法访 ...

  7. jsp笔记

    Jsp  Web服务器访问jsp的过程. 如果是第一次访问jsp文件,web服务器会把jsp翻译成一个servlet文件.再将其编译成一个.class文件.然后加载到内存.蓝色的地方也是为什么jav ...

  8. JSP 笔记

    <%@ page contentType="text/html;charset=UTF-8"%> <!-- 字符编码为utf-8,不然会乱码.... --> ...

  9. web —— jsp笔记

    cookies 的使用 1.首先确保客户机上允许使用cookie,一般在浏览器的 隐私 设置项里可以设置. 2.下面给出具体的例子 a)index.jsp中如果没注册过,让游客注册,如果注册了,拿出贮 ...

  10. Jsp笔记(1)

    1. jsp页面中出现中文乱码怎么解决? <%@ page contentType="text/html; charset=GB2312"%> <%@ page ...

随机推荐

  1. 20145303《Java程序设计》实验三实验报告

    20145303<Java程序设计>实验三实验报告 ssh公钥配置及git安装: eclipse中git配置: 队友链接: http://www.cnblogs.com/5321z/p/5 ...

  2. Spring笔记2——Spring中Bean的装配

    1.引言 Spring中,对象无需自己负责查找或创建与其关联的其他对象,而是由容器负责把需要相互协作的对象引用赋予各个对象.创建应用对象之间的协作关系的行为通常称为装配(Wiring),这也是依赖注入 ...

  3. 当新手使用JS库遇到问题怎么办

    见标题,知其意.在做网站时候,其实我们会用很多JS库,网络上流行的和公司自己封装的,这些东西都很好用,但是或多或少的有些bug或者有一些缺陷,即使真的很完善,但也可能达不到自己特定的一些需求.所以遇到 ...

  4. C++ 单词接龙

    问题描述: 拉姆刚刚开始学习英文字母,对单词排序很感兴趣,他能够迅速确定是否可以将这些单词排列在一个列表中,使得该列表中任何单词的首字母与前一个单词的尾字母相同,力能编写一个计算机程序帮助拉姆进行判断 ...

  5. linux下挂载ISO像镜文件

    挂载命令(mount) 命令格式:mount [-t vfstype] [-o options] device dir其中:1.-t vfstype 指定文件系统的类型,通常不必指定.mount 会自 ...

  6. mysql中一张(居民)表按年龄段查询数据

    知识点: 用mysql,按年龄段查询一张居民的数据(各年龄段居民的个数) 1.如:查询resident(居民表),按照各年龄段,统计人数 2.mysql语句如下: select ageproporti ...

  7. 解题报告:hdu1284 钱币兑换问题

    2017-09-03 19:03:06 writer:pprp 状态定义: dp[i][j] = x 代表的是 用前i 中硬币构造 j 美分的方法数目: 初始化: dp[0][0] = 1 状态转移: ...

  8. SSH 登录时出现如下错误:Host key verification failed

       注意:本文相关 Linux 配置及说明已在 CentOS 6.5 64 位操作系统中进行过测试.其它类型及版本操作系统配置可能有所差异,具体情况请参阅相应操作系统官方文档. 问题描述 使用 SS ...

  9. less文件的运行

    例:在任意处创建一个.less文件,比如在桌面2017.06.28文件中创建了一个main.less文件,然后通过命令行编译main.less,步骤: win+R,cmd打开命令面板,切换到main. ...

  10. Android 数据库 ObjectBox 源码解析

    一.ObjectBox 是什么? greenrobot 团队(现有 EventBus.greenDAO 等开源产品)推出的又一数据库开源产品,主打移动设备.支持跨平台,最大的优点是速度快.操作简洁,目 ...