概念: 服务器端小程序
作用:1) 处理请求 2) 返回响应
运行环境:Tomcat (apache) 8.5 支持servlet 3.1
Tomcat: 目录结构
bin 脚本目录 startup.bat shutdown.bat(ctrl+c)
conf 配置目录 默认端口8080, server.xml 搜索8080 然后修改
logs 日志目录
webapps 应用程序目录
编写servlet
- java类要继承 HttpServlet
-
在servlet类上添加注解 @WebServlet(urlPatterns="/servlet路径")
http://ip地址:8080/servlet路径?参数名=参数值 (get请求)
-
重写(覆盖)
public void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 1. 处理请求 request.setCharacterEncoding("utf-8"); // 设置解码字符集 request.getParameter("参数名"); // 返回参数值 String // 2. 返回响应 response.setContentType("text/html;charset=utf-8"); // 设置响应的内容格式,及字符编码 PrintWriter w = response.getWriter(); // 拿到字符输出流 w.println("html代码"); }
1. servlet 的生命周期
浏览器首次向此servlet发送请求时,会创建它的实例对象;以后再发送请求使用的仍然是第一次创建的对象。
结论:整个生命周期中,servlet只有一个实例(单例的)
1) 构造方法首先执行(只执行一次)
2) 初始化方法init (只执行一次)
3) 服务方法 service (反复被执行)来一次请求执行一次
4) 销毁方法 destroy (只执行一次)在服务器停止前,或重新部署时
2. doGet与doPost
覆盖service方法,可以处理所有类型的请求
覆盖doGet方法,仅能处理get方式的请求
覆盖doPost方法,仅能处理post方式的请求
3. 练习,把数据库中的数据展现在页面上
一个java web项目:
|-
|-WEB-INF (受保护不能直接访问)
|-classes 放自己编写的java类
|-lib 放第三方的jar包
|-css 放样式表
|-js 放js脚本
|-jsp 放网页文件
|-index.jsp 首页面 如果没有写具体的地址,会按 index.html, index.jsp
注意:在一个项目内,多个servlet的urlPatterns不能重复,要确保唯一
使用serlvet生成html标签,代码难以维护,可读性差,容易出错。
4. jsp
java server page
用途:主要用来生成html标签
在表现形式上类似于html 但多了一行
<%@ page contentType="text/html;charset=utf-8" %>
上面的代码称为 page 指令,主要作用就是指明此页面是一个jsp页面,并且通过contentType说明他的字符编码和格式
jsp 中有
- 指令:
<%@ 指令名 %>
- 脚本:
<% 可以是任意java代码 %>
- 表达式:
<%= 表达式 %>
把执行结果显示在页面上
5. EL表达式语言
expression language 在jsp用来展示结果的语言
语法${ 表达式语言 }
要用el表达式显示复杂的内容,需要把内容提前放入作用域
, el再从作用域
中把内容取出来显示
// 设置属性
pageContext.setAttribute("名称", Object); // 把内容起一个名字放入作用域
之后就可以通过EL表达式
${pageScope.名称}
el表达式可以通过
${对象.属性名} 但这里的属性名,依据是对象的get方法,而不是私有属性名
把get方法中get去掉(或把is方法的is去掉),剩余的单词首字母小写,作为对象的属性名,例如
getName() ==> name
getUsername() ==> username
getHelloWorld() ==> helloWorld
isClose() ==> close
6. JSTL
java 标准标签库
java standard tag library
主要的工具就是配合el表达式,实现循环,条件判断等功能
前提: 加入jstl-1.2的jar包
导入标签库
<%@ taglib uri="标签库唯一标识" prefix="前缀" %>
6.1 forEach
${临时变量名}
要遍历的集合 必须使用${} 从作用域获取
6.2 if
内容
7. MVC 思想
Model 模型 ==> 数据(例如从数据库查询出来的list集合, 里面包含java对象)
View 视图 ==> 数据的展现形式 (jsp就是一种视图技术)
Controller 控制器 ==> 把模型和视图联系起来 (servlet 充当控制器作用)
由servlet器查询数据,把数据放入作用域,跳转至jsp视图
jsp视图从作用域中获取数据,并展示
注意: 服务器常见的错误类型
500 Internal Server Error 服务器内部错误,由于应用程序自己没有正确处理异常,异常抛给了tomcat,这时就会出现500
404 Not Found 资源未找到错误,发生于要访问的资源不存在(资源可能是servlet, jsp, html)
405 Method Not Allowed 方法不支持,
当没有覆盖doGet但发送了get请求时
当没有覆盖doPost但发送了post请求时
200 OK 表示这次请求正常,没有错误
304 这个文件没有修改,请浏览器使用上一次缓存的文件
这些数字称为响应状态码