JavaWeb

Servlet

servlet是一个接口,有一个HttpServlet extends GenericServlet,这个GenericServlet implements Servlet, ServletConfig, Serializable。

在这么复杂的继承以及实现关系下,当我们定义的类继承了HttpServlet后,就可以通过前人写好的方法来进行Java Web的开发。来实现在网页上的呈现。那么就得通过一个服务器来实现。没错这个服务器就是Tomcat。我们通过配置Tomcat服务器,在服务器上注册这个类,使得他可以以网页的形式呈现出来。我们使用mapper来配置映射信息。

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"
         metadata-complete="true">

    <servlet>
        <servlet-name>hello</servlet-name>
        <servlet-class>com.sunn.servlet.HelloServlet</servlet-class>
    </servlet>

    <servlet-mapping>
        <servlet-name>hello</servlet-name>
        <url-pattern>/hello</url-pattern>
    </servlet-mapping>
</web-app>

servlet-mapping标签下就是配置信息,我们可以通过/hello来访问,name就是id的意思,通过name来找到对应的Servlet,再通过class找到文件的具体位置。最终呈现出来。这就是实现的大致过程。

ServletContext

在web程序启动的时候,就会有一个ServletContext生成。这个ServletContext可以存储数据,也可以抛出数据。ServletContext的存在使得各个类之间可以通过ServletContext来实现数据共享。

还可以使用ServletContext的一些api来输出配置信息等。我下面使用代码实现

java 复制代码
public class HelloServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        ServletContext servletContext = this.getServletContext();
        String name = "孙哥";
        servletContext.setAttribute("name",name);
    }


}
java 复制代码
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        ServletContext servletContext = this.getServletContext();
        //设置字符串。防止乱码
       resp.setCharacterEncoding("utf-8");
       resp.setContentType("text/html");


        String name =(String) servletContext.getAttribute("name");
        resp.getWriter().println("name = "+name);

    }

上面体现了数据共享的过程,由hello...注入信息,下面的来获取。

java 复制代码
public class ServletContext03 extends HttpServlet {
    @Override
    protected void doPut(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        super.doPut(req, resp);
    }

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        ServletContext servletContext = this.getServletContext();
        //加载配置文件当中的信息进行返回
        String s= servletContext.getInitParameter("url");
        resp.getWriter().println(s);
    }
}

这个我提前在配置文件当中配置了该url的信息,很显然返回了

xml 复制代码
  <context-param>
        <param-name>url</param-name>
        <param-value>host:8080</param-value>
    </context-param>
 <servlet>
        <servlet-name>url</servlet-name>
        <servlet-class>com.sunn.servlet.ServletContext03</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>url</servlet-name>
        <url-pattern>/url</url-pattern>
    </servlet-mapping>

跳转

java 复制代码
public class ServeltContext04 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        ServletContext servletContext = this.getServletContext();
        RequestDispatcher requestDispatcher = 	servletContext.getRequestDispatcher("/getname");
        requestDispatcher.forward(req,resp);

    }
相关推荐
寻星探路2 小时前
【深度长文】万字攻克网络原理:从 HTTP 报文解构到 HTTPS 终极加密逻辑
java·开发语言·网络·python·http·ai·https
曹牧4 小时前
Spring Boot:如何测试Java Controller中的POST请求?
java·开发语言
爬山算法5 小时前
Hibernate(90)如何在故障注入测试中使用Hibernate?
java·后端·hibernate
kfyty7255 小时前
集成 spring-ai 2.x 实践中遇到的一些问题及解决方案
java·人工智能·spring-ai
猫头虎5 小时前
如何排查并解决项目启动时报错Error encountered while processing: java.io.IOException: closed 的问题
java·开发语言·jvm·spring boot·python·开源·maven
李少兄5 小时前
在 IntelliJ IDEA 中修改 Git 远程仓库地址
java·git·intellij-idea
忆~遂愿6 小时前
ops-cv 算子库深度解析:面向视觉任务的硬件优化与数据布局(NCHW/NHWC)策略
java·大数据·linux·人工智能
小韩学长yyds6 小时前
Java序列化避坑指南:明确这4种场景,再也不盲目实现Serializable
java·序列化
仟濹6 小时前
【Java基础】多态 | 打卡day2
java·开发语言