Java Web_00000

web项目

C/S(client server)架构
B/S(client server)架构 browser server
在这里插入图片描述

Java Web概述

Java Web是指所有通过 Java 语言编写,可以通过浏览器访问的程序的总称。

JavaWeb是基于请求和响应来开发的。

请求(request)是指客户端给服务器发送数据。
响应(response)是指服务器给客户端回传数据。

请求和响应是成对出现的,有请求就有响应。
在这里插入图片描述

web资源的分类

web 资源按实现的技术和呈现的效果的不同,分为静态资源和动态资源两种。
静态资源:html、css、js、txt、jpg 图片、mp4 视频 ,
动态资源:jsp 页面、Servlet 程序

常用的web服务器

tomcat:由 Apache 组织提供的一种 Web 服务器,提供对 JSP 和 Servlet 的支持。它是一种轻量级的 Java Web 容器(服务器),也是当前应用最广的 Java Web 服务器(免费)。

Jboss:是一个遵从 JavaEE 规范的、开放源代码的、纯 Java 的 EJB 服务器,它支持所有的 JavaEE 规范(免费)。

GlassFish:由 Oracle 公司开发的一款 Java Web 服务器,是一款强健的商业服务器,达到产品级质量(应用很少)。

Resin:是 CAUCHO 公司的产品,是一个非常流行的服务器,对 Servlet 和 JSP 提供了良好的支持,性能也比较优良,resin 自身采用Java 语言开发(收费,应用比较多)。

WebLogic:是 Oracle 公司的产品,是目前应用最广泛的 Web 服务器,支持 JavaEE 规范,而且不断的完善以适应新的开发要求,适合大型项目(收费,用的不多,适合大公司)。

Tomcat

下载

登录官网地址:https://www.apache.org
在这里插入图片描述
点击“Tomcat”
在这里插入图片描述
选择对应版本点击
在这里插入图片描述
选择要下载的类型
在这里插入图片描述
下载完成后直接解压即可。

目录介绍

bin 存放 Tomcat 服务器的可执行程序。
conf 存放 Tocmat 服务器的配置文件。
lib 存放 Tomcat 服务器的 jar 包。
logs 存放 Tomcat 服务器运行时输出的日志信息。
temp 存放 Tomcat 运行时产生的临时数据。
webapps 存放部署的 Web 工程。
work Tomcat 工作时的目录,用来存放 Tomcat 运行时 JSP 翻译为 Servlet 的源码,和 Session 钝化的目录。

启动

启动方式一

找到 Tomcat 目录下的 bin 目录下的 startup.bat 文件,双击。

测试 Tomcat 服务器启动成功:打开浏览器,在浏览器地址栏中输入以下地址测试:
1、http://localhost:8080
2、http://127.0.0.1:8080
3、http://真实 ip:8080

当出现如下界面,说明 Tomcat 服务器启动成功。
在这里插入图片描述
常见的启动失败的情况:双击 startup.bat 文件,会出现一个小黑窗口一闪而过。原因基本上都是因为没有配置好 JAVA_HOME 环境变量。

配置JAVA_HOME环境变量
一:JAVA_HOME 必须全大写。
二:JAVA_HOME 中间必须是下划线,不是减号-
三:JAVA_HOME 配置的路径只需要配置到 JDK 的安装目录即可。不需要带上 bin 目录。

启动方式二

1、打开命令行
2、cd 到 Tomcat 的 bin 目录下
在这里插入图片描述
3、敲入启动命令:
startup.bat
catalina run

关闭

方式一:点击 tomcat 服务器窗口的 “x” 关闭按钮
方式二:把 Tomcat 服务器窗口置为当前窗口,然后按快捷键 Ctrl+C
方式三:双击 Tomcat 的 bin 目录下的 shutdown.bat

端口号的修改

MySQL 默认的端口号是:3306
Tomcat 默认的端口号是:8080

找到 Tomcat 目录下的 conf 目录,找到 server.xml 配置文件。
在这里插入图片描述
平时上百度:http://www.baidu.com:80
HTTP 协议默认的端口号是:80

部署 web 工程到 Tomcat 中

部署方法

方法一

把 web 工程的目录拷贝到 Tomcat 的 webapps 目录下即可。

访问 Tomcat 下的 web 工程:只需要在浏览器中输入访问地址,格式如下:
http://ip:port/工程名/目录下/文件名

方法二

找到 Tomcat 下的 conf 目录\Catalina\localhost\ 下,创建如下的配置文件:
abc.xml 配置文件内容如下:
在这里插入图片描述
Context 表示一个工程上下文
path 表示工程的访问路径:/abc
docBase 表示你的工程目录在哪里
<Context path=“/abc” docBase=“E:\book” />
访问这个工程的路径如下:http://ip:port/abc/ 就表示访问 E:\book 目录.

本地访问和协议访问的区别

手拖 html 页面到浏览器和在浏览器中输入http://ip:端口号/工程名/的区别
手托 html 页面的原理:
在这里插入图片描述
输入访问地址访问的原因:
在这里插入图片描述

ROOT的工程的访问及默认index.html页面的访问

在浏览器地址栏中输入访问地址如下:
http://ip:port/
没有工程名的时候,默认访问的是 ROOT 工程。

当我们在浏览器地址栏中输入的访问地址如下:
http://ip:port/工程名/
没有资源名,默认访问 index.html 页面

question

tomcat乱码

Windows系统下直接开启tomcat,控制台出现乱码。
问题原因:Wondows系统控制台默认编码为GBK,Tomcat默认编码为UTF-8。
解决方案:
方案一:
tomcat->conf->logging.properties,将编码修改为GBK。

java.util.logging.ConsoleHandler.encoding = GBK

方案二:
修改cmd命令行的编码,打开注册表,找到HEKY_CURRENT_USER->Console->Tomcat(如果修改了tomcat的标题栏,这里就是打开的命令行窗口的名字),找到CodePage项,没有则创建,更改值为十进制的65001,点击确定。

idea中启动tomcat显示乱码。
解决方案:VM options:中添加:

-Dfile.encoding=UTF-8

-Xms512M -Xmx2G -server -XX:MetaspaceSize=128M -XX:MaxMetaspaceSize=512M -Djava.net.preferIPv4Stack=true -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false -Dfile.encoding=UTF-8

使用 idea 开发 web

idea整合tomcat服务器

操作的菜单如下:File->Settings->Build, Execution, Deployment->Application Servers
在这里插入图片描述
创建模块时,会自动加载已经配置的Tomcat。
在这里插入图片描述

idea中创建web工程

File->New->Module
在这里插入图片描述
选择“Java Enterprise”
在这里插入图片描述
点击“Next”
在这里插入图片描述
点击“Finish”
在这里插入图片描述

web 工程目录介绍

在这里插入图片描述

web 工程添加 jar包

在这里插入图片描述
在这里插入图片描述

idea中部署工程至Tomcat中

建议修改 web 工程对应的 Tomcat 运行实例名称
在这里插入图片描述
确认 Tomcat 实例中有要部署运行的 web 工程模块
在这里插入图片描述
还可以修改 Tomcat 实例启动后默认的访问地址:
在这里插入图片描述

idea中启动、停止 Tomcat 实例

启动 Tomcat 实例

在这里插入图片描述

停止 Tomcat 实例

在这里插入图片描述

重启 Tomcat 实例

在这里插入图片描述

修改工程访问路径

在这里插入图片描述

修改运行的端口号

在这里插入图片描述

修改运行使用的浏览器

在这里插入图片描述

配置热部署

在这里插入图片描述

Servlet、过滤器、监听器

Servlet

HttpServletRequest

public interface HttpServletRequest
extends ServletRequest

请求对象。

javax.servlet
Interface ServletRequest

All Known Subinterfaces:
HttpServletRequest

int getRemotePort()

String getContextPath()
String getRemoteAddr() 在ServletRequest接口中。
StringBuffer getRequestURL()
String getRequestURI()

Enumeration getHeaderNames()
String getHeader(String name)

Cookie[] getCookies()
HttpSession getSession()

String getMethod()

String getParameter(String name) 在ServletRequest接口中。
String[] getParameterValues(String name) 在ServletRequest接口中。

乱码解决:
void setCharacterEncoding(String env) throws UnsupportedEncodingException 在ServletRequest接口中。

存储自定义属性

void setAttribute(String name, Object o) 在ServletRequest接口中。
Object getAttribute(String name) 在ServletRequest接口中。
void removeAttribute(String name) 在ServletRequest接口中。 移除指定属性。

转发
package com.oracle.one.servlet.simple;

import java.io.IOException;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@WebServlet("/simple/three")
public class TestServletDispatcher00002 extends HttpServlet{

	private static final long serialVersionUID = 1L;

	@Override
	protected void doGet(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws ServletException, IOException {
		
		httpServletRequest.setCharacterEncoding("utf-8");
	
		httpServletRequest.setAttribute("name", "宋江");
		httpServletRequest.setAttribute("gender", "男");
		
		/*
		 * 转发不会改变浏览器地址栏中的显示内容。
		 * 转发属于项目内的跳转。
		 * */
		String uri = "/simple/fourth";
		RequestDispatcher requestDispatcher = httpServletRequest.getRequestDispatcher(uri);
		
		requestDispatcher.forward(httpServletRequest, httpServletResponse);
		
		//简化写法
		//httpServletRequest.getRequestDispatcher(uri).forward(httpServletRequest, httpServletResponse);
		
	}

	@Override
	protected void doPost(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws ServletException, IOException {
		doPost(httpServletRequest, httpServletResponse);
	}
	
}
package com.oracle.one.servlet.simple;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@WebServlet("/simple/fourth")
public class TestServletDispatcher00003 extends HttpServlet{

	private static final long serialVersionUID = 1L;

	@Override
	protected void doGet(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws ServletException, IOException {
		
		httpServletRequest.setCharacterEncoding("utf-8");
		
		System.out.println("转发到了这里。");
		
		String name = (String)httpServletRequest.getAttribute("name");
		String gender = (String)httpServletRequest.getAttribute("gender");
		
		System.out.println("姓名:" + name);
		System.out.println("性别:" + gender);
		
	}

	@Override
	protected void doPost(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws ServletException, IOException {	
		doGet(httpServletRequest, httpServletResponse);
	}
	
}

HttpServletResponse

javax.servlet.http
Interface HttpServletResponse

All Superinterfaces:
ServletResponse

响应对象

PrintWriter getWriter() throws IOException 在ServletResponse接口中
ServletOutputStream getOutputStream() throws IOException 在ServletResponse接口中

package com.oracle.one.servlet.simple.http_servlet.response;

import java.io.IOException;
//import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@WebServlet(name = "TestHttpServletResponse00000", urlPatterns = { "/http_servelt_response/one" })
public class TestServlet00000 extends HttpServlet {
	
	private static final long serialVersionUID = 1L;
       
	protected void doGet(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws ServletException, IOException {
		
		httpServletRequest.setCharacterEncoding("utf-8");
		httpServletResponse.setContentType("text/html;charset=utf-8");
		
		/*PrintWriter printWriter = httpServletResponse.getWriter();
		printWriter.write("这是HttpServletResponse响应对象输出的文本内容。");
		//printWriter.write("<h1>这是HttpServletResponse响应对象输出的文本内容。</h1>");
		printWriter.flush();
		printWriter.close();*/
		
		ServletOutputStream servletOutputStream = httpServletResponse.getOutputStream();
		servletOutputStream.write("哈哈哈".getBytes());
		servletOutputStream.flush();
		servletOutputStream.close();
		
	}

	protected void doPost(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws ServletException, IOException {
		doGet(httpServletRequest, httpServletResponse);
	}

}
重定向

void sendRedirect(String location) throws IOException

package com.oracle.one.servlet.simple.http_servlet.response;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@WebServlet(name = "TestServlet00001", urlPatterns = { "/simple/servlet_response/two" })
public class TestServlet00001 extends HttpServlet {
	
	private static final long serialVersionUID = 1L;

	protected void doGet(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws ServletException, IOException {
		
		//重定向
		httpServletResponse.sendRedirect("/00000_request/http_servelt_response/one");
		
	}

	protected void doPost(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws ServletException, IOException {
		doGet(httpServletRequest, httpServletResponse);
	}

}

转发与重定向的区别

package com.oracle.one.servlet.simple.request_dispatcher_send_redirect;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@WebServlet("/servlet")
public class TestServlet extends HttpServlet {

	private static final long serialVersionUID = 1L;

	protected void doGet(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws ServletException, IOException {
		
		httpServletRequest.setCharacterEncoding("utf-8");
		httpServletResponse.setContentType("text/html;charset=utf-8");
		
		httpServletRequest.setAttribute("name", "宋江");
		httpServletRequest.setAttribute("gender", "男");
		
		httpServletRequest.getRequestDispatcher("/servlet1").forward(httpServletRequest, httpServletResponse);
		//httpServletResponse.sendRedirect("/00000_request/servlet1");
		
	}

	protected void doPost(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws ServletException, IOException {
		doGet(httpServletRequest, httpServletResponse);
	}

}
package com.oracle.one.servlet.simple.request_dispatcher_send_redirect;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@WebServlet("/servlet1")
public class TestServlet1 extends HttpServlet {
	
	private static final long serialVersionUID = 1L;

	protected void doGet(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws ServletException, IOException {
		
		httpServletRequest.setCharacterEncoding("utf-8");
		httpServletResponse.setContentType("text/html;charset=utf-8");
		
		String name = (String)httpServletRequest.getAttribute("name");
		String gender = (String)httpServletRequest.getAttribute("gender");
		
		System.out.println(name + "\t" + gender);
				
	}

	protected void doPost(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws ServletException, IOException {
		doGet(httpServletRequest, httpServletResponse);
	}

}

ServletConfig

javax.servlet
Interface ServletConfig
All Known Implementing Classes:
GenericServlet, HttpServlet

public interface ServletConfig

配置信息

String getInitParameter(String name)

package com.oracle.one.servlet.servlet_config;

import java.io.IOException;

import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class TestServlet00000 extends HttpServlet {
	
	private static final long serialVersionUID = 1L;
	
	@Override
	public void init(ServletConfig servletConfig) throws ServletException {
		
		super.init(servletConfig);
		
		String name = servletConfig.getInitParameter("name");
		String gender = servletConfig.getInitParameter("gender");
		
		System.out.println(name + "\t" + gender);
		
	}

	protected void doGet(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws ServletException, IOException {
		
		System.out.println("来了");
		
		ServletConfig servletConfig = getServletConfig();
		
		String name = servletConfig.getInitParameter("name");
		String gender = servletConfig.getInitParameter("gender");
		
		System.out.println("doGet()方法中:" + name + "\t" + gender);
		
	}

	protected void doPost(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws ServletException, IOException {
		doGet(httpServletRequest, httpServletResponse);
	}

}
<servlet>
  	<servlet-name>MyHttpServlet</servlet-name>
  	<servlet-class>com.oracle.one.servlet.servlet_config.TestServlet00000</servlet-class>
  	
  	<init-param>
  		<param-name>name</param-name>
  		<param-value>宋江</param-value>
  	</init-param>
  	<init-param>
  		<param-name>gender</param-name>
  		<param-value></param-value>
  	</init-param>
  </servlet>
  
  <servlet-mapping>
  	<servlet-name>MyHttpServlet</servlet-name>
  	<url-pattern>/servlet_config/test_servlet00000</url-pattern>
  </servlet-mapping>

ServletContext

javax.servlet
Interface ServletContext

public interface ServletContext

共享上下文对象

String getInitParameter(String name)

void setAttribute(String name, Object object)
Object getAttribute(String name)

package com.oracle.one.servlet.servlet_context;

import java.io.IOException;

import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@WebServlet("/servlet_context/my_servlet")
public class MyServlet extends HttpServlet {
	
	private static final long serialVersionUID = 1L;
       
	@Override
	public void init() throws ServletException {
		System.out.println("初始化");
	}

	protected void doGet(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws ServletException, IOException {
	
		ServletContext servletContext = getServletContext();
		String ip = servletContext.getInitParameter("ip");
		String port = servletContext.getInitParameter("port");
		
		System.out.println("ip:" + ip + "\tport:" + port);
		
		servletContext.setAttribute("name", "宋江");
		Object name = servletContext.getAttribute("name");
		System.out.println(name);
			
	}

}
package com.oracle.one.servlet.servlet_context;

import java.io.IOException;

import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@WebServlet("/servlet_context/my_servlet1")
public class MyServlet1 extends HttpServlet {
	private static final long serialVersionUID = 1L;

	protected void doGet(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws ServletException, IOException {
	
		ServletContext servletContext = getServletContext();
		Object name = servletContext.getAttribute("name");
		System.out.println(name);
		
	}

	protected void doPost(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws ServletException, IOException {
		doGet(httpServletRequest, httpServletResponse);
	}

}
  <context-param>
    <param-name>ip</param-name>
    <param-value>127.0.0.1</param-value>
  </context-param>
  <context-param>
    <param-name>port</param-name>
    <param-value>1234</param-value>
  </context-param>

Cookie

javax.servlet.http
Class Cookie

java.lang.Object
javax.servlet.http.Cookie

All Implemented Interfaces:
Serializable, Cloneable

public Cookie(String name, String value)

public void setMaxAge(int expiry)
public void setDomain(String domain)
public void setPath(String uri)

package com.oracle.one.servlet.cookie;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@WebServlet("/cookie/my_servlet")
public class MyServlet extends HttpServlet {
	
	private static final long serialVersionUID = 1L;
	
	protected void doGet(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws ServletException, IOException {
	
		httpServletRequest.setCharacterEncoding("utf-8");
		httpServletResponse.setContentType("text/html;charset=utf-8");
		
		//第一次用户发起请求,将此相关数据存放至Cookie,并将Cookie响应到浏览器中。
		String name = "宋江";
		Cookie cookie = new Cookie("username", name); //设置cookie名称与内容。
		
		cookie.setDomain("localhost"); //设置域名
		cookie.setPath("/00000_request/cookie/my_servlet1"); //设置路径
		
		cookie.setMaxAge(60*60*24); //设置有效期:单位秒
		
		httpServletResponse.addCookie(cookie);
		
		PrintWriter printWriter = httpServletResponse.getWriter();
		printWriter.write("<html><body><h1>请求第一个Servlet成功,带回来了一个Cookie。<br><a href='http://localhost:8080/00000_request/cookie/my_servlet1'>点我查看</a></h1></body></html>");
		System.out.println("解析到的Cookie:" + cookie.getName() + ":" + cookie.getValue());
		
		printWriter.flush();
		printWriter.close();
		
	}

	protected void doPost(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws ServletException, IOException {
		doGet(httpServletRequest, httpServletResponse);
	}

}
package com.oracle.one.servlet.cookie;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@WebServlet("/cookie/my_servlet1")
public class MyServlet1 extends HttpServlet {
	
	private static final long serialVersionUID = 1L;
	
	protected void doGet(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws ServletException, IOException {
	
		httpServletRequest.setCharacterEncoding("utf-8");
		httpServletResponse.setContentType("text/html;charset=utf-8");
		
		Cookie[] cookies = httpServletRequest.getCookies();
		
		PrintWriter printWriter = httpServletResponse.getWriter();
		
		if(cookies != null) {
			
			for(Cookie cookie : cookies) {
				printWriter.write("解析到的Cookie:" + cookie.getName() + ":" + cookie.getValue());
				printWriter.flush();
			}
			
		}else {
			printWriter.write("没有任何Cookie。");
		}
		
		printWriter.close();
		
	}

	protected void doPost(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws ServletException, IOException {
		doGet(httpServletRequest, httpServletResponse);
	}

}

Session

case
package com.oracle.one.servlet.session;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

@WebServlet("/session/my_servlet")
public class MyServlet extends HttpServlet {
	
	private static final long serialVersionUID = 1L;

	protected void doGet(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws ServletException, IOException {
	
		httpServletRequest.setCharacterEncoding("utf-8");
		httpServletResponse.setContentType("text/html;charset=utf-8");
		
		HttpSession httpSession = httpServletRequest.getSession(); //获取客户端和服务端之间的连接会话,如果没有则新建一个会话。
		//HttpSession httpSession1 = httpServletRequest.getSession(false); //获取客户端和服务端之间的连接会话,如果没有则根据参数决定:true:新建会话,false:不新建会话,返回null
		
		System.out.println("客户端与服务端连接了一个会话:" + httpSession);
		
		//httpSession.setMaxInactiveInterval(60*5); //最大活跃周期,参数为秒。
		
		//借助会话对象,缓存数据。
		httpSession.setAttribute("id", "001");
		httpSession.setAttribute("age", 20);
		
		//清除HttpSession中指定的数据。
		//httpSession.removeAttribute("id"); 
		
		//清除HttpSession
		//httpSession.invalidate();
		
		PrintWriter printWriter = httpServletResponse.getWriter();
		printWriter.write("<h1>HttpSession会话创建成功!</h1>");
		printWriter.flush();
		printWriter.close();
		
	}

	protected void doPost(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws ServletException, IOException {
		doGet(httpServletRequest, httpServletResponse);
	}

}
package com.oracle.one.servlet.session;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

@WebServlet("/session/my_servlet1")
public class MyServlet1 extends HttpServlet {
	
	private static final long serialVersionUID = 1L;

	protected void doGet(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws ServletException, IOException {
		
		httpServletRequest.setCharacterEncoding("utf-8");
		httpServletResponse.setContentType("text/html;charset=utf-8");
		
		HttpSession httpSession = httpServletRequest.getSession();
		
		String id = (String)httpSession.getAttribute("id");
		Integer age = (Integer)httpSession.getAttribute("age");
		
		System.out.println(id);
		System.out.println(age.toString());
	
		PrintWriter printWriter = httpServletResponse.getWriter();
		
		if(id != null & age != null ) {
		
			printWriter.write("<h1>学生学号:" + id + "<br>学生年龄:" + age + "</h1>");
			printWriter.flush();
			
		}else {
			
			printWriter.write("<h1>没有拿到HttpSession数据。</h1>");
			printWriter.flush();
			
		}
				
		printWriter.close();
		
	}

	protected void doPost(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws ServletException, IOException {
		doGet(httpServletRequest, httpServletResponse);
	}

}
HttpSession的有效期设置

void invalidate()

void setAttribute(String name, Object value)
Object getAttribute(String name)

void removeAttribute(String name)

void setMaxInactiveInterval(int interval)

也可以在web.xml文件中设置。

  <!-- 设置当前项目中所有的HttpSession的生命周期,单位分钟。 -->
  <session-config>
  	<session-timeout>5</session-timeout>
  </session-config>

登录、退出案例

首页

<!DOCTYPE html>

<html>

	<head>
		<meta charset="UTF-8">
		<title>登录页面</title>
	</head>
	
	<body>
	
		<form action="http://localhost:8080/00000_request/session/login_case/login_servlet" method="post">
			
			<p>
				账号:<input type="text" name="username"/>
			</p>
			
			<p>
				密码:<input type="text" name="password"/>
			</p>
			
			<p>
				<input type="submit" value="提交"/>
			</p>
			
		</form>
	
	</body>
	
</html>

首页Servlet

package com.oracle.one.servlet.session.login_case;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

@WebServlet("/session/login_case/index_servlet")
public class IndexServlet extends HttpServlet {
	
	private static final long serialVersionUID = 1L;

	protected void doGet(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws ServletException, IOException {
		
		httpServletRequest.setCharacterEncoding("utf-8");
		httpServletResponse.setContentType("text/html;charset=utf-8");
		
		//获取Session中的缓存身份。
		HttpSession httpSession = httpServletRequest.getSession();
		String username = (String)httpSession.getAttribute("username");
				
		PrintWriter printWriter = httpServletResponse.getWriter();
		
		//如果不为空,表示之前登录成功过,提示欢迎。
		if(username != null) {
				
			printWriter.write("<h1>欢迎:" + username + ",来到后台系统。<a href='" + httpServletRequest.getContextPath() + "/session/login_case/logout_servlet'>退出</a></h1>");
			printWriter.flush();                                                                                              
			
		}else {	
		
			//如果为空,则表示未登录成功,给予提示,并提供链接跳回登录页面。
			printWriter.write("<h1>请先登录!<a href='http://localhost:8080/00000_request/page/00000_servlet/00002_session_login_case/login.html'>点击跳回登录页面</a></h1>");
			printWriter.flush();
			
		}
			
		printWriter.close();
		
	}

	protected void doPost(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws ServletException, IOException {
		doGet(httpServletRequest, httpServletResponse);		
	}

}

登录Servlet

package com.oracle.one.servlet.session.login_case;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

@WebServlet("/session/login_case/login_servlet")
public class LoginServlet extends HttpServlet {
	
	private static final long serialVersionUID = 1L;

	protected void doGet(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws ServletException, IOException {
	
		httpServletRequest.setCharacterEncoding("utf-8");
		httpServletResponse.setContentType("text/html;charset=utf-8");
		
		//获取账号、密码
		String username = httpServletRequest.getParameter("username");
		String password = httpServletRequest.getParameter("password");
		
		String username1 = "admin";
		String password1 = "123456";
		
		//检查账号、密码是否正确。
		if(username.equals(username1) && password.equals(password1)) {
			
			//账号、密码正确;借助Session存储登录用户的身份,打开系统后台首页。
			HttpSession httpSession = httpServletRequest.getSession();
			httpSession.setAttribute("username", username);
			
			String url = httpServletRequest.getContextPath();
			System.out.println("获取的Java Project名称:" + url);
			
			//重定向
			httpServletResponse.sendRedirect(url + "/session/login_case/index_servlet");
			
		}else {
			
			//错误:响应错误提示信息,并跳转至登录页面。
			PrintWriter printWriter = httpServletResponse.getWriter();
			printWriter.write("<h1>登录失败,请重新登录!<a href='http://localhost:8080" + httpServletRequest.getContextPath() + "/page/00000_servlet/00002_session_login_case/login.html'>点击跳回登录页面</a></h1>");
			printWriter.flush();
			printWriter.close();
			
		}
		
	}

	protected void doPost(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws ServletException, IOException {		
		doGet(httpServletRequest, httpServletResponse);
	}

}

退出Servlet

package com.oracle.one.servlet.session.login_case;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

@WebServlet("/session/login_case/logout_servlet")
public class LogoutServlet extends HttpServlet {
	
	private static final long serialVersionUID = 1L;

	protected void doGet(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws ServletException, IOException {
	
		//设置HttpSession会话的登录身份失效
		HttpSession httpSession = httpServletRequest.getSession();
		httpSession.invalidate();
		
		//重定向至登录页面。
		httpServletResponse.sendRedirect(httpServletRequest.getContextPath() + "/page/00000_servlet/00002_session_login_case/login.html");
	
	}

	protected void doPost(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws ServletException, IOException {	
		doGet(httpServletRequest, httpServletResponse);	
	}

}

过滤器

过滤器的应用

监听器

使用监听器统计在线人数

ServletContextListener接口

使用Servlet实现新闻增加

JSP

JSP简介

case

<%@ page language="java" pageEncoding="UTF-8"%>

<!DOCTYPE HTML">

<html>
  <head>  
    <title>JSP page</title>
  </head>
  
  <body>
 
  	<a href="http://localhost:8080/00000_request/page/00000_servlet/00001/b.jsp?id=5">点击</a> <br>
    <a href="/00000_request/page/00000_servlet/00001/b.jsp?id=6">点击</a> <br>
    
  </body>
  
</html>
<%@ page language="java" pageEncoding="UTF-8"%>

<!DOCTYPE HTML>

<html>
  
  <head>  
    <title>JSP page</title>
  </head>
  
  <body>
  
    id=${param.id}
    
  </body>

</html>

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>
		
		<%-- JSP脚本注释 --%>
		
		<%
			for(int i=0; i<5; i++){
				System.out.println("i=" + i);
				out.write("<h2>测试标题。</h2>" + i);
			}
		%>
		
		<%
			for(int i=0; i<5; i++){
				
				out.write("<h3>测试JSP访问。</h3>" + i);
		%>
		
		<%
			}
		%>
		
		<hr>
		
		<h1>测试JSP访问。</h1>
		
		<%!
			public String name = "宋江";
		
			public void test00000(){
				System.out.print("name:" + name);
			}
		%>
		
		<%
			test00000();
		%>
		
		<hr>
		
		<%-- 以下的输出脚本相当于service方法内的out.write();输出。 --%>
		<%= name %>
		<%= 200 %>
		<%= "卢俊义" %>
		
	</body>

</html>

标签、指令

<%@ page language="java" 
         contentType="text/html; charset=utf-8" 
         pageEncoding="utf-8" 
		 import="java.util.*, java.io.*" %>

<%@ include file="00000_jsp.jsp" %> <!-- 动态引入 -->

<!DOCTYPE html>

<html>

	<head>
		<meta charset="utf-8">
		<title>Insert title here</title>
	</head>
	
	<body>
	
		<%
			List<String> list = new ArrayList<>();
		    list.add("宋江");
		    list.add("卢俊义");
		    list.add("吴用");
		    
		    list.forEach(e -> System.out.println(e));
		    
			File file = new File("1.txt");
			
		%>
		
		<!-- JSP页面默认支持:JSP内置标签。
		该引入方式为静态引入,将00000_jsp.jsp编译成1个可以显示的纯HTML网页,引入网页内容到当前网页。
		 -->
		<jsp:include page="00000_jsp.jsp"/>
		
	</body>
	
</html>

内置对象

<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8" 
         isErrorPage="true"%>
    
<!DOCTYPE html>

<html>

	<head>
		<meta charset="utf-8">
		<title>Insert title here</title>
	</head>
	
	<body>
	
		<%
			System.out.println(request); //请求对象
			System.out.println(response); //响应对象
			System.out.println(page); //当前页面对象
			System.out.println(pageContext); //当前JSP页面上、下文对象。
			System.out.println(application); //ServletContext上、下文全局共享数据
			System.out.println(session); //会话对象
			System.out.println(config); //当前Servlet程序的配置对象。
			System.out.println(out); //当前页面的输出流。
			
			System.out.println(exception); //只有当前JSP成为了异常处理代码块,才能识别到该异常对象。
		    
		%>
		
		<%
			pageContext.setAttribute("name", "林冲");
			String name = (String)pageContext.getAttribute("name");
			System.out.println("name=" + name);
			
			//pageContext可以控制其他对象,实现自定义属性值存储:可以操作request中的属性。
			pageContext.setAttribute("name1", "宋江", PageContext.REQUEST_SCOPE); //等同于request.setAttribute("name1", "宋江");
						
			pageContext.setAttribute("name2", "宋江", PageContext.SESSION_SCOPE); //等同于session.setAttribute("name1", "宋江");
						
			pageContext.setAttribute("name3", "宋江", PageContext.APPLICATION_SCOPE); //等同于servletContext.setAttribute("name1", "宋江");
						
			pageContext.setAttribute("name4", "宋江", PageContext.PAGE_SCOPE); //等同于pageContext.setAttribute("name1", "宋江"); 当前页面中
			
		%>
		
	</body>
	
</html>

表单与request对象## 中文乱码

页面间的数据传递

使用JSP保存数据

EL表达式

<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"
	     import="java.util.*, com.oracle.one.jsp.entity.Dog"    
%>
    
<!DOCTYPE html>

<html>

	<head>
		<meta charset="utf-8">
		<title>EL表达式</title>
	</head>
	
	<body>
	
		<%
			pageContext.setAttribute("id", "001");
			request.setAttribute("name", "宋江");
			session.setAttribute("age", 23);
			application.setAttribute("gender", "男");
		%>
		
		${pageScope.id} <br>
		${requestScope.name} <br>
		${sessionScope.age} <br>
		${applicationScope.gender} <br>
		
		<!-- 当EL表达式未指定解析域范围时,将默认从page->request->session->application中依次查找。 如果最终找不到数据,则不显示数据,不报错。-->
		${id} 
		
		<hr>
		
		<%
			int number = 1;
		
		    int[] array = new int[]{1, 2, 3, 4, 5};
		    
		    List<String> names = new ArrayList<>();
		    names.add("宋江");
		    names.add("卢俊义");
		    names.add("吴用");
		    names.add("公孙胜");
		    
		    Map<String, String> map = new HashMap<>();
		    map.put("name", "潘金莲");
		    map.put("name1", "潘巧云");
		    map.put("name2", "阎婆惜");
		    
		    Dog dog = new Dog("旺财", 2);
		    
		    pageContext.setAttribute("number", number);
		    pageContext.setAttribute("array", array);
		    pageContext.setAttribute("names", names);
		    pageContext.setAttribute("map", map);
		    pageContext.setAttribute("dog", dog);
		        
		%>
		
		${number} <br>
		${array} <br>
		${names} <br>
		${map} <br>
		${dog} <br>
		
		<hr>
		
		${names[0]} - ${names[1]} <br>
		${map["name"]} - ${map['name1']} <br>
		${dog.name} - ${dog.age}
		
		<hr>
		
		${pageContext.request.contextPath}
	
	</body>
	
</html>

EL运算符

<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>

<!DOCTYPE html>

<html>

	<head>
		<meta charset="uft-8">
		<title>EL运算符</title>
	</head>
	
	<body>
		
		<%
			pageContext.setAttribute("money", 9);
			pageContext.setAttribute("name", "宋江");
		%>
		
		${money+2} <br>
		${money-2} <br>
		${money*2} <br>
		${money/2} <br>
		${money>10} <br>
		${money>=10} <br>
		${money<10} <br>
		${money<=10} <br>
		${money==10} <br>
		${money eq 100} <br>
		${money>=10?"大于":"小于"} <br>
		${money>=10 and money<=5} <br>
		${money>=10 or money<=5} <br>
		${empty money} <br>
		${empty emoney1} <br>
		${not (money>10)}
		
	</body>
	
</html>

JSTL

内置函数

fn

在这里插入图片描述

<%@ page language="java" contentType="text/html;charset=utf-8" pageEncoding="utf-8"%>

<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>

<!DOCTYPE HTML>

<html>

    <head> 
    
      <meta charset="utf-8"/> 
      <title>JSTL内置函数fn</title>
      
    </head>
  
    <body>

        <%
        	pageContext.setAttribute("name", "宋江"); 
        	pageContext.setAttribute("name1", " hi,卢俊义。");
        %>
        
        ${name} <br>
        ${fn:length(name)} <br>
        ${fn:indexOf(name, "江")} <br>
        ${fn:startsWith(name, "宋")} <br>
        ${fn:substring(name1, 0, 2)} <br>
        ${fn:toLowerCase(name1)} <br>
        ${fn:toUpperCase(name1)} <br>
        ${fn:trim(name1)}
       
    </body>
  
</html>

标签

c:out
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"
		 import="com.oracle.one.jsp.entity.Dog, java.util.*"
%>

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>

<!DOCTYPE HTML>

<html>

  <head>
  	<meta charset="utf-8">  
    <title>c_out</title>
  </head>
  
  <body>
   
  	<%
  		Dog dog = new Dog("宋江", 50);	
  		request.setAttribute("dog", dog);
  		
  		List<String> list = new ArrayList<>();
  		list.add("卢俊义");
  		list.add("吴用");
  		list.add("公孙胜");
  		request.setAttribute("list", list);
  		
  		Map<String, String> map = new HashMap<>();
  		map.put("name", "潘金莲");
  		map.put("name1", "潘巧云");
  		map.put("name2", "阎婆惜");
  		request.setAttribute("map", map);
  		
  		int[] array = new int[]{1, 2, 3};
  		request.setAttribute("array", array);
  	 %>
  
  	${dog.name}
  	=
  	${dog.age}
  	
  	<br>
  	
    <c:out value="${dog.name}"/> 
    =
  	<c:out value="${dog.age * 3}"/>
  	
  	<hr>
  	
  	<c:out value="${list[0]}"/> &nbsp;
  	<c:out value="${list[1]}"/> &nbsp;
  	<c:out value="${list[2]}"/> &nbsp;
  	<c:out value="${list[3]}"/> <!-- List集合中超过下标不输出任何内容 -->
  	
  	<hr>
  	
  	<c:out value="${map['name']}"/> &nbsp;
  	<c:out value="${map['name1']}"/> &nbsp;
  	<c:out value="${map['name2']}"/> &nbsp;
  	<c:out value="${map['name3']}"/> <!-- map集合中访问不存在的键时不输出任何内容 -->
  	
  	<hr>
  	
  	<c:out value="${array[0]}"/> &nbsp;
  	<c:out value="${array[1]}"/> &nbsp;
  	<c:out value="${array[2]}"/> &nbsp;
  	<c:out value="${array[3]}"/> <!-- 数组中超过下标不输出任何内容 -->
  	
  </body>
  
</html>
package com.oracle.one.jsp.entity;

public class Dog {

	private String name;
	private int age;
	
	public Dog(String name, int age) {
		this.name = name;
		this.age = age;
	}
	
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
	
}
c:set
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"
	     import="java.util.*"
%>

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>

<!DOCTYPE HTML>

<html>
  
  <head>  
    <title>c:set</title>
  </head>
  
  <body>
  
    <c:set var="one" value="中国,北京" scope="request"/>
    <c:out value="${one}"/>
    
  </body>
  
</html>
c:if
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"
		 import="com.oracle.one.jsp.entity.Dog"
%>

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>

<!DOCTYPE HTML">

<html>

  <head> 
  	<meta charset="utf-8"> 
    <title>c:if</title>
  </head>
  
  <body>
  
    <%
    	request.setAttribute("a","helloa");
    	request.setAttribute("age","23");
    	
    	Dog dog = new Dog("宋江", 50);
    	request.setAttribute("dog", dog);
     %>
     
     <c:if test="${a=='hello'}">
     	ok <br>
     </c:if>
     
     <c:if test="${a!='hello'}">
     	no ok <br>
     </c:if>
     
     <c:if test="${age==56}">
     	ok 56 <br>
     </c:if>
     <c:if test="${age<56}">
     	no ok 56 <br>
     </c:if>
     
     <c:if test="${age>10 and age<34}">
     	age>10 and age<34 <br>
     </c:if>
     
     <hr>
     
     <c:if test="${dog.age>3}">
     	年龄大于3
     </c:if>
     
  </body>
  
</html>
c:choose
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"
         import="com.oracle.one.jsp.entity.Dog"
%>

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>

<!DOCTYPE HTML">

<html>

  <head>
    <meta charset="utf-8">  
    <title>c:choose</title>
  </head>
  
  <body>
    
    <%
    	Dog dog = new Dog("宋江", 50);
    	
    	request.setAttribute("dog", dog);
     %>
     
     <c:choose>
     
     	<c:when test="${dog.age<18}">
     		<font color="red">未成年</font>
     	</c:when>
     
     	<c:when test="${dog.age>18 and dog.age<50}">
     		<font color="green">青年</font>
     	</c:when>
     
     	<c:otherwise>
     		<font color="blue">中年</font>
     	</c:otherwise>
     
     </c:choose>
     
  </body>
  
</html>
c:foreach
case1
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"
		 import="java.util.*, com.oracle.one.jsp.entity.Dog"
%>

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>

<!DOCTYPE HTML">

<html>

  <head>  
  	<meta charset="utf-8">
    <title>c:foreach</title>
  </head>
  
  <body>

    <%
    	List<Dog> dogs = new ArrayList<>();
     	
    	Dog dog = new Dog("宋江", 50);   	
     	Dog dog1 = new Dog("卢俊义", 51);
     	Dog dog2 = new Dog("吴用", 52);
 
     	dogs.add(dog);
     	dogs.add(dog1);
     	dogs.add(dog2);
     	
     	request.setAttribute("dogs", dogs);
     	
     	@SuppressWarnings("unchecked")
     	List<Dog> dogsObject = (ArrayList<Dog>)request.getAttribute("dogs");
   
     	for(Dog dogSimple : dogsObject) {
     		out.println(dogSimple.getName() + " " + dogSimple.getAge());
     	}

     %>
     
     <br>
     
     <c:forEach items="${dogs}" var="dog" >
     	<c:out value="${dog.name}"/>
     	<c:out value="${dog.age}"/>
     </c:forEach>
     
     <hr>
     
     <c:forEach var="i" begin="1" end="10">
     	<c:out value="${i}"/> -> 
     </c:forEach>
     
     <hr>
     
     <c:forEach var="i" begin="3" end="10" step="2">
     	<c:out value="${i}"/> -->
     </c:forEach>
     
  </body>
  
</html>
case2
<%@page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"
		import="java.util.*, com.oracle.one.jsp.entity.Dog"
%>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>

<!DOCTYPE HTML>

<html>
  
  <head>  
   	<meta charset="utf-8">
    <title>c:forEach</title>
  </head>
  
  <body>
    <%
    	Map<String, Dog> map = new HashMap<>();
    	
    	Dog dog = new Dog("宋江", 50);    	
     	Dog dog1 = new Dog("卢俊义", 51);
    	Dog dog2 = new Dog("吴用", 52);
        map.put("dog", dog);
     	map.put("dog1", dog1);
     	map.put("dog2", dog2);
     	
    	request.setAttribute("map", map);
    	
    	Set<Dog> set = new HashSet<>();
    	set.add(dog);
    	set.add(dog1);
    	set.add(dog2);
    	
    	request.setAttribute("set", set);
    	
     %>
     
     <c:forEach items="${map}" var="mapDog">
     	key=${mapDog.key } 
     	value.name=${mapDog.value.name }
     	value.age=${mapDog.value.age } <br>
     </c:forEach>
     
     <hr>
     
     <c:forEach items="${set}" var="setDog">
     	value=${setDog.name}
     	age = ${setDog.age } <br>
     </c:forEach>
     
     <hr>
     
     <c:if test="${empty map}">
     	没有
     </c:if>
     <c:if test="${!empty set}"></c:if>
     
  </body>
  
</html>
c:remove
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"
	     import="java.util.*"
%>

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>

<!DOCTYPE HTML>

<html>

  <head>  
	<meta charset="utf-8"/>
    <title>c:remove</title>
  </head>
  
  <body>
  	<%
  		request.setAttribute("one", "你好");
   	%>
   	
    <c:out value="${one}"/> <br>
    
    <c:remove var="one"/>
    
    <c:out value="${a}" default="没有了"/>
    
  </body>
  
</html>
c:import
c:redirect
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8" %>

<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

<!DOCTYPE HTML>

<html>
  <head>
  	<meta charset="utf-8"/>  
    <title>c:redirect</title>
  </head>
  
  <body>
  
    <c:redirect url="http://www.baidu.com"/>
    
  </body>
  
</html>
c:forTokes
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>

<!DOCTYPE HTML">

<html>

  <head>  
  	<meta charset="utf-8"/>
    <title>c:forTokes</title>
  </head>
  
  <body>
  	
  	<%
  		request.setAttribute("abc", "12; 56; 你好;ddd; uuu");  /* 12           56; 你好; ddd              uuu */
  	%>
  	 
    <c:forTokens items="${abc}" delims=";" var="temp" begin="0" end="2" step="2">
    	${temp} <br>
    </c:forTokens>
    
  </body>
  
</html>
c:catch
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>

<!DOCTYPE HTML>

<html>
  
  <head>  
  	<meta charset="utf-8">
    <title>c:catch</title>
  </head>
  
  <body>
    
    <c:catch var="myException">
    	<% int i=8/0; %>
    </c:catch>
    
    <c:out value="${myException}"/> <br>
    <c:out value="${myException.message}"/>
    
  </body>
  
</html>

JDBC

package com.greensea.manage.jdbc;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

import org.junit.Test;

public class TestJdbc {
	
	@Test
	public void testJdbc() {
		
		Connection connection = null;
		PreparedStatement preparedStatement = null;
		ResultSet resultSet = null;
		
		try {
			Class.forName("com.mysql.jdbc.Driver");
			
			connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/test_jack?characterEncoding=utf-8", "root", "root");
			preparedStatement = connection.prepareStatement("select * from t_user where id=? and username=?");
			preparedStatement.setString(1, "67"); //参数编号从1开始
			preparedStatement.setString(2, "宋江");
			resultSet = preparedStatement.executeQuery();
			
			while(resultSet.next()) {
				System.out.println(resultSet.getString("id"));
				System.out.println(resultSet.getString("username"));
				System.out.println(resultSet.getString("password"));
				System.out.println(resultSet.getString("age"));
				System.out.println(resultSet.getString("sex"));
				System.out.println(resultSet.getString("email"));
			}
				
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			if(resultSet!=null) {
				try {
					resultSet.close();
				} catch (SQLException e) {
					e.printStackTrace();
				}
			}
			if(preparedStatement!=null) {
				try {
					preparedStatement.close();
				} catch (SQLException e) {
					e.printStackTrace();
				}
			}
			if(connection!=null) {
				try {
					connection.close();
				} catch (SQLException e) {
					e.printStackTrace();
				}
			}
		}
		
	}

}

JDBC概述

设置配置文件

PreparedStatement概述

使用通用类优化数据库操作

数据源与连接池

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值