栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Javaweb Servlet

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Javaweb Servlet

什么是- Servlet?

Servlet是Server与Applet的缩写,是服务端小程序的意思。使用Java语言编写的服务器端程序,可以像生成动态的WEB页,Servlet主要运行在服务器端,并由服务器调用执行,是一种按照Servlet标准来开发的类。是SUN公司提供的一门用于开发动态Web资源的技术。(言外之意:要实现 web开发,需要实现 Servlet标准)

Servlet 本质上也是Java类,但要遵循Servlet规范进行编写,没有 main()方法,它的创建、使用、销毁都由Servlet容器进行管理(如Tomcat)。(言外之意:写自己的类,不用写main方法,别人自动调用)

Servlet是和HTTP协议是紧密联系的,其可以处理HTTP协议相关的所有内容。这也是Servlet应用广泛的原因之一。
提供了Servlet功能的服务器,叫做Servlet容器,其常见容器有很多,如Tomcat, Jetty, WebLogic Server,WebSphere,JBoss 等等。

2.实现Servlet

  • 1.创建普通java类
  • 2.实现Servlet的规范,继承httpSevlet类
  • 3.重写servlet方法,用来处理请求
  • 4.设置注解,指定访问的路径
  • //@WebServlet("/ser01")
    // @WebServlet(name=“servle01”,value = “/ser01”)和上面一样的效果,value也可以设置多个
    //@WebServlet(name=“servle01”,value ={"/ser01","/ser001"} )//里面的参数都可以访问
    //@WebServlet(name=“servle01”,urlPatterns = “/ser01”) //urlPatterns写多个 写一个也行
    //@WebServlet(name=“servle01”,urlPatterns = {"/ser01","/ser001"})

3.关于用户访问网站的一个流程
网站:http://localhost:8080/s0/ser01

  • 服务器的端口号 localhost:8080
  • 服务器下的一个项目s0
  • 项目下的某一个分支ser01
    代码实现:
//@WebServlet("/ser01")
//    @WebServlet(name="servle01",value = "/ser01")和上面一样的效果,value也可以设置多个
//@WebServlet(name="servle01",value ={"/ser01","/ser001"} )//里面的参数都可以访问
//@WebServlet(name="servle01",urlPatterns = "/ser01") //urlPatterns写多个 写一个也行
//@WebServlet(name="servle01",urlPatterns = {"/ser01","/ser001"})


@WebServlet("/ser01")//正常写这个就好了
public class Servle01 extends HttpServlet {

    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
       //打印内容在控制台
        System.out.println("hello servlet");
        //通过流输出数据到浏览器
        resp.getWriter().write("hello servlet");
    }
}

4.实现Servlet的三种方法:
1.继承 GenericServlet

2.继承HttpServlet

3.实现Servlet接口

实用性:个人觉得继承比较好用一点,因为实现要实现所有的,继承可以想用那个用那个
代码实现:

1.
@WebServlet("/ser02")
public class Servlet02 extends GenericServlet {
    @Override
    public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
        System.out.println("继承GenericServlet");
    }
}
2.@WebServlet("/ser01")//正常写这个就好了
public class Servle01 extends HttpServlet {

    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
       //打印内容在控制台
        System.out.println("hello servlet");
        //通过流输出数据到浏览器
        resp.getWriter().write("hello servlet");
    }
}

3.
    public class Servlet03 implements Servlet {
    public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
        System.out.println("实现servlet接口");
    }

5.Servlet的生命周期
直接上代码你就懂了:

@WebServlet("/ser03")
public class Servlet03 implements Servlet {

   * 初始化方法
      系统方法,服务器自动调用
        * 当请求到达Servlet容器时,Servlet容器会判断Servlet对象是否存在,如果不存在,则创建实列并初始化,
           方法只会执行一次
              @Override
              public void init(ServletConfig servletConfig) throws ServletException {
}

@Override
public ServletConfig getServletConfig() {
    return null;
}
     * 最先调用Servlet类
 * 就绪/服务方法(处理请求数据)
 * 系统方法 服务器自动调用
 * 当有请求到达Servlet时,就会调用该方法
 * 可以被多次调用

@Override
public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
    System.out.println("实现servlet接口");
}

@Override
public String getServletInfo() {
    return null;
}


@Override
public void destroy() {

}
}

6.HttpServletRequest对象
什么是HttpServletRequest对象?
HttpServletRequest对象∶主要作用是用来接收客户端发送过来的请求信息,例如:请求的参数,发送的头信息等都属于客户端发来的信息,service()方法中形参接收的是HttpServletRequest接口的实例化对象,表示该对象主要应用在HTTP协议上,该对象是由Tomcat封装好传递过来。

HttpServletRequest是ServletRequest的子接口,ServletRequest只有一个子接口,就是HttpServletRequest。既然只有一个子接口为什么不将两个接口合并为一个?

从长远上讲:现在主要用的协议是HTTP协议,但以后可能出现更多新的协议。若以后想要支持这种新协议,只需要直接继承ServletRequest接口就行了。

在HttpServletRequest接口中,定义的方法很多,但都是围绕接收客户端参数的。但是怎么拿到该对象呢?不需要,直接在Service方法中由容器传入过来,而我们需要做的就是取出对象中的数据,进行分析、处理。、

1.常用方法
getRequestURL()获取客户端发出请求时的完整URL
getRequestURI()获取请求行中的资源名称部分(项目名称开始)
getQueryString()获取请求行中的参数部分
getMethod()获取客户端请求方式
getProtocol()获取HTTP版本号
getContextPath()获取webapp名字

示例

//         * 常用方法
//         * 1.获取请求时的完整路径(从http开始,到?前面结束)
        String url = req.getRequestURL() + "";
        System.out.println("获取请求时的完整路径:" + url);
//         *2.获取请求时的部分路径(从项目的站点名开始,到?前面结束)
        String uri = req.getRequestURI() + "";
        System.out.println("获取请求时的部分路径:" + uri);
//         * 3.获取请求时的参数字符串(从?后面开始,到最后的字符串)
        String queryString = req.getQueryString();
        System.out.println("获取请求时的参数字符串:" + queryString);
//         * 4.获取请求的方式(get和post)
        String method = req.getMethod();
        System.out.println("获取请求的方式:" + method);
//         * 5.获取当前协议版本(http/1.1)

        String prototol = req.getProtocol();
        System.out.println("获取当前协议版本:" + prototol);
//         * 6.获取项目的站点名(项目对外访问路径)
        String webapp = req.getContextPath();//上下文路径
        System.out.println("获取项目的站点名" + webapp);

2.获取请求的参数

getParameter(name)获取指定名称的参数
getParameterValues(String name)获取指定名称参数的所有值

7.上下文参数
什么是上下文参数?

个人理解就是像类里面的全局变量定义出来每个方法都能调用

而在javaweb中可以在任意一个Servlet里面调用

//设置

 
    contextParam
    Hello Servlet
  
  
         
//调用

String initParam = getInitParameter("initParam");
 String contextParam = this.getServletContext().getInitParameter("contextParam");
 System.out.println("Servlet初始化参数“+initParam);
 System.out.println("系统初始化参数”+contextParam);
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/592181.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号