Servlet-jsp

Servlet 与 JSP

  • nginx 可以部署静态内容
  • tomcat 可以部署动态内容

常见操作

  • startup.bat
  • shutdown.bat ctrl+C 找后台 java 进程
  • server.xml
    • 可以端口,配置字符集,虚拟主机 …

maven
pom.xml GAV 坐标

<dependency>
   <groupId>组织
   <artifactId>项目
   <version>版本
</dependency>

servlet 服务器端小程序

@WebServlet(urlPatterns="/映射路径")
class MyServlet extends HttpServlet {

    public void service(HttpServletRequest request, HttpServletResponse response) throws ServletException{
        // 处理请求和响应的代码
        String 参数值 = request.getParameter("请求参数名");
        // 用response返回响应
        response.setCharacterEncoding("utf-8");
        response.setContentType("text/html;charset=utf-8");
        response.getWriter().print("<html>");
    }
}

jsp 也可以动态html

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

==============================

Servlet

1. post 请求中的汉字会有乱码问题(重点)

原因:

String sex = URLEncoder.encode("男", "utf-8");
System.out.println(sex);
// iso-8859-1
String result = URLDecoder.decode("%E7%94%B7", "iso-8859-1");
System.out.println(result); // ç”·

解决方法,在调用 getParameter 方法之前:

request.setCharacterEncoding("utf-8")

2. request 重要方法(重点)

request.getParameter("参数名") ==> 返回参数值
request.getParameterValues("参数名") ==> 返回参数值的数组
request.setCharacterEncoding("解码的字符集");

request.getMethod(); ==> 返回请求方式 get, post
request.getRequestURI(); ==> 返回当前的请求路径
request.getRemoteAddr(); ==> 获取访问者的ip地址

3. 一个请求分别几个部分(了解)

GET 两个部分
GET 路径/HTTP 1.1   ==> 请求行
请求头
    Host: 要访问那个虚拟主机 一个服务器下有多有 host, 每一个host 下,又有多个应用程序
    Accept: 可以处理的内容格式:例如 text/html
    Accept-Encoding : 能够支持的压缩格式
    Accept-Language : 支持的语言, 例如 zh-CN
POST 三个部分
    Content-Type: 请求体的格式 application/www-form-urlencoded (普通表单格式)
    Content-Length: 请求体内容的长度
请求体
    post的请求参数放入了请求体当中,例如:username=zhangsan&password=123
    如果有中文,会自动编码 

4. 响应分成3个部分(了解)

  1. 状态码

    • 200 表示响应正确返回
    • 404 表示请求的资源不存在
    • 500 表示服务器内部出现了异常
    • 304 表示该内容没有被修改,那么服务器只会返回状态码和头,不需要返回响应体(图片,html,css,js)
    • 400 请求参数格式有误.
    • 403 验证没通过,或权限不足
  2. 响应头

    • content-type: 响应的内容格式, 例如 text/html;charset=utf8
    • content-length: 响应体的长度(字节)
    • Date: 响应生成时间
  3. 响应体
    html内容,图片内容

5. 返回一个动态图片(了解)

package web;

import javax.imageio.ImageIO;
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 java.awt.*;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.util.Random;

@WebServlet(urlPatterns = "/servlet1")
public class Servlet2 extends HttpServlet {
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        // 图片验证码
        // 1. 创建图片对象, 构造参数分别代表 宽、高、图片格式
        BufferedImage image = new BufferedImage(200, 100, BufferedImage.TYPE_INT_RGB);
        // 2. 创建画布对象
        Graphics2D g = image.createGraphics();
        // 3. 填充画布
        g.setColor(Color.cyan);
        g.fillRect(0,0,200,100);
        //写入文字
        g.setColor(Color.BLACK);
        g.setFont(new Font("微软雅黑", Font.ITALIC, 32));
        String s = random();
        g.drawString(s,0,32);
        g.setColor(Color.RED);
        g.drawLine(0,0,200,100);
        // 4. 把图片内容输出到响应
        resp.setContentType("image/png");
        // 参数1 图片对象, 参数2 图片压缩格式 png|jpeg, 参数3: 输出字节流
        ImageIO.write(image,"png",resp.getOutputStream());
    }
    Random random = new Random();
    String str = "abcdefghijklmnopqrsnuvwxyz1234567890";
    public String random(){
        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < 4; i++) {
            int i1 = random.nextInt(str.length());
            sb.append( str.charAt(i1));
        }
        return sb.toString();
    }
}

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script>
        function changeImg() {
            document.getElementById("imge").src = "servlet1?a="+new Date().getTime();
        }
    </script>
</head>
<body>

<img src="servlet1"  onclick="changeImg()" id="imge"/>
</body>
</html>

6. 请求转发(重点)

servlet 中还是用来处理表单请求
跳转至jsp (请求转发)

jsp 用来生成html代码并返回

request.getRequestDispatcher("jsp路径").forward(request, response);

如何把servlet中的变量传递给jsp显示

作用域传参

request.setAttribute("变量名", 对象);

取(在jsp页面),通过 EL 表达式取

${ 变量名 }
${ 变量名.属性名 }    el 表达式中的属性名,对应着java对象中的 get,set方法名

getUsername()

package web;

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 java.io.IOException;

@WebServlet(urlPatterns = "/servlet3")
public class Servlet3 extends HttpServlet {
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("servlet中执行的操作");

        User user = new User("张三", "23");
        req.setAttribute("u",user);
        req.getRequestDispatcher("2.jsp").forward(req,resp);
    }
}
<%--
  Created by IntelliJ IDEA.
  User: Administrator
  Date: 2019/1/14
  Time: 11:49
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<p>返回jsp消息</p>

获取作用域中的变量值
<hr>
${u.userName} ${u.password}
</body>
</html>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值