再学习servlet

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/feiyanaffection/article/details/82631295

Servlet

可以参考这篇详解:https://blog.csdn.net/hejingyuan6/article/details/30273879

概念: 服务器端小程序
作用: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>

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

这些数字称为响应状态码

猜你喜欢

转载自blog.csdn.net/feiyanaffection/article/details/82631295