首页 > 其他分享 >Servlet

Servlet

时间:2023-01-06 00:11:39浏览次数:32  
标签:xml Servlet resp req properties servlet hello

Servlet

一. 创建servlet项目配置内容

  • 新建web项目要记得在pom.xml中导入servlet包
    <dependencies>
        <!--        maven可以自动导入导入的jar包所依赖的其他jar-->
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>4.0.1</version>
            <!--          <scope>provided</scope> //作用域(范围),这里保留idea会自动报错-->
        </dependency>
    </dependencies>
    
    <!--在 build 中配置 resources,解决资源导出失败问题-->
<!--include 标签指定哪些文件将被匹配,以*作为通配符-->
<!--exclude 标签指定哪些文件将被忽略,以*作为通配符-->
<!--filtering 构建过程中是否对资源进行过滤,默认false-->
<build>
  <resources>
    <resource>
      <directory>src/main/resources</directory>
      <includes>
        <include>**/*.properties</include>
        <include>**/*.xml</include>
      </includes>
      <filtering>true</filtering>
    </resource>
    <resource>
      <directory>src/main/java</directory>
      <includes>
        <include>**/*.properties</include>
        <include>**/*.xml</include>
      </includes>
      <filtering>true</filtering>
    </resource>
  </resources>
</build>
  • class代码
public class HelloServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("hello");
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req, resp);
    }
}
  • web.xml代码
    <servlet>
        <servlet-name>hello</servlet-name>
        <servlet-class>com.yorha.servlet.HelloServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>hello</servlet-name>
        <url-pattern>/hello</url-pattern>
    </servlet-mapping>
[2023-01-05 10:46:22,761] 工件 servlet-01:Web exploded: 正在部署工件,请稍候…
[2023-01-05 10:46:23,200] 工件 servlet-01:Web exploded: 工件已成功部署
[2023-01-05 10:46:23,200] 工件 servlet-01:Web exploded: 部署已花费 439 毫秒
hello

二. 解决服务器输出乱码

# java.util.logging.ConsoleHandler.encoding = GBK
改为
java.util.logging.ConsoleHandler.encoding = UTF-8

结果服务器没乱码了,但class文件输出还是乱码

破案了

18版的openjdk有毛病,重新下个17版就行了

三. ServletContext使用

3.1 先存储servletContext
  • 直接上代码吧,先调类(可能,猜的)
  • 定义变量
  • 最后建立属性
ServletContext servletContext = this.getServletContext();
String name = "yorha";
servletContext.setAttribute("name",name);
3.2 调用servletContext
  • 第一步一样的,先调类
  • 然后定义变量
  • 用getAttribute方法获取servletContext内容
  • 因为setAttributet中存储的类型是object(数组),所以需要强制类型转化,代码如下
        ServletContext servletContext = this.getServletContext();
        String name = (String) servletContext.getAttribute("name");

网页回显代码

        resp.setContentType("text/html");
        resp.setCharacterEncoding("utf-8");
        resp.getWriter().print("用户名:"+name);

未访问hello时get回显内容如下

访问hello文件再回访get回显如下

这里补充一下web.xml配置

    <servlet>
        <servlet-name>hello</servlet-name>
        <servlet-class>com.yorha.servlet.HelloServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>hello</servlet-name>
        <url-pattern>/hello</url-pattern>
    </servlet-mapping>
    
    <servlet>
        <servlet-name>get</servlet-name>
        <servlet-class>com.yorha.servlet.GetServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>get</servlet-name>
        <url-pattern>/get</url-pattern>
    </servlet-mapping>

四. getInitParameter获取初始化参数

4.1 基本配置

  • web.xml配置内容
<!--    配置web的一些初始化参数-->
    <context-param>
        <param-name>url</param-name>
        <param-value>jdbc:mysql://localhost:3306/mybatis</param-value>
    </context-param>
  • class内容
    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);
    }

输出效果

4.2 转发

实现代码

        ServletContext context = this.getServletContext();
/*        RequestDispatcher requestDispatcher = context.getRequestDispatcher("/demo03");//转发路径
        requestDispatcher.forward(req,resp);//调用servlet实现请求*/
//        简洁化
        context.getRequestDispatcher("/demo03").forward(req,resp);

实例图

可以看到路径不同,但都显示demo03的内容

五. InputStream获取资源包

5.1 java代码

ServletContext context = this.getServletContext();
InputStream resourceAsStream = context.getResourceAsStream("/classes/db.properties");
Properties properties = new Properties();
properties.load(resourceAsStream);
String username = properties.getProperty("username");
String password = properties.getProperty("password");

System.out.println(username+":"+password);
5.2 路径

照着target目录来的

5.3 结果╥﹏╥

提示inStream parameter is null

5.4 inStream parameter is null解决办法

  • 然后试着去改了pom.xml文件
<build>
    <resources>
        <resource>
            <directory>src/main/resources</directory>
            <includes>
                <include>**/*.properties</include>
                <include>**/*.xml</include>
            </includes>
            <filtering>true</filtering>
        </resource>
    </resources>
</build>

改完发现没啥用

然后去修改java代码中的路径

InputStream resourceAsStream = context.getResourceAsStream("/WEB-INF/classes/db.properties");

添加WEB-INF目录后获取成功了

但很明显target目录下是没WEB-INF目录的,但如果看out文件中就能发现db.properties是在WEB-INF/classes中

标签:xml,Servlet,resp,req,properties,servlet,hello
From: https://www.cnblogs.com/yorha/p/17029222.html

相关文章

  • dispatchservlet
    ​​1、SpringBoot配置DispatcherServlet​​ ​​2、SpringBoot整合SpringMvc原理探究(DispatchServlet添加流程)​​......
  • 动态网页技术-Servlet(1)
    1.Servlet特点按照Servlet规范开发的一个Java程序(类),由服务器调度执行。----只要遵守开发规范编写出来的都叫Servlet,例如:tomcat下的Servlet,weblogic下的Servlet使用时候......
  • tomcat和Servlet的一些基础认识(今天两篇,手都打累了,头秃的第n天)
    Web相关概念回顾​ 1,软件架构:​ C/S:客户端/服务端​ B/S:浏览器/服务端​ 2,资源分类​ 静态资源:所有用户访问后,得到的结果是一样的,称为静态资源​ 静......
  • springboot @WebServlet为什么能生效
    示意图简述1. springboot启动类通过注解@ServletComponentScan,注入了指定的BeanFactoryPostProcessor,用来扫描@WebServlet等指定的类,将扫描到的LoginServlet类作......
  • Servlet
    前言在微人事的项目中,我们看到了很多HttpServletRequestrequest,HttpServletResponseresponse作为参数传入到某个方法中,它通常作为HttpServlet中的service()方法传......
  • tomcat与servlet
    在idea创建一个javaweb项目时,会自动生成web.xml文件,如下图这个文件主要用来配置web应用使用到servlet当中的<servlet><servlet-name>HelloServlet</servlet-name......
  • JAVA内存马之Servlet马
    0x01前置知识我们知道的Tomcat创建Servlet的过程分为五部加载:当Tomcat第一次访问Servlet的时候,Tomcat会负责创建Servlet的实例初始化:当Servlet被实例化后,Tomcat会调用i......
  • SpringBoot - HttpServletRequest 与 HttpServletResponse 常用方法
    HttpServletRequest常用方法-CSDNHttpServletResponse常用方法-CSDN......
  • HttpServletResponse ServletResponse 返回响应 设置响应头设置响应正文体 重定向
    ​​​​HttpServletResponse 和ServletResponse 都是接口具体的类型对象是由Servlet容器传递过来 ServletResponse对象的功能分为以下四种:       设置响应......
  • 04Servlet-5. Servlet的类试图详解
    1、什么是Servlet?JavaServlet是运行在Web服务器或应用服务器上的程序,它是作为来自Web浏览器或其他HTTP客户端的请求和HTTP服务器上的数据库或应用程序之间的中......