富贵必从勤苦得,男儿须读五车书

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

5. 返回一个动态图片

6. 请求转发

servlet 中还是用来处理表单请求

跳转至jsp (请求转发)

jsp 用来生成html代码并返回

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

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

作用域传参

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

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

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

getUsername()