java web养成 - 基础与servlet

一、开发工具idea

二、创建简单的Java项目

图一
图二 选中Web Application
配置tomcat

三、WEB-INF 是安全目录,它之外的文件、目录tomcat启动后就可以通过url访问

静态文件区

四、初识servlet

servlet 是一个web小程序

1.servlet创建方法①

package cn.luochao.web.servlet;
import javax.servlet.*;
import java.io.IOException;
public class ServletDemo1 implements Servlet {
    // 最好不要在servlet中定义变量
    @Override
    public void init(ServletConfig servletConfig) throws ServletException {
        System.out.println("init:默认情况下第一次访问时创建");
    }
    @Override
    public ServletConfig getServletConfig() {
        System.out.println("config");
        return null;
    }
    @Override
    public void service(ServletRequest servletRequest, ServletResponse,servletResponse) throws ServletException, IOException {
        System.out.println("service");
    }
    @Override
    public String getServletInfo() {
        System.out.println("info");
        return null;
    }
    @Override
    public void destroy() {
        System.out.println("destory");
    }
}
<!--路由映射-->
<servlet>
    <servlet-name>demo1</servlet-name>
    <servlet-class>cn.luochao.web.servlet.ServletDemo1</servlet-class>
    <!--<load-on-startup>-1</load-on-startup>--><!--默认为负数第一次访问时init-->
</servlet>
<servlet-mapping>
    <servlet-name>demo1</servlet-name>
    <url-pattern>/demo1</url-pattern>
</servlet-mapping>

2.创建servlet路由方法②继承GenericServlet

package cn.luochao.web.servlet;
import javax.servlet.GenericServlet;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebServlet;
import java.io.IOException;
**@WebServlet("/demo2")** // 代替了web.xml中的路由映射
public class ServletDemo2 extends GenericServlet {
    @Override
    public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
        System.out.println("GenericServlet正常");
    }
}

**3.创建servlet路由方法③继承HttpServlet(推荐)

package cn.luochao.web.servlet;

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({"/demo3","/dd3","/ddd3","/uuuu/dddd4"})** // ==一个servlet可以通过WebServlet定义多个路由,层目录等==

public class SevletDemo3 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("doGet..........");
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("doPost.................");
    }
}

五 Request和Response

这两个对象由服务器(tomcat等)创建的

(一) Request对象用来获取请求消息

HttpServletRequest

  1. 常用的获取请求行数据的方法
    GET /demo/demo01?name=zhangsan
String method = req.getMethod(); // 获取请求方式
String path = req.getContextPath(); // 获取路径
String uri = req.getRequestURI(); // 获取ur
StringBuffer url = req.getRequestURL(); // url
String param = req.getQueryString(); // 获取参数
String username = req.getParameter("username"); // 获取参数
String version = req.getProtocol(); // 获取协议及版本
String user = req.getRemoteUser(); // 获取远程信息
String addr = req.getRemoteAddr(); // 获取远程信息
String ip = req.getRemoteHost(); // 获取远程信息
String agent = req.getHeader("user-agent"); // 获取请求头
int port = req.getRemotePort(); // 获取远程信息
System.out.println("doGet..........");
// 获取所有请求头
Enumeration<String> heardersNames = req.getHeaderNames();
while (heardersNames.hasMoreElements()){
    String name = heardersNames.nextElement();
    System.out.println(name + " ========> " +req.getHeader(name));
}
resp.getWriter().write("do something!");
  1. POST请求体获取
BufferedReader br = req.getReader();
       String line = null;
       while(line == br.readLine()){
           System.out.println(line);
       }
  1. 获取请求参数的通用方法(4种)
String username = req.getParameter("username"); // 获取参数方法1
String[] username = req.getParameterValues("username"); // 获取方法2
Enumeration<String> heardersNames = req.getHeaderNames();
while (heardersNames.hasMoreElements()){
    String name = heardersNames.nextElement();
    System.out.println(name + " ========> " +req.getHeader(name));
}
Map<String, String[]> paramMap = req.getParameterMap();
  1. 请求转发
    一种在服务器内部进行的资源跳转,如转发到servlet3
    req.getRequestDispatcher("/demo3").forward(req, resp);
    特点:
    在服务器内部执行,url地址栏不变,服务端使用
    只能转发到当前服务器内部资源,
    一次请求
  2. 共享数据
    域对象:一个有作用范围的对象,可以在一定范围内共享对象
    request域:代表一次请求的范围,一般用于请求转发的多个资源中共享数据。
    req.setAttribute(String name, Object obj)
    req.removeAttribute(String name, Object obj)
    Object obj = req.getAttribute(name)
  3. 获取servletContext
  4. 乱码解决
    req.setCharacterEncoding(“utf-8”); // 解决乱码

使用beanutils来实现Java实体与map集合的互转,或者对象的操作

(二)Response对象用来设置响应消息

HttpServletResponse 设置响应行,头,体等
进行重定向:资源跳转的一种方式,

  • 客户端使用
    重定向:302
    response.setRedirect("/demo4")
    重定向地址栏变化(路由变化,数据不能共享),两次请求,可以访问其他网站

  • 转发是在服务器内部使用资源,不需要虚拟路径

  • 重定向是在servlet间跳转需要,虚拟路径,但是虚拟路径会改变,所以要动态获取拼接 String contextPath = req.getContextPath()

  • 响应体状态代表什么意思

(三)ServletContext对象

request.getServletContext()
servletContext对象功能
在这里插入图片描述

(四)会话技术

一次会话中包含多次请求和响应:浏览器第一次给服务器发送请求,会话建立,直到有一方断开会话,会话销毁

  • 多次请求间共享数据

1.客户端会话技术cookie
cookie增删
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.服务端会话技术session
在这里插入图片描述

  • 获取session对象
    在这里插入图片描述
    *写入session
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

3 == JSP入门学习 ==
在这里插入图片描述
在这里插入图片描述
指令:

  • page
    在这里插入图片描述
  • include
    在这里插入图片描述
  • taglib
    在这里插入图片描述
    在这里插入图片描述
  • 内置对象
    在jsp页面不需要创建,直接使用的对象!
    在这里插入图片描述
    4.MVC
    在这里插入图片描述
    在这里插入图片描述
    5.El表达式
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    6.JSTL标签
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
(五) web.xml的filter过滤器

当访问web服务器时,filter拦截请求,完成一些通用的特殊的功能,比如:登录验证、编码设置等、敏感词汇验证。
过滤器快速入门
在这里插入图片描述
2.代码

package cn.luochao.web.filter;

import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import java.io.IOException;
@WebFilter("/*") // 意思访问所有的资源之前都会拦截过滤
public class FilterDemo1 implements Filter {
   @Override
   public void init(FilterConfig filterConfig) throws ServletException {
   }
   @Override
   public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
       System.out.println("filterDemo1被执行了。。。。。。。。");
       //放行
       filterChain.doFilter(servletRequest, servletResponse);
   }
   @Override
   public void destroy() {

   }
}

3.过滤器细节
配置:方式一
在这里插入图片描述
在这里插入图片描述
拦截方式的配置
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

方式二
@WebFilter("/*") // 意思访问所有的资源之前都会拦截过滤

  • Filter生命周期
package cn.luochao.web.filter;

import javax.servlet.*;
import java.io.IOException;


public class FilterDemo3 implements Filter {
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        // 服务器启动时执行, 用于加载资源
        System.out.println("init  filterDemo3。。。。。。。。。。。");
    }
    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        // 对req处理
        System.out.println("filterDemo3被执行了。。。。。。。。");
        //放行
        filterChain.doFilter(servletRequest, servletResponse);
        // 对rep处理
        System.out.println("filterDemo3回来了了。。。。。。。。");
        
    }
    @Override
    public void destroy() {
        // 服务器停止时执行,用来释放资源
        System.out.println("destroy  filterDemo3。。。。。。。。。。。");
    }
}

== 多个过滤器执行==
在这里插入图片描述
在这里插入图片描述

  • 登录验证
    在这里插入图片描述
  • 敏感词汇过滤
    使用装饰设计模式(动态代理增强方法功能)
(六) web.xml的listener监听器

web的三大组件之一
事件监听机制
在这里插入图片描述
在这里插入图片描述
ContextLoaderListener 监听servlet的创建和销毁

<listener>
	<listener-class>
		org.springframework.web.context.ContextLoaderListener
	</listener-class>
</listener>
发布了17 篇原创文章 · 获赞 0 · 访问量 896

猜你喜欢

转载自blog.csdn.net/qq_36833168/article/details/103703536