1. Servlet
1.1 概述
Servlet是javaweb的三大组件之一(Servlet,Filter,Listener),属于动态资源。其作用是处理请求,服务器会把接收到的请求交给Servlet处理,Servlet中通常需要:接收请求数据,处理请求,完成响应。
1.1.1 实现Servlet的方式:
实现Servlet接口;继承GenericServlet类;继承HttpServlet类。
1.1.2 Servlet接口中的方法
init(ServletConfig config);
getServletConfig();
service(ServletRequset req,ServletResponse res);
getServletInfo();
destory();
1.1.3 Servlet声明周期的方法
init(ServletConfig):创建之后(1次),ServletConfig对象封装了Servlet的配置信息;
service(ServletRequest request,ServletResponse response):每次处理请求时都会被调用(多次),会调用本类的service(HttpServletRequest request,HttpServletResponse response);
destroy():消失之前(1次)
1.1.4 Servlet类的特性
Servlet类采用单例模式,一个servlet类只有一个对象,项目中有多个servlet类。
线程是不并行的,效率高。
1.2 HttpServlet
HttpServlet是GenericServlet的子类,继承下来的service(req,resp)方法会调用本类的service(HttpServletRequset,HttpServletResponse)方法,根据请求方式(GET/POST)调用对应的doGet()/doPost()方法,HttpServlet的子类需要重写doGet()/doPost()方法。
1.3 ServletContext
域对象,一个web应用只有一个ServletContext对象,它在服务器启动时创建,服务关闭时销毁。可以读取全局配置参数,可以搜索当前工程下的资源文件,可以获取当前工程的名字。
1.4 JavaWeb四大作用域
PageContext,ServletRequest,HttpSession,ServletContext
1.5 Servlet三大作用域
requset,session,application
1.6 request和response
requset类型为HttpServletRequset,response的类型为HttpServletResponse,客户端每发送一个请求,服务器就创建一个request对象和response对象,请求数据封装到request中,通过request对象获取请求数据,将响应数据封装到response中,向客户端完成响应。
request.getParameter(参数名):获取请求数据String类型,通过表单或者链接提交的数据,获取POST/GET传递的参数值,用于客户端重定向。
request.getAttribute(参数名):获取对象容器中的值Object类型,获取session的值,用于服务器重定向时。
1.7 转发forward和重定向rediect
请求转发是一个请求一个响应,重定向时两次请求两次响应;
转发是在一个请求中跨越多个动态资源(jsp/servlet),共享一个request数据,重定向时两次请求,不共享request数据;
转发的url地址栏不发生改变,重定向显示后一请求的地址;
转发只能转发到本项目的其他servlet,重定向可以重定向到其他项目的servlet;
1.8 解决客户端和服务器端的乱码
三种方式:
response.setCharacterEncoding("utf-8");
response.setHeader("Content-type","text/html;charset=utf-8");
response.setContentType("text/html;charset=utf-8");
2. JSP
2.1 概述
JSP是javawen服务器端的动态资源,和html页面一样用于显示数据和获取数据,jsp文件有html和java脚本和jsp指令组成。
jsp是一种特殊的servlet,当jsp页面第一次被访问时,服务器会把jsp编译成java文件,把java文件编译成class文件,后边再请求同一jsp时直接使用。
2.2 java脚本类型
三种类型:
声明:用来创建类的成员变量和成员方法(类似于类)
<%! int i=0;
Object obj=new String();
%>
表达式:用于输出一条表达式或变量的结果
<%= i %> <%= obj.toString() %>
代码段:用于写java代码片段(类似于方法)
<%
int j=0;
j++;
System.out.println("j="+j);
%>
2.3 jsp三大指令
2.3.1 page指令
<%@page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@page import="java.util.*" %> <!-- 导包 -->
<%@page errorPage="error.jsp" %> <!-- 设置异常跳转页面 -->
2.3.2 include指令
在翻译阶段将外部文件的内容和当前jsp合并
<%@include file="header.jsp"%>
2.3.3 taglib指令
导入标签库,perfix属性设置前缀,uri属性指定标签库的位置
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
2.3.4 九大内置对象
request、response、pagecontext、session、application、config、out、page、exception
request:HttpServletRequset的对象,获取请求数据
response:HttpServletResponse的对象,返回响应数据
pagecontext:页面上下文对象,javaweb域对象,可以访问所有的内置对象
page:当前jsp页面的“this”,当前对象
session:HttpSession的对象,用户访问时建立回话对象,分配唯一的sessionID
application:ServletContext的对象,javaweb域对象,所有用户用一个
config:相当于ServletConfig,记录配置信息
out:向客户端发送文本数据
exception:异常对象,只能在异常页面使用
2.3.5 jsp动作标签
包含指定的页面
<jsp:include page="header.jsp" />
转发到指定页面
<jsp:forward page="b.jsp" />
向其他页面传递参数
<jsp:include page="/b.jsp">
<jsp:param value="zhangSan" name="username"/>
</jsp:include>
注入bean
<jsp:useBean id="user" class="com.entity.User"></jsp:useBean>
为指定bean设置属性
<jsp:setPropertry property="username" name="user" value="xiaoming"></jsp:setPropertry>
获取属性值
<jsp:getPropertry property="username" name="user"></jsp:getPropertry>
3. EL表达式
通过${参数}替代<%= 参数 %>
EL操作四大域的内置对象:
pageScope,requestScope,sessionScope,ApplicationScope
${pageScope.user}:输出pageContext.getAttribute("user")
${requestScope.user}:输出request.getAttribute("user");
${sessionScope.user}:输出session.getAttribute("user");
${applicationScope.user}:输出application.getAttribute("user");
4. JSTL标签库
输出字符串aaa,输出属性aaa
<c:out value=“aaa”/> <c:out value=“${aaa}”/>
创建var变量并赋值
<c:set var=“a” value=“hello”/>
判断条件
<c:if test=“条件” ></c:if >
遍历
<c:forEach >
5. JavaWeb三大组件
5.1 Servlet
5.2 Filter过滤器
5.3 Listener监听器
6. JDBC
JDBC就是java数据库连接,用java语言操作数据库。
JDBC的核心类有:DriverManager,Connection,Statement,ResultSet
6.2 JDBC访问数据库的步骤
引入必要的类,加载注册JDBC驱动程序,标示数据源,分配一个Connection对象,分配一个Statement对象,使用Statement对象操作数据库,从返回的ResultSet对象中获取数据,关闭ResultSet对象,关闭Statement对象,关闭Connection对象。
//加载驱动
Class.forName("com.mysql.jdbc.Driver")
//获取连接
Connection con = DriverManager.getConnection(“jdbc:mysql://localhost:3306/mydb1”,”root”,”123”);
//得到声明
Statement stmt = con.createStatement();
//sql语句
String sql = “insert into user value(’zhangSan’, ’123’)”;
//执行更新sql
int m = stmt.executeUpdate(sql);(这里的m指的是影响的行数)
//执行查询sql
ResulSet rs=stmt.executeQuery(sql);
rs.next();
rs.getString(下标);(下标是从1开始,而不是从零)
//关闭流
rs.close();
stmt.close();
con.close();