前言
什么是javaweb?
“Java Web,是用Java技术来解决相关web互联网领域的技术栈。web包括:web服务端和web客户端两部分。Java在客户端的应用有Java Applet,不过使用得很少,Java在服务器端的应用非常的丰富,比如Servlet,JSP、第三方框架等等。Java技术对Web领域的发展注入了强大的动力。”
第一章 Servlet技术概述
1.1 什么是Servlet
Servlet是Java Servlet的简称,称为小服务程序或服务连接器,用Java编写的服务器端程序,具有独立于平台和协议的特性,是一个Java类。使用 Servlet,您可以收集来自网页表单的用户输入,呈现来自数据库或者其他源的记录,还可以动态创建网页。
主要功能:
(1)读取客户端发送到服务器端的显示数据(表单数据)和隐式数据(请求报头)
(2)服务器端发送显式数据(HTML)和隐式数据(状态码和响应报头)
1.2 Servlet的生命周期
Servlet 生命周期可被定义为从创建直到毁灭的整个过程。以下是 Servlet 遵循的过程:
以下三种方法是HttpServlet类中的方法,可以在Servlet类中重写方法
(1) Servlet 初始化后调用 init () 方法。
public void init(ServletConfig config) throws ServerException{
// Servlet 代码
}
(2)Servlet 调用 service() 方法来处理客户端的请求。
public void service(HttpServletRequest req, HttpServletResponse resp) throws
ServletException, IOException {
// Servlet 代码
}
(3)Servlet 销毁前调用 destroy() 方法。
public void destroy() {
// 终止化代码...
}
1.3 Servlet 类
以下只总结了部分:
(1) HttpServlet类的常用方法
doGet() 方法
用于处理GET类型的HTTP请求的方法
public void doGet(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException {
// Servlet 代码
}
doPost() 方法
用于实现POST类型的HTTP请求的方法
public void doPost(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException {
// Servlet 代码
}
(2)ServletRequest接口的常用方法
方法声明 | 功能描述 |
---|---|
getContentLength() | 返回请求正文的长度,如果长度未知,则返回-1 |
getContentType() | 获取请求正文的MIME类型。如果请求正文的类型未知则返回null |
getInputStram() | 返回用于读取请求正文的输入流 |
getParameter(String name) | 根据给定的参数值,返回来自客户端请求中匹配的请求参数值 |
getReader() | 返回用户读取字符串形式的请求正文的BufferedReader对象 |
getAttribute(String name) | 根据name参数给定的属性名,返回请求范围内匹配的数值 |
setAttribute(String name,Object object) | 在请求范围内保存一个属性,参数name表示属性名,参数object标识属性值 |
removeAttribute(String name) | 从请求范围内删除一个属性 |
(3)HttpServletRequest接口的常用方法
方法声明 | 功能描述 |
getContextPath() | 返回客户端访问的web应用的url入口 |
getCookies() | 返回HTTP请求中的所有Cookie |
getHeader(String name) | 返回HTTP请求头部中所有的Cookie |
getHeaderNames() | 返回一个Enumeration对象,它包含了HTTP请求头部的所有项目名 |
getMethod() | 返回HTTP请求方式,如post或get |
getRequestURL() | 返回HTTP请求头部的第一行的URL |
getQueryString() | 返回HTTP请求中的查询字符串,即url中的“?”后面的内容 例如,如果访问的URL为 http://localhost:8080/helloapp/info?username=tom,那么该访问返回“username=tom” |
(4)ServletResponse接口的常用方法
方法声明 | 功能描述 |
setCharacterEncoding(String charset) | 设置被发送到客户端的响应的字符编码(MIME 字符集)例如,UTF-8。 |
void setContentLength(int len) | 设置在 HTTP Servlet 响应中的内容主体的长度,该方法设置 HTTP Content-Length 头。 |
setContentType(String type) | 如果响应还未被提交,设置被发送到客户端的响应的内容类型。 |
getCharacterEncoding( ) | 返回响应正文的字符编码 |
getContentType() | 返回响应正文的MIME类型 |
setBufferSize(int size) | 设置响应主体存放正文数据的缓存区大小 |
getBufferSize() | 返回主体存放正文数据的缓存区大小 |
reset() | 清除缓冲区中存在的任何数据,包括状态码和头。 |
resetBuffer() | 清除响应中基础缓冲区的内容,不清除状态码和头。 |
flushBuffer() | 强制任何在缓冲区中的内容被写入到客户端。 |
isCommitted() | 返回一个boolean类型的值,如果为true,表示缓存区的内容数据已经提交给客户,即数据已经发送到客户端 |
getOutputStream() | 返回一个OutputStream对象,Servlet用它来输出二进制的正文数据 |
getWriter() | 返回一个PrintWriter对象,Servlet用它来输出字符串形式的正文数据 |
(5)HttpServletRespon接口的常用方法
方法声明 | 功能描述 |
addHeader(String name, String value) | 添加一个带有给定的名称和值的响应报头。 |
sendError(int sc) | 使用指定的状态码发送错误响应到客户端,并清除缓冲区。 |
sendError(int sc, String msg) | 使用指定的状态发送错误响应到客户端 |
setHeader(String name, String value) | 置一个带有给定的名称和值的响应报头。 |
setStatus(int sc) | 为该响应设置状态码。 |
addCookie(Cookie cookie) | 把指定的 cookie 添加到响应。 |
1.4.编写Web.xml文件
在web.xml文件中,一个<servlet-mapping>元素用于映射一个Servlet的对外访问路径,该路径也成为虚拟路径。
(例如:运行Servlet,启动Tomcat,在浏览器中输入http://localhost:8080/项目名字/test即可访问)
<servlet>
<!-- 声明Servlet对象-->
<!-- 指定Servlet对象的名称-->
<servlet-name>Test</servlet-name>
<!-- 指定Servlet对象的完整位置,包含包名(如:com.it)和类名(如:Test)-->
<servlet-class>com.it.Test</servlet-class>
</servlet>
<servlet-mapping>
<!-映射访问路径-->
<url-pattern>/Test</url-pattern>
</servlet-mapping>
多重映射
是指同一个Servlet可以被映射成多个虚拟路径,即客户端可以通过多个路径访问同一个Servlet,
(1)可以配置多个<servlet-mapping>标签
(2)可以在<servlet-mapping>标签中配置多个<url-pattern>标签
(例如:运行Servlet,启动Tomcat,在浏览器中输入http://localhost:8080/项目名字/test1或者test2都可以访问)
<!--第一种方法-->
<servlet>
<servlet-name>Test</servlet-name>
<servlet-class>com.it.Test</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Test</servlet-name>
<url-pattern>/Test1</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>Test</servlet-name>
<url-pattern>/Test2</url-pattern>
</servlet-mapping>
<!--第二种方法-->
<servlet>
<servlet-name>Test</servlet-name>
<servlet-class>com.it.Test</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Test</servlet-name>
<url-pattern>/Test1</url-pattern>
<url-pattern>/Test2</url-pattern>
</servlet-mapping>
1.5 ServletConfig和ServlertContext
ServletConfig: 是Sevlet的配置对象,用来描述Servlet 的基本信息,容器在初始化Servlet 时通过它传递信息给Sevlet
ServletContext: 指上下文对象,提供了一系列方法Servlet 与Web容器交互
二、作用范围
ServletConfig :局部对象 ;ServletContext: 全局对象
ServletConfig 作用于某个Servle 实例,每个Servlet 都有对应的ServletConfig;
SevletContext 作用于整个Web应用,一个Web应用对应一个ServletContext,多个Servlet实例对应一个 ServletContext。
1.6 编写一个基础的Servlet程序
第一步 创建javaweb工程
File--》New--》Dynamic Web Project
填写项目名称,Target runtime 选择Apache Tomcat v9.0 browser选择其所在目录
然后一直next 直到此窗口 选中复选框,会自动在webapp目录下创建web.xml文件
如果忘记选中,项目右击项目-->java EE Tools->Generate Deployment Descriptor Stub
接着创建包(com.it)和类(Test)
(1)打印hello word
***打印hello word 新建一个Test 继承 HttpServlet 类 实现doGet 方法
package com.it;
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
// 扩展 HttpServlet 类
public class Test extends HttpServlet {
/**
*
*/
private static final long serialVersionUID = 1L;
public void doGet(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException
{
// 设置响应内容类型
response.setContentType("text/html");
// 实际的逻辑是在这里
PrintWriter out = response.getWriter();
out.print("hello,word");
}
public void destroy()
{
// 什么也不做 这个可以省略
}
}
编写Web.xml文件
<servlet>
<servlet-name>Test</servlet-name>
<servlet-class>com.it.Test</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Test</servlet-name>
<url-pattern>/Test</url-pattern>
</servlet-mapping>
(2)读取表单信息
实现Post方法
webapp下新建一个名为NewFile.jsp的文件
<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Insert title here</title>
</head>
<body>
<form action="registerServlet" method="post">
<table border="0">
<th colspan="2" width="200px">基本信息</th>
<tr width="200px" >
<td>姓名</td>
<td><input type="text" name="username"></td>
</tr>
<tr width="200px" >
<td>年龄</td>
<td><input type="text" name="age"></td>
</tr>
<tr width="200px" >
<td>密码</td>
<td><input type="password" name="password"></td>
</tr>
</table>
<input type="submit">
</form>
</body>
</html>
新建一个registerServlet.class
package chapter;
import java.io.*;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class registerServlet extends HttpServlet{
/**
*
*/
private static final long serialVersionUID = 1L;
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
super.doPost(req, resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
resp.setContentType("text/html");
resp.setCharacterEncoding("utf-8");
req.setCharacterEncoding("utf-8");
String username=req.getParameter("username");
String age=req.getParameter("age");
String password=req.getParameter("password");
PrintWriter out=resp.getWriter();//字符流输出
out.print("<html>");
out.print("<head><title>用户注册结果</title></head> ");
out.print(" <body>");
out.print("<table border='1'> ");
out.print(" <tr><th>参数</th><th>参数值</th></tr>");
out.print(" <tr> <th>username</th> <th>"+username+"</th></tr>");
out.print(" <tr><th>age</th> <th>"+age+"</th></tr>");
out.print(" <tr><th>password</th> <th>"+password+"</th></tr>");
out.print(" <table></body>");
out.print("</html>");
out.flush();
out.close();
}
}
映射
<servlet>
<servlet-name>registerServlet</servlet-name>
<servlet-class>chapter.registerServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>registerServlet</servlet-name>
<url-pattern>/registerServlet</url-pattern>
</servlet-mapping>
启动Servlet服务器(右击Run As)在浏览器输入http://localhost:8080/chapter/NewFile.jsp
填写好信息点击提交,自动跳转到http://localhost:8080/chapter/registerServlet
1.7 重定向与请求转发
重定向:
通过各种方法将各种网络请求重新跳转到其他位置,比如在网页上设置一个约束条件,条件满足,就自动转入到其它网页、网址(登录时账号密码正确进入首页,不正确返回登录页面)
// 设置响应内容类型
response.setContentType("text/html;charset=UTF-8");
// 重定向的新位置
String site = new String("http://www.baidu.com");
//返回响应码
response.setStatus(resp.SC_MOVED_TEMPORARILY);
response.setHeader("Location", site);
实现一下:
public class PageRedirect extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 设置响应内容类型
response.setContentType("text/html;charset=UTF-8");
// 要重定向的新位置
String site = new String("http://www.baidu.com");
response.setStatus(response.SC_MOVED_TEMPORARILY);
response.setHeader("Location", site);
}
}
映射
<servlet>
<servlet-name>PageRedirect</servlet-name>
<servlet-class>chapter.PageRedirect</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name> PageRedirect</servlet-name>
<url-pattern>/PageRedirect</url-pattern>
</servlet-mapping>
请求转发
请求转发指一个web资源收到客户端请求后,通知服务器去调用另外一个web资源进行处理。
- 不能跨域,只能访问当前工程里的资源
- 浏览器的URL地址不会发生变化
- 参与请求转发的 Web 资源之间共享同一 request 对象和 response 对象
- 由于 forward() 方法会先清空 response 缓冲区,因此只有转发到最后一个 Web 资源时,生成的响应才会被发送到客户端
request.getRequestDispatcher("NewFile.jsp").forward(request, response);
实现一下:
frist.class
package chapter;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class frist extends HttpServlet {
/**
*
*/
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.getRequestDispatcher("last").forward(request, response);
}
}
last.class
package chapter;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class last extends HttpServlet {
/**
*
*/
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
PrintWriter out=response.getWriter();
out.print("<h1>你好!</h1>");
}
}
映射
<servlet>
<servlet-name>frist</servlet-name>
<servlet-class>chapter.frist</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name> frist</servlet-name>
<url-pattern>/frist</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>last</servlet-name>
<servlet-class>chapter.last</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name> last</servlet-name>
<url-pattern>/last</url-pattern>
</servlet-mapping>
效果
1.8 Cookie
Cookie 是存储在客户端计算机上的文本文件,并保留了各种跟踪信息。Java Servlet 显然支持 HTTP Cookie。
识别返回用户包括三个步骤:
- 服务器脚本向浏览器发送一组 Cookie。例如:姓名、年龄或识别号码等。
- 浏览器将这些信息存储在本地计算机上,以备将来使用。
- 当下一次浏览器向 Web 服务器发送任何请求时,浏览器会把这些 Cookie 信息发送到服务器,服务器将使用这些信息来识别用户。
设置响应内容类型
response.setContentType("text/html;charset=UTF-8");
Cookie常用的方法
方法 | 描述 |
setMaxAge(int expiry) | 该方法设置 cookie 过期的时间(以秒为单位)。如果不这样设置,cookie 只会在当前 session 会话中持续有效 |
getMaxAge() | 该方法返回 cookie 的最大生存周期(以秒为单位),默认情况下,-1 表示 cookie 将持续下去,直到浏览器关闭 |
getName() | 该方法返回 cookie 的名称。名称在创建后不能改变。 |
setPath(String uri) | 该方法设置 cookie 适用的路径。如果您不指定路径,与当前页面相同目录下的(包括子目录下的)所有 URL 都会返回 cookie。 |
String getPath() | 该方法获取 cookie 适用的路径。 |
创建一个CookieServlet类
package chapter;
import java.io.IOException;
import java.io.PrintWriter;
import java.net.URLEncoder;
import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class CookieServlet extends HttpServlet{
/**
*
*/
private static final long serialVersionUID = 1L;
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
{
// 为名字和姓氏创建 Cookie
Cookie name = new Cookie("name",
URLEncoder.encode(request.getParameter("name"), "UTF-8")); // 中文转码
Cookie url = new Cookie("url",request.getParameter("url"));
// 为两个 Cookie 设置过期日期为 24 小时后
name.setMaxAge(60*60*24);
url.setMaxAge(60*60*24);
// 在响应头中添加两个 Cookie
response.addCookie( name );
response.addCookie( url );
// 设置响应内容类型
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
String title = "设置Cookie";
String docType = "<!DOCTYPE html>\n";
out.println(docType +
"<html>" +
"<head><title>" + title + "</title></head>\n" +
"<body >" +
"<h1" + title + "</h1>"+
" <b>站点名:</b>:"
+ request.getParameter("name") + "<br>" +
" <li><b>站点 URL:</b>:"
+ request.getParameter("url") + "<br>" +
"</body></html>");
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
}
}
创建一个HTML页面
<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Insert title here</title>
</head>
<body>
<form action="CookieServlet" method="get">
站点名:<input type="text" name="name"><br>
站点:<input type="text" name="url"><br>
<input type="submit" value="提交"/>
</form>
</body>
</html>
映射
<servlet>
<servlet-name>CookieServlet</servlet-name>
<servlet-class>chapter.CookieServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>CookieServlet</servlet-name>
<url-pattern>/CookieServlet</url-pattern>
</servlet-mapping>
效果
1.9 Session
服务器为了保存用户状态而创建的一个特殊对象
常用方法
方法 | 描述 |
---|---|
setAttribute(String name, Object value) | 该方法使用指定的名称绑定一个对象到该 session 会话。 |
getAttribute(String name) | 返回name指向所指定的属性值 |
getAttributeNames() | 返回所有变量的名称 |
removeAttribute(String name) | 移除指定名称的对象。 |
invalidate() | 解除绑定 |
getCreationTime() | 返回该 session 会话被创建的时间(毫秒) |
getLastAccessedTime() | 返回客户端最后一次发送与该 session 会话相关的请求的时间(毫秒) |
getMaxInactiveInterval() | 在客户端访问时保持 session 会话打开的最大时间间隔,以秒为单位。 |
isNew() | 如果客户端还不知道该 session 会话,或者如果客户选择不参入该 session 会话,则该方法返回 true。 |
setMaxInactiveInterval(int interval) | 在 Servlet 容器指示该 session 会话无效之前,指定客户端请求之间的时间,以秒为单位。 |
实例:(先去看一下JSP语法)
<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>内置对象计数器</title>
</head>
<body>
<%!int Num=0;%>
<%
if(session.isNew()){
Num+=1;
//将Num存入session
session.setAttribute("Num", Num);
}
%>
<h1>Session计数器</h1>
<br>
<br>
<h3>您是第<%= session.getAttribute("Num") %>访问此网站的人</h3>
</body>
</html>
关闭浏览器再次打开时访问人数才会增加
第二章 Listener
监听器Listener就是在application,session,request三个对象创建、销毁或者往其中添加修改删除属性时自动执行代码的功能组件。
Listener是Servlet的监听器,可以监听客户端的请求,服务端的操作等
生命周期:
2.1 Listener分类
2.1.1 ServletContext监听
ServletContext对象在web过程启动的时候创建,在web工程停止时销毁
使用:
编写一个类实现ServletContextListener接口
实现两个方法 contextInitialized()和contextDestroyed()
在web.xml中配置监听器
public class Listener implements ServletContextListener {
//在ServletContext对象创建后被立刻调用
@Override
public void contextInitialized(ServletContextEvent sce) {}
//在ServletContext对象销毁后被立刻调用
@Override
public void contextDestroyed(ServletContextEvent sce) {}
//ServletContextEvent事件:取得一个ServletContext(application)对象
public ServletContext getServletContext(){}
<listener>
<listener-class>chapter.Listener</listener-class>
</listener>
public void attributeAdded(ServletContextAttributeEvent scab);//增加属性
public void attributeRemoved(ServletContextAttributeEvent scab);//属性删除
public void attributeRepalced(ServletContextAttributeEvent scab);//属性替换(第二次设置同一属性)
//ServletContextAttributeEvent事件:能取得设置属性的名称与内容
public String getName();//得到属性名称
public Object getValue();//取得属性的值
2.1.2 Session监听
HttpSessionListener接口:对Session的整体状态的监听。
public class SessionListener implements HttpSession {
public void sessionCreated(HttpSessionEvent se ) {
}
public void sessionDestroyed(HttpSessionEvent se) {
}
//HttpSessionEvent事件
public HttpSession getSession();//取消当前操作session
HttpSessionAttributeListener接口:对session的属性监听
public class SessionListener implements HttpSessionAttributeListener {
//增加属性
public void attributeAdded(HttpSessionBindingEvent se) {}
//删除属性
public void attributeRemoved(HttpSessionBindingEvent se) { }
//修改属性
public void attributeReplaced(HttpSessionBindingEvent se) {}
}
//HttpSessionBindingEvent事件:
public String getName();//取得属性的名称
public Object getValue();//取得属性的值
public HttpSession getSession();//取得当前的session
session销毁的两种情况
1.session超时,web.xml配置
<session-config>
<session-timeout>120</session-timeout><!--session120分钟后超时销毁-->
</session-config>
2.手工使session失效
public void invalidate();//使session失效方法。session.invalidate();
2.1.3 Request 监听
1.ServletRequestListener:用于对Request请求进行监听(创建、销毁)。
public void requestInitialized(ServletRequestEvent sre);//request初始化
public void requestDestroyed(ServletRequestEvent sre);//request销毁
//ServletRequestEvent事件:
public ServletRequest getServletRequest();//取得一个ServletRequest对象
public ServletContext getServletContext();//取得一个ServletContext(application)对象
2.ServletRequestAttributeListener:对Request属性的监听(增删改属性)。
public void attributeAdded(ServletRequestAttributeEvent srae);//增加属性
public void attributeRemoved(ServletRequestAttributeEvent srae);//属性删除
public void attributeReplaced(ServletRequestAttributeEvent srae);//属性替换(第二次设置同一属性)
//ServletRequestAttributeEvent事件:能取得设置属性的名称与内容
public String getName();//得到属性名称
public Object getValue();//取得属性的值
3.在web.xml中的配置
Listener配置信息必须在Filter和Servlet配置之前,Listener的初始化(ServletContentListener初始化)比Servlet和Filter都优先,而销毁比Servlet和Filter都慢。
<listener>
<listener-class>com.listener.class</listener-class>
</listener>
第三章 JSP
3.1 JSP概述
JSP(全称Java Server Pages)是由 Sun Microsystems 公司倡导和许多公司参与共同创建的一种使软件开发者可以响应客户端请求,而动态生成 HTML、XML 或其他格式文档的Web网页的技术标准。从用户角度看待,就是是一个网页,从程序员角度看待,其实是一个Java类,它继承了Servlet,所以可以直接说JSP就是一个Servlet。
3.2 基本语法
(1)声明
<%= 变量或表达式 %>
<% 脚本语句 %>
<!--HTML注释-->
<%!全局变量声明%>
<%--JSP注释 --%>
(2)指令标记
<%@ 指令 属性=“值” %>
<%@page 属性1="值1" 属性2="值2" 属性3="值3" %>
<% @include file="相对URL"%>//静态包含
<%@taglib url="标准URL库" prefix="自定义标签的前缀"%>
属性 | 解释 | 默认值 |
---|---|---|
language | 声明要使用的脚本语言,暂时只支持java | java |
import | 在程序中导入一个或多个类和包 | |
session | 设定客户是否需要HTTP session,取值为true或false | true |
autoFlash | 设置缓冲区填满时是否进行缓冲自动刷新 | true |
isThreadSafe | 设置JSP页面是否支持多线程,值为false时限制每次只能一个用户访问页面 | true |
isErrorPage | 设置当前页面为另一页面的错误页面 | false |
errorPage | 指定当前网页的出错处理网页的URl | |
contentType | 指定JSP字符的编码和JSP页面响应的MIME类型,格式为MIME类型;字符集类型 | “text/html;charaset=gb2312” |
(3)动作标记
<jsp:动作名称 属性="值">
<jsp:include> //在页面被请求的时候引入一个文件。
//属性
//page="相对URL地址" flush="true"
<jsp:useBean> //寻找或者实例化一个JavaBean。
//属性
//id="ID名称" class="具体的类" type=对象类型
//beanName=通过 java.beans.Beans 的 instantiate() 方法指定Bean的名字
<jsp:setProperty> //设置JavaBean的属性。
//属性
//name 设置属性是哪个Bean property设置哪个属性(两个都是必需的)
//value 属性指定Bean属性的值 param 指定哪个请求参数为Bean属性的值
<jsp:getProperty> //输出某个JavaBean的属性。
//属性
//name 要检索的Bean属性名称,Bean必须已经定义
//property 表示要提取Bean属性的值
<jsp:forward> //把请求转到一个新的页面。
//属性
//page 包含一个相对URl
3.3 JSP内置对象
对象 | 描述 |
request | HttpServletRequest 接口的实例 |
response | HttpServletResponse 接口的实例 |
session | HttpSession 类的实例 |
application | ServletContext 类的实例,与应用上下文有关 |
config | ServletConfig 类的实例 |
out | JspWriter 类的实例,用于把结果输出至网页上 |
pageContext | PageContext 类的实例,提供对JSP页面所有对象以及命名空间的访问 |
page | 类似于Java类中的 this 关键字 |
Exception | Exception 类的对象,代表发生错误的JSP页面中对应的异常对象 |
JSP所支持的四大作用域:
pageContext 【PageContext】
作用域仅限于当前的页面,还可以获取到其他八个内置对象。
request 【HttpServletRequest】
作用域仅限于一次请求, 只要服务器对该请求做出了响应,这个域中存的值就没有了。
session 【HttpSession】
作用域限于一次会话(多次请求与响应) 当中。
application 【ServletContext】
整个工程都可以访问,服务器关闭后就不能访问了
out对象
out.print(dataType dt) | 输出Type类型的值 |
out.println(dataType dt) | 输出Type类型的值然后换行 |
out.flush() | 刷新输出流 |
请求
序号 | 方法& 描述 |
---|---|
getAttributeNames() | 返回request对象的所有属性名称的集合 |
getParameterNames() | Enumeration 返回请求中所有参数的集合 |
getAttribute(String name) | 返回名称为name的属性值,如果不存在则返回null。 |
getCharacterEncoding() | String 返回request的字符编码集名称 |
getContentType() | 返回request主体的MIME类型,若未知则返回null |
getParameter(String name) | String 返回此request中name指定的参数,若不存在则返回null |
getParameterValues(String name) | String[] 返回指定名称的参数的所有值,若不存在则返回null |
getAttribute(String name) | 移除name指定的属性 |
响应
S.N. | 方法 & 描述 |
---|---|
sendRedirect(String location) | 使用指定的URL向客户端发送一个临时的间接响应 |
setContentType(String type) | 设置响应的内容的类型,如果响应还未被提交的话 |
setHeader(String name, String value) | 使用指定名称和值设置响应头的名称和内容 |
setIntHeader(String name, int value) | 指定 int 类型的值到 name 标头 |
setStatus(int sc) | 设置响应的状态码 |
第三章 JDBC技术的应用(mysql)
1.加载数据库驱动
(1)下载相应的数据库厂商驱动,复制web项目的WEB-INF/lib下面,右键单击驱动jar包,把它加入到工程
右击jar包--build path
2.建立数据库连接
String dbName="test";//数据库名字
String userName="root";//数据用户名
String userPassword="123456";//密码
String url="jdbc:mysql://localhost/"+dbName+"user="+userName+"&password="+userPassword;
Class.forName("com.mysql.jdbc.Driver");//注册驱动
Connection connection=DriverManager.getConnection(url);
3.查询数据操作
(1)与数据库创建连接之后,就可以用该连接发送sql语句。Statement对象用Connection的方法
createStatement创建
Statement statement= connection.createStatement();
(2)向数据库发送sql查询语句
ResultSet rsResultset=statement.executeQuery("select * from user");
(3)关闭数据库连接,避免潜在内存问题
connection.close();
4.代码整合
(提前在建好一个数据库test,表user,表里存放数据)
String dbName="test";//数据库名字
String userName="root";//数据用户名
String userPassword="123456";//密码
String url="jdbc:mysql://localhost/"+dbName+"user="+userName+"&password="+userPassword;
Class.forName("com.mysql.jdbc.Driver");//注册驱动
Connection connection=DriverManager.getConnection(url);
Statement statement= connection.createStatement();
ResultSet rsResultset=statement.executeQuery("select * from user");
connection.close();
5.编写程序测试
编写web应用程序,在计算机屏幕上用表格的显示,显示所有学生的信息
<%@ page language="java" contentType="text/html; charset=utf8"
pageEncoding="utf8"%>
<%@ page import="java.sql.*" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf8">
<title>整表查询数据</title>
<%! ResultSet rs;%>
<%
String dbName="test";//数据库名字
String userName="root";//数据用户名
String userPassword="123456";//密码
String url="jdbc:mysql://localhost/"+dbName+"?user="+userName+"&password="+userPassword;
Class.forName("com.mysql.jdbc.Driver");//注册驱动
Connection connection=DriverManager.getConnection(url);
Statement statement= connection.createStatement();
String sql="select * from user";
ResultSet resulResultSet=statement.executeQuery(sql);
%>
</head>
<body>
<table border="1">
<th colspan="4" style="font-size:x-large;alignment:center">学生信息表</th>
<tr style="text-align:center">
<td>学号</td>
<td>姓名</td>
<td>年龄</td>
<td>所在班级</td>
</tr>
<%while(resulResultSet.next()) { %>
<tr style="text-align:center">
<td><%=resulResultSet.getString(1) %></td>
<td><%=resulResultSet.getString(2) %></td>
<td><%=resulResultSet.getString(3) %></td>
<td><%=resulResultSet.getInt(4) %></td>
</tr>
<% } %>
<%
resulResultSet.close();
statement.close();
connection.close();
%>
</table>
</body>
</html>