Servlet深入

本文详细介绍了Servlet的概念、作用及其在Tomcat环境下的运行机制。涵盖了Servlet的生命周期、请求处理方法(doGet与doPost)以及如何结合数据库展示数据。同时,探讨了JSP与Servlet的配合使用,包括JSP的基本构成、EL表达式和JSTL标签库的应用。

Servlet深入

概念:

服务器端小程序

作用: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 中有 

1. 指令: `<%@ 指令名 %>`

2. 脚本:  `<%  可以是任意java代码  %>`

3. 表达式: `<%= 表达式 %>` 把执行结果显示在页面上

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

<c:forEach items="要遍历的集合" var="临时变量名" begin="起始数字" end="结束数字">

    ${临时变量名}
    
</c:forEach>

要遍历的集合 必须使用${} 从作用域获取

6.2 if

<c:if test="布尔条件">内容</c:if>

 

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 这个文件没有修改,请浏览器使用上一次缓存的文件

这些数字称为响应状态码

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值