Servlet

简介: Servlet

写一个Servlet程序

编写一个普通类

实现Servlet接口,(继承接口的实现类HttpServlet)

在web.xml文件注册

在浏览器上写请求,请求注册的name就会跳转到响应的类(浏览器所显示的网页其实就是服务器上的一个文件夹里的文件)

package com.kuang;
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;
//继承接口的实现类HttpServlet
public class HttpScerelet extends HttpServlet {
    @Override  //重写方法
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        PrintWriter writer = resp.getWriter();  //响应流
        writer.println("hello word");
    }
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        super.doPost(req, resp);
    }
}


编写了类之后需要编写Servlet映射(我们编写的java程序需要通过浏览器访问,浏览器需要链接web服务器,所以我们需要在web服务中注册我们写的Servlet 还需要给他一个浏览器能够访问的路径)

<!--注册servlet-->
<servlet>
    <servlet-name>hello</servlet-name>
    <servlet-class>com.kuang.HttpScerelet</servlet-class>
</servlet>
<!--servlet请求路径-->
<servlet-mapping>
    <servlet-name>hello</servlet-name>
    <url-pattern>/hello</url-pattern>
</servlet-mapping>


配置Tomcat :配置项目发布的路径

运行并进入网页之后 /打上web.xml里配置的那个hello,他就去找文件里映射的hello并最终找到HttpServlet类里输出的 hello word

Servlet原理

浏览器–>web容器–>(请求(头,体Requset),响应(头,体Response))–使用Servlet的Service方法–>Servlet—>我们自己编写的实现类 再原路返回

Mapping

一个Servlet可以指定一个,多个指定,通用,映射路径

指定一些前缀

<!--servlet请求路径   多个也可以-->
<servlet-mapping>  
    <servlet-name>hello</servlet-name>
    <url-pattern>/hello</url-pattern>
</servlet-mapping>
<servlet-mapping>        //多个也可以
    <servlet-name>hello</servlet-name>
    <url-pattern>/hello01</url-pattern>
</servlet-mapping>
<servlet-mapping>         //乱写的也可以访问
    <servlet-name>hello</servlet-name>
    <url-pattern>/hello/*</url-pattern>
</servlet-mapping>
<servlet-mapping>         //默认的  *前面不能加映射路径
    <servlet-name>hello</servlet-name>
    <url-pattern>/*</url-pattern>
</servlet-mapping>
<servlet-mapping>        //可以自定义后缀实现请求映射
    <servlet-name>hello</servlet-name>
    <url-pattern>*.qinjiang</url-pattern>
</servlet-mapping>


//

优先级问题

制定了固有的映射路径优先级最高,找不到就会走默认的路径(处理错误的请求)

<!--404-->                           //
<servlet>
    <servlet-name>error</servlet-name>
    <servlet-class>com.kuang.ErrorServlet</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>error</servlet-name>
    <url-pattern>/*</url-pattern>
</servlet-mapping>
----------------------------------------------------------------
package com.kuang;   //映射的类
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
public class ErrorServlet extends HttpScerelet{
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        resp.setContentType("text/html");
        resp.setCharacterEncoding("utf-8");
        PrintWriter writer = resp.getWriter();
        writer.print("<h1>肆零肆<h1>");
    }
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        super.doPost(req, resp);
    }
}


ServletContext

web容器刚启动的时候为每个web程序都创建一个对应ServletContext对象,他代表当前的web应用

共享数据(我在这个Servlet中保存的数据,可以在另一个servlet中找到)


public class HelloServlet extends HttpServlet {    //先创建一个放置数据的类
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        ServletContext context = this.getServletContext() ;
        String username = "秦将"; //数据
        context.setAttribute("username",username);//将一个数据保存在了ServletContext中,名字为username  值为username
        System.out.println("Hello");
    }
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req, resp);
    }
}
public class GetServlet extends HelloServlet{   //还需要一个读取他的类
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        ServletContext context =  this.getServletContext();
        String username = (String) context.getAttribute("username");
        resp.setContentType("text/html");
        resp.setCharacterEncoding("utf-8");
        resp.getWriter().print("名字事:"+username);
    }
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req, resp);
    }
}
<servlet>    //配置他们的XML文件
  <servlet-name>hello</servlet-name>
  <servlet-class>com.kuang.servlet.HelloServlet</servlet-class>
</servlet>
<servlet-mapping>
  <servlet-name>hello</servlet-name>
  <url-pattern>/hello</url-pattern>
</servlet-mapping>
<servlet>
  <servlet-name>hello01</servlet-name>
  <servlet-class>com.kuang.servlet.GetServlet</servlet-class>
</servlet>
<servlet-mapping>
  <servlet-name>hello01</servlet-name>
  <url-pattern>/gecc</url-pattern>
</servlet-mapping>

最后测试访问的结果

ServletContext应用

public class ServletContextdemo extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        ServletContext context = this.getServletContext();
        String url =  context.getInitParameter("url");
        resp.getWriter().print(url);
    }
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req, resp);
    }
    web.xml
    <!--配置一些web用用的初始化参数-->   获取初始化参数
<context-param>
  <param-name>url</param-name>
  <param-value>jdbc:mysql://localhost:3306 </param-value>
</context-param>
注册web
<servlet>
  <servlet-name>gp</servlet-name>
  <servlet-class>com.kuang.servlet.ServletContextdemo</servlet-class>
</servlet>
<servlet-mapping>
  <servlet-name>gp</servlet-name>
  <url-pattern>/gp</url-pattern>
</servlet-mapping>

请求转发context.getRequestDispatcher(“/gp”).forward(req,resp); //上述的东西和成

读取资源文件

public class Servletdemo05 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //把文件变成一个流
        InputStream is = this.getServletContext().getResourceAsStream("/WEB-INF/classes/ac.properties");//把文件变成一个流
        Properties prop = new Properties();
        prop.load(is); //获取这个文件的流
        String us= prop.getProperty("username");
        String pa=prop.getProperty("password");
        resp.getWriter().print(us); //输出
    }
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req, resp);
    }
    web.xml文件
<servlet>
   <servlet-name>sd5</servlet-name>
   <servlet-class>com.kuang.servlet.Servletdemo05</servlet-class>
</servlet>
<servlet-mapping>
   <servlet-name>sd5</servlet-name>
   <url-pattern>/sd5</url-pattern>
</servlet-mapping>
相关文章
|
XML Java 应用服务中间件
Servlet详解(上)
Servlet详解
83 0
|
6月前
|
Java 应用服务中间件 数据库连接
Servlet是什么?
Servlet(Server Applet)是Java Servlet的简称,通常被称为小服务程序或服务连接器。它是一个用Java编写的服务器端程序,具有独立于平台和协议的特性。Servlet的主要功能在于交互式地浏览和生成数据,进而生成动态Web内容。
48 3
|
6月前
|
XML 前端开发 Java
servlet使用
servlet使用
|
6月前
|
XML Java 应用服务中间件
一文了解Servlet
Servlet是用于开发基于Java的Web应用程序的Java类。Servlet在Web服务器上运行,接收来自客户端(通常是Web浏览器)的请求并生成响应。 Servlet提供了一种动态生成网页内容的方法。它可以接收HTTP请求,读取请求参数,与数据库进行交互,生成动态内容,并返回响应给客户端。 Servlet通常被部署在Java Web容器(如Apache Tomcat)中。
62 1
一文了解Servlet
|
应用服务中间件
Servlet2(2)
Servlet2(2)
67 0
|
应用服务中间件
Servlet的详细使用(上)
Servlet的详细使用(上)
93 0
|
存储 应用服务中间件
Servlet(二)
关于Servlet的相关介绍
191 0
Servlet(二)
Servlet(三)
关于Servlet的相关介绍
141 0
Servlet(三)
|
Java 容器
servlet
servlet相关类包括Servlet、ServletConfig、ServletContext、GenericServlet、HttpServlet等。 Servlet Servlet定义了所有servlet必须实现的功能,每一个Servlet都是运行在web服务中的一个小的java程序,用于接收并响应来自web客户端的请求。
833 0
|
容器 安全
3.Servlet(二)
1.Servlet应用开发接口    对Servlet应用开发接口及功能的掌握,决定了是否能做好Servlet开发工作。    GenericServlet抽象类            HttpServlet抽象类       2.Servlet的生命周期   init() 在Servlet实例化之后,调用Service之前调用init()方法 service() 调用此方法允许Servlet响应请求,在Servlet成功初始化之前无法调用 destroy() 当一个Servlet被从服务中去除时,Servlet容器会调用此方法。
1004 0