当前位置: 首页 > news >正文

湖北网站建设网址上海有哪些做网站的

湖北网站建设网址,上海有哪些做网站的,创客贴官网,用哪个网站做首页好目录 一、创建第一个Web项目 二、Servlet介绍 三、Servlet的请求处理 四、Response对象 五、Servlet的使用流程 六、页面跳转 七、Cookie 一、创建第一个Web项目 1.需要继承HttpServlet类 2.需要重写service方法 3.需要在当前类的外面加一个注解:webServle…

目录

一、创建第一个Web项目

二、Servlet介绍

三、Servlet的请求处理

四、Response对象

五、Servlet的使用流程

六、页面跳转

七、Cookie


一、创建第一个Web项目

1.需要继承HttpServlet类

2.需要重写service方法

3.需要在当前类的外面加一个注解:@webServlet("当前程序提供的对外访问的路径")

(1)这个路径我们称为URI

4.可以使用service方法的形参resp调用getWriter()方法,然后再调用write()方法向页面输出内容

(1)格式:resp.getWriter().write("要输出的内容")

5.案例:

package com.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;/*** @Description:com.web* @version:1.0* url:网络中的统一定位符*/
@WebServlet("/abc") //@WebServlet注解:指定在浏览器中访问java程序的名称:my 注意要带斜杠(/my是提供对外的访问路径(URI))
public class MyServlet extends HttpServlet {//提供服务@Overrideprotected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {System.out.println("MyServlet运行了");//响应数据到浏览器上resp.getWriter().write("my first web");}
}

二、Servlet介绍

1.概念:

(1)狭义的:Servlet是指Java语言实现的一个接口。

(2)广义的:Servlet是指任何实现了这个Servlet接口的的类,一般情况下,人们将Servlet理解为后者。Servlet运行于支持Java的应用服务器中。从原理上讲,Servlet可以响应任何类型的请求,但绝大多数情况下Servlet只用来扩展基于HTTP协议的Web服务器。

2.特点:

(1)运行再支持java的应用服务器上(tomcat/ibm/微软)。

(2)Servlet的实现遵循了服务器能够识别的规则,也就是服务器会自动的根据请求调用对应的servlet进行请求处理。

(3)简单方便,可移植性强。

3.使用:

(1)创建普通的java类并继承HttpServlet;

(2)覆写service方法;

(3)在service方法中书写逻辑代码即可;

(4)在webRoot下的WEB-INF文件夹下的web.xml文件中配置servlet;

4.当前程序除了使用注解的方式可以提供对外访问的路径以外,还可以配置WEB-INF文件夹下面的web.xml文件

(1)xml文件的配置信息

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"version="4.0">
<!--    当前这个xml文件中的配置相当于tomcat服务器中,所有servlet程序的目录--><servlet><servlet-name>myServlet2</servlet-name><servlet-class>com.web.MyServlet2</servlet-class></servlet><servlet-mapping><servlet-name>myServlet2</servlet-name><url-pattern>/aaa</url-pattern></servlet-mapping>
</web-app>
  • 需要先自定义两个标签servlet和servlet-mapping;
  • servlet中的servlet-name是随便写的,但是必须和下面servlet-mapping中的servlet-name对应,也就是这个两个必须是一致的;
  • servlet中的servlet-class标签之间放的是你要定义访问路径的程序的全路径名,就是包名加类名;
  • servlet-mapping中的url-pattern标签之间放的是从浏览器访问的路径,类似于注解@WebServlet("/路径"),这个路径是随便写的;
  • 流程:
    • 从浏览器访问/aaa-->找到servlet-mapping标签下的servlet-name之间的数据,再当前xml文件中查找有没有和这个servlet-name之间的数据相同的标签-->找到servlet标签下的servlet-name发现这个标签之间的数据和前面servlet-mapping下面的那个标签之间的数据相同-->再同过servlet标签下的servlet-name标签找到当前标签下的servlet-class标签之间的数据-->最后找到处理请求的对应的servlet程序。

5.运行流程:

(1)URL:http://localhost:8888/MyFirstWeb_war_exploded/bbb

(2)URL组成:服务器ip:端口号/虚拟项目名/servlet的别名(访问路径)

(3)URI是RUL的中的一部分:/虚拟项目名/servlet的别名

(4)浏览器发送请求到服务器,服务器根据请求URL地址中的RUI信息再webapps目录下找到对应的项目文件夹,然后再web.xml中检索对应的servlet,找到后调用并执行Servlet。

6.总结:Servlet就是把java代码转换为可以在服务器中运行的手段。

三、Servlet的请求处理

1.HttpServletRequest对象:用来封装浏览器发送的请求数据的对象

(1)使用HttpServletRequest对象名.getParameter("表单提交数据的name值"),可以获取用户提交的数据;

(2)使用HttpServletRequest对象名.getHeader("请求头中对应的标记"),可以获取请求头中的数据;

(3)使用HttpServletRequest对象名.getRequestURI(),可以获取客户端访问的URI;

(4)使用HttpServletRequest对象名.getRemoteAddr(),可以获取客户端ip;

2.tomcat是支持多线程的,每个请求tomcat都会创建一个新的线程去处理

3.请求服务器运行流程

4.Servlet的生命周期方法

(1)Servlet创建对象的时机是用户发送第一次请求时。

(2)init():在Servlet创建对象时调用

  • 注意:这个init方法只会在创建Servlet对象的时候调用,而Servlet对象只会在用户发送第一次请求时创建,之后的请求都会使用第一次请求所创建的对象,也就是说,init方法之后在创建Servlet对象时调用一次,之后就不会在调用了。
  • 这个方法一般用于service方法中运行需要一些提前准备的数据的初始化。

(3)destroy():在Servlet对象销毁时调用

  • 这个方法一般用于在服务器停止前销毁一些数据用的

(4)HttpServletRequest的声明周期:一次会话(发起请求到响应完成,由服务器创建,由服务器销毁)。

5.避免请求提交的中文数据乱码,可以指定请求的编码格式:

(1)HttpServletRequest对象名.setCharacterEncoding("utf-8");

6.案例:

package com.web;import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Arrays;/*** @Description:com.web* @version:1.0** 总结Servlet* MyServlet4:创建对象的时机是用户发送第一次请求时* init方法只会在MyServlet4创建对象时调用一次,一般用于service方法中运行需要一些提前准备的数据的初始化* destroy方法在服务器停止的时候被调用(用来在服务器停止前销毁一些数据用的)* servlet的声明周期:是用户发送第一次请求,到服务器停止之间* HttpServletRequest:的声明周期是一次会话(发起请求到响应完成,由服务器创建,由服务器销毁)*/
public class MyServlet4 extends HttpServlet {@Overrideprotected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//为了避免请求提交的中文数据乱码,指定请求的编码格式req.setCharacterEncoding("utf-8");//在springmvc中会有这个设置请求编码的过程/*** HttpServletRequest:用来封装浏览器发送的请求数据的对象*///获取用户提交的数据String uname = req.getParameter("uname");System.out.println(uname);String pwd = req.getParameter("pwd");System.out.println("pwd:" + pwd);String sex = req.getParameter("sex");System.out.println("sex:" + sex);//接收数组数据String[] favors = req.getParameterValues("favor");System.out.println("favors" + Arrays.toString(favors));//获取请求头里的数据String accept = req.getHeader("Accept");String host = req.getHeader("Host");System.out.println(accept);System.out.println(host);//获取请求行中的数据String requestURI = req.getRequestURI();String remoteAddr = req.getRemoteAddr();System.out.println("uri:" + requestURI);System.out.println("客户端ip:" + remoteAddr);//通过响应对象创建了一个流对象PrintWriter p = resp.getWriter();p.write("back data");}//在MyServlet4创建对象时调用@Overridepublic void init() throws ServletException {System.out.println("init方法被调用了");}//在MyServlet4创建对象之前调用@Overridepublic void destroy() {System.out.println("destroy方法被调用了");}
}

四、Response对象

1.设置响应头:

(1)resp.setHeader("key","value")

(2)注意:这个key和value可以随便写。

2.设置响应编码格式

(1)resp.setContentType("text/html;charset=utf-8")

3.设置响应行信息

(1)设置状态码信息

  • resp.sendError(500,"系统繁忙中,请稍后再访问")

4.设置响应体信息

(1)resp.getWrite().write("页面信息")

5.案例:

package com.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;
import java.io.PrintWriter;/*** @Description:com.web* @version:1.0*/
@WebServlet("/abc")
public class MyServlet extends HttpServlet {@Overrideprotected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//设置响应的编码格式resp.setContentType("text/html;charset=utf-8");//设置响应体信息PrintWriter p = resp.getWriter();p.write("我是Servlet程序");//设置响应头信息resp.setHeader("mouse","logi");resp.setHeader("keybord","two birds fly");//设置响应行信息resp.sendError(500,"系统繁忙中,请稍后再访问...");}
}

五、Servlet的使用流程

1.设置请求编码格式;

2.设置响应编码格式;

3.获取请求信息;

4.处理请求信息;

5.响应处理结果;

六、页面跳转

1.请求转发

(1)格式:req.getRequestDispatcher("转发的页面").forward(req,resp)

(2)特点:

  • 浏览器地址栏信息不改变。(浏览器不知道后台服务器的数据来自哪个Servlet,浏览器一直认为请求的是第一个servlet);
  • 只有一次请求;
  • 请求转发内的servlet共享此次请求的request和response对象;
  • 不同的servlet可以处理不同的逻辑业务;

(3)注意:请求转发不适用于登录和转账

(4)使用请求转发携带数据

  • 格式:req.setAttribute("key","value")
  • 注意:将数据放入req对象中时,会将数据自动提升为Object对象。

(5)获取的携带的数据

  • 格式:req.getAttribute("key")
  • 注意:这个获取到数据的值后,需要强转一下才可以赋值

(6)案例:

  • Servlet1中的代码
  • package com.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;/*** @Description:com.web.servlet* @version:1.0*/
    @WebServlet("/servlet1")
    public class Servlet1 extends HttpServlet {@Overrideprotected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//设置请求和响应的编码:防止中文乱码req.setCharacterEncoding("utf-8");resp.setContentType("text/html;charset=utf-8");String uname = req.getParameter("uname");System.out.println("servlet1:" + uname);/*请求转发携带数据流转到servlet2中请求对象可以实现不同servlet之间的数据共享存入数据:setAttribute(key,value)取出数据:getAttribute(key)不适于转账和登录场景*/req.setAttribute("data","abc");//数据abc放入req中,会自动提升为Object对象req.getRequestDispatcher("servlet2").forward(req,resp);}
    }
  • Servlet2中的代码
  • package com.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;/*** @Description:com.web.servlet* @version:1.0*/
    @WebServlet("/servlet2")
    public class Servlet2 extends HttpServlet {@Overrideprotected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//设置请求和响应的编码:防止中文乱码req.setCharacterEncoding("utf-8");resp.setContentType("text/html;charset=utf-8");String data = (String) req.getAttribute("data");System.out.println("servlet2:" + data);resp.getWriter().println("欢迎来到了servlet2");}
    }

2.重定向

(1)格式:resp.sendRedirect("重定向的页面")

(2)特点:

  • 地址栏发生了变化;
  • 有两次请求;
  • 可以避免表单重复提交;

(3)注意:重定向不能像请求转发一样携带数据流转,如果我们要在重定向时携带数据流转,就需要接下来学习新的知识Session,而Session依赖于cookie,所以我们要先学习cookie。

(4)案例:

  • Servlet3中的代码
  • package com.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;/*** @Description:com.web.servlet* @version:1.0*/
    @WebServlet("/servlet3")
    public class Servlet3 extends HttpServlet {@Overrideprotected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//设置请求和响应的编码:防止中文乱码req.setCharacterEncoding("utf-8");resp.setContentType("text/html;charset=utf-8");String uname = req.getParameter("uname");System.out.println("uname:" + uname);//重定向resp.sendRedirect("servlet4");}
    }
  • Servlet4中的代码
  • package com.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;/*** @Description:com.web.servlet* @version:1.0*/
    @WebServlet("/servlet4")
    public class Servlet4 extends HttpServlet {@Overrideprotected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//设置请求和响应的编码:防止中文乱码req.setCharacterEncoding("utf-8");resp.setContentType("text/html;charset=utf-8");resp.getWriter().println("来自于servlet4");}
    }

七、Cookie

1.cookie技术:

(1)服务端可以通过cookie技术将一些信息存储到客户的浏览器上。

(2)cookie技术其实是浏览器端的数据存储技术,解决了同一个工程下不同请求需要使用的相同的请求数据的问题。

2.特点:

(1)浏览器端的数据存储技术;

(2)适合少量数据;

(3)键值对;

(4)不安全;

(5)注意:一个cookie对象只能存储一条数据,多条数据可以创建多个cookie对象进行存储;

3.作用:cookie技术可以解决不同请求发送之间的数据共享问题。

4.修改cookie:直接覆盖就可以了。

5.cookie在默认情况下是临时存储:

(1)不设置cookie信息的存储时间,周期为一次会话,存储在浏览器的运行内存中,关闭浏览器即失效了。

(2)默认cookie存储之后,每次请求都会附带,除非设置有效路径。

6.如果想要cookie保存一段时间,可以设置cookie的有效期:

(1)格式:cookie对象名.setMaxAge(具体时间,单位为秒)

(2)使用场景:七天免登录。

7.案例:

(1)servlet1中的代码

package com.web;import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;/*** @Description:com.web* @version:1.0*/
@WebServlet("/servlet1")
public class Servlet1 extends HttpServlet {@Overrideprotected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//创建cookie对象Cookie c1 = new Cookie("a","abc");Cookie c2 = new Cookie("b","bbb");/*设置cookie的有效时间(在这个时间内关闭浏览器,重开cookie还是存在,设置了一个时间,浏览器会把cookie存在硬盘上并倒计时,时间到达之后会销毁它)*/c1.setMaxAge(600);//单位是秒(使用场景,7天免登录)//通过响应对象,把cookie响应给浏览器,保存到浏览器上(关闭浏览器)resp.addCookie(c1);resp.addCookie(c2);}
}

(2)servlet2中的代码

package com.web;import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;/*** @Description:com.web* @version:1.0*/
@WebServlet("/servlet2")
public class Servlet2 extends HttpServlet {@Overrideprotected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//获取cookieCookie[] cookies = req.getCookies();for (Cookie c: cookies) {String cname = c.getName();if(cname.equals("a")){System.out.println("servlet2: " + c.getName() + "--" + c.getValue());}else if(cname.equals("b")){System.out.println("servlet2: " + c.getName() + "--" + c.getValue());}}}
}

(3)servlet3中的代码

package com.web;import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;/*** @Description:com.web* @version:1.0*/
@WebServlet("/servlet3")
public class Servlet3 extends HttpServlet {@Overrideprotected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//修改cookieCookie c1 = new Cookie("a","aaa");resp.addCookie(c1);}
}
http://www.dtcms.com/a/495883.html

相关文章:

  • 最新vmware安装kali
  • 端口号、常见协议和套接字
  • YOLOv3 核心知识点解析
  • 企业网站建设费怎么记账最近时政热点新闻
  • 2022年ASOC SCI2区TOP,基于竞争与合作策略的金字塔粒子群算法PPSO,深度解析+性能实测,深度解析+性能实测
  • 深入理解C++中的浅拷贝与深拷贝:从类的拷贝函数开始
  • 公网站建设浙江最新通知今天
  • 免费高效的一站式解决多种文件处理需求的PC工具箱
  • ESXI主机重置带外密码
  • Mysql 使用not in进行数据筛选是需要主要的事项
  • Java基础——面向对象进阶复习知识点4
  • 残疾人信息无障碍网站建设摄影网页
  • 创业服务网网站建设方案项目书wordpress设置自定义主页
  • AI一键生成在线考试系统:从概念到实现的技术架构解析
  • win10LTSC图片打不开
  • 品牌网站建设预算宁夏建设局官方网站
  • SQL中Replace Into语句详解
  • 做汽车英文网站南京网站模板
  • 深入理解软件设计中的协议与规范:从理论到Java实践
  • 网站建设的商品编码广州软件开发培训机构有哪些
  • PostgreSQL 15二进制文件
  • 学习LCR电桥(手持和台式)
  • 做百度网站还是安居客网站装饰装修工程
  • 电商全渠道支付系统搭建:线上线下一体化API对接指南
  • 开发实战 - ego商城 - 2 公共方法封装
  • 制作网站的公司还能赚钱吗模拟手机营销网站
  • 桶排序
  • SpringBoot 的入门开发
  • 【JVM】详解 运行时数据区
  • 阿里巴巴网站装修怎么做全屏大图广东今天新闻最新消息