Java Web主要技术点理解

JavaWeb

在这里插入图片描述

  • get:请求能够携带的参数比较少,大小有限制,会在浏览器的URL地址显示数据内容,不安全,但是高效

  • post:请求能够携带的参数没有限制,大小没有限制,不会在浏览器的URL地址显示数据内容,安全,但不高效

  • 删除Maven的src文件,构建一个主工程,可以再里边新建Module子文件,聚合模块项目,这样父pom.xml配置过得子模块可以直接使用

  • 编写Servlet的映射:我们写的是java程序,但是需要通过浏览器访问,而浏览器需要连接web服务器,所以需要在web服务中注册我们写的Servlet,还需给它一个浏览器能够访问到的路径

   <!--注册的servlet-->
    <servlet>
        <servlet-name>hello</servlet-name>
        <servlet-class>com.juntao.servlet.HelloServlet</servlet-class>
    </servlet>
    <!--servlet的请求路径-->
    <servlet-mapping>
        <servlet-name>hello</servlet-name>
        <url-pattern>/hello</url-pattern>
    </servlet-mapping>
 	//固有的映射路径优先级最高,如果找不到就会走默认的处理请求 /*请求最先执行
            
  • Servlet是由Web服务器调用,web服务器在收到浏览器请求之后

在这里插入图片描述

ServletContext

web容器在启动的时候,它会为每个web程序都创建一个ServletContext对象,它代表了当前的web应用,它在所有Servlet之上,是由web容器创建的

共享数据:在这个Servlet中保存的数据(例如:账号信息),可以在另外一个Servlet中获取,它提供了最简单的Servlet之间通信的方式

在这里插入图片描述

public class HelloServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
      System.out.println("hello");
      //获取ServletContext对象
      ServletContext context = this.getServletContext();
      String name = "zjt";
      //将数据存入ServletContext中,key为name,值为name
      context.setAttribute("name",name);
    }
}

public class GetServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
      ServletContext servletContext = this.getServletContext();
      //源码 public Object getAttribute(String name);用的String所以强转一下
      //HelloServlet存入了name的值,GetServlet才能取得到,否则先访问get结果为 名字null
      String name = (String)servletContext.getAttribute("name");
      //将编码方式和字符集更改
      resp.setContentType("text/html;charset=utf-8");
      //调用getWriter.print喷到页面上
      resp.getWriter().print("名字"+name);

    }
   <servlet>
        <servlet-name>hello</servlet-name><!--请求name-->
        <servlet-class>com.juntao.servlet.HelloServlet</servlet-class><!--请求class-->
    </servlet>
    <servlet-mapping> <!--请求路径-->
        <servlet-name>hello</servlet-name><!--请求name-->
        <url-pattern>/hello</url-pattern><!--请求url-->
    </servlet-mapping>

    <servlet>
        <servlet-name>getc</servlet-name>
        <servlet-class>com.juntao.servlet.GetServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>getc</servlet-name>
        <url-pattern>/getc</url-pattern>
    </servlet-mapping>

请求转发

public class ServlerDome02 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("进入了ServlerDome02");
        ServletContext context = this.getServletContext();
        //转发的请求路径,和调用forward实现请求转发
        context.getRequestDispatcher("/url").forward(req,resp);
    }
}

在这里插入图片描述

重定向

在这里插入图片描述

web资源B收到客户端A的请求后,它会通知A客户端去访问另一个web资源C,这个过程叫做重定向

//重定向,状态值302
resp.sendRedirect("/r/hello");

重定向和转发的区别在于,页面都会实现跳转,不同点在于,请求在转发的时候,url不会产生变化,重定向时候,url地址栏会发生变化

保存会话的两种技术

cookie

  • 客户端技术(响应,请求)

session

  • 服务器技术,利用这个技术,可以保存用户的会话信息,我们可以把信息或者数据放在Session中!

常见场景:网站登录之后,下次不用再登录了,第二次访问直接就上去了!

Cookie

在这里插入图片描述

  1. 从请求中拿到cookie信息
  2. 服务器响应给客户端cookie
1.Cookie[] cookies = req.getCookies();//获得cookie
2.cookie.getName()//获取cookie中的key
3.cookie.getValue()//获取cookie中的值
4.new Cookie("lastLoginTime", System.currentTimeMillis() + "");//新建一个cookie
5.cookie.setMaxAge(24*60*60);//设置cookie有效期
6.resp.addCookie(cookie);//响应给客户端一个cookie

cookie一般会保存在本地的用户目录下appdata;

Session

在这里插入图片描述
什么是Session:

  • 服务器会给每一个用户(浏览器)创建一个Session对象
  • 一个Session独占一个浏览器,只要浏览器没关闭,这个Session就存在
  • 用户登录之后,整个网站它都可以访问!–>保存用户的信息;保存购物车的信息……
  • 在整个网站中,经常会使用的数据,我们将它保存在Session中

Session和Cookie的区别:

  • Cookie是把用户的数据写给用户的浏览器,浏览器保存(可以保存多个)
  • Session把用户的数据写到用户独占的Session中,服务器端保存(保存重要的信息,减少服务器资源的浪费)
  • Session对象由服务创建
 @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //解决乱码
        resp.setContentType("text/html;charset=utf-8");
        //得到一个session
        HttpSession session = req.getSession();
        //存入session
        session.setAttribute("name","zjt");
        //获取s的id
        String sessionid = session.getId();
        //判断是不是新创建的s
        if (session.isNew()){
            resp.getWriter().write("session创建成功,ID为:"+sessionid);
        }else {
            resp.getWriter().write("session已经在服务器存在了,ID为:"+sessionid);
        }
        //s创建时候做了什么事情
        // Cookie cookie = new Cookie("JSESSIONID",sessionid);
        //resp.addCookie(cookie);
    }

 	//得到Session
    HttpSession session = req.getSession();
    Entity entity = (Entity) session.getAttribute("name");

    HttpSession session = req.getSession();
    //移除属性
    session.removeAttribute("name");
    //手动注销session
    session.invalidate();

会话自动过期:web.xml配置

    <!--设置session的自动过期,默认失效时间-->
    <session-config>
        <!--以分钟为单位-->
        <session-timeout>15/session-timeout>
    </session-config>

JSP

浏览器向服务器发送请求,不管访问什么资源,其实都是在访问Servlet

JSP最终也会被转换为一个Java类!

JSP本质上就是一个Servlet

  public void _jspInit() {
  } 		  //初始化
  //销毁
  public void _jspDestroy() {
  }
  //JSPservlet
  public void _jspService(HttpServletRequest request,HttpServletResponse response) 

1.判断请求

2.内置一些对象

final javax.servlet.jsp.PageContext pageContext;//页面上下文
javax.servlet.http.HttpSession session = null;  //session
final javax.servlet.ServletContext application; //applicationContext
final javax.servlet.ServletConfig config;		//config
javax.servlet.jsp.JspWriter out = null;			//out
final java.lang.Object page = this;				//page:当前
HttpServletRequest request						//请求
HttpServletResponse response					//响应

在这里插入图片描述

在JSP页面中,只要是JAVA代码就会原封不动的输出,如果是HTML代码,就会被转换为:out.write("\r\n"),这样的格式,喷到前段

常用作用域

保存的数据只在一个页面中有效
 pageContext.setAttribute("name","zjt");
保存的数据只在一次请求中有效,请求转发会携带这个数据
 request.setAttribute("name","zjt2");
保存的数据只在一次会话中有效,从打开浏览器到关闭浏览器
 session.setAttribute("name","zjt3");
保存的数据只在服务器中有效,从打开服务器到关闭服务器
 application.setAttribute("name","zjt4");

request:客户端向服务器发送的请求,产生的数据,用户看完就没用了,比如:新闻,用户看完没用的!

session:客户端向服务器发送的请求,产生的数据,用户用完一会还有用,比如:购物车;

application:客户端向服务器发送的请求,产生的数据,一个用户用完了,其他用户还可能使用

MVC

在这里插入图片描述

过滤器Filter

Filter:过滤网站数据,处理中文乱码,登陆验证…

import javax.servlet.*;//这个包的过滤器

public class Filter01 implements Filter {
    //过滤器随着web服务器一起初始化
    public void init(FilterConfig filterConfig) throws ServletException {
        System.out.println("初始化");
    }
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
        request.setCharacterEncoding("utf-8");
        response.setCharacterEncoding("utf-8");
        response.setContentType("text/html;charset=UTF-8");

        System.out.println("CharacterEncodingFilter执行前...");
        //让请求继续向下执行,如果不写,程序到这里就被拦截停止
        chain.doFilter(request,response);
        System.out.println("CharacterEncodingFilter执行后...");
}
    //web服务器关闭时,过滤器随着销毁
    public void destroy() {
        System.out.println("销毁");
    }
}
   <filter>
        <filter-name>Filter01</filter-name>
        <filter-class>com.zjt.Filter01</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>Filter01</filter-name>
        <!--只要是/servlet下的任何请求经过都会被过滤-->
        <url-pattern>/servlet/*</url-pattern>
        <!--<url-pattern>/*</url-pattern>-->
    </filter-mapping>

猜你喜欢

转载自blog.csdn.net/weixin_44905070/article/details/104895612
今日推荐