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

servlet学习笔记

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

servlet学习笔记

这里写目录标题

1.hello servlet

1.1重写doGet()和doPost()方法1.2 servlet注册映射1.3 运行结果 2.ServletContext

2.1一个servlet向共享的servletcontext写入数据2.2另一个servelt读取context中的信息2.3servlet注册映射2.4运行结果 3.get parameter

运行结果 4.转发 getRequestDispatcher()

4.1中文乱码问题4.2运行结果 5.资源读取getResourceAsStream()

4.1中文乱码问题4.2运行结果

1.hello servlet 1.1重写doGet()和doPost()方法
package com.servlet;

import javax.servlet.ServletContext;
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;

public class MyServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        resp.setCharacterEncoding("utf-8");
        resp.setContentType("text/html;charset=utf-8");

        PrintWriter writer = resp.getWriter();
        writer.println("你好 servlet");
        
        
        //这部分是设置context键值对,第2部分内容,写入servletcontext信息
        ServletContext context = this.getServletContext();
        context.setAttribute("name","用户名");
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req ,resp);
    }

}
1.2 servlet注册映射

在web.xml文件中写入


  hello
  com.servlet.MyServlet


  hello
  /hello

1.3 运行结果

2.ServletContext

servletContext是所有servlet共享的一个对象,可以用于多个servlet进行信息传递

就和多线程中共享存储器类似

2.1一个servlet向共享的servletcontext写入数据

完整代码请看1.1

 		ServletContext context = this.getServletContext();
        context.setAttribute("name","用户名");
2.2另一个servelt读取context中的信息
public class Getcontext extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        resp.setCharacterEncoding("utf-8");
        resp.setContentType("text/html;charset=utf-8");

        ServletContext context = this.getServletContext();
        String name = (String) context.getAttribute("name");

        PrintWriter writer = resp.getWriter();
        writer.println("get name = "+name);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		        doGet(req,resp);
    }
}
2.3servlet注册映射

  gc
  com.servlet.Getcontext


  gc
  /get

后面有需要注册映射的省略不写

2.4运行结果

3.get parameter

在xml文件中存在parameter预设属性,可以通过servletcontext的getInitParameter(name:)方法获取到属性值


  mysqlurl
  数据库jdbc:mysql://localhost:3306/mybatis

public class Getparam extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        resp.setCharacterEncoding("utf-8");
        resp.setContentType("text/html;charset=utf-8");

        ServletContext context = this.getServletContext();
        String name = (String) context.getInitParameter("mysqlurl");

        PrintWriter writer = resp.getWriter();
        writer.println("get parameter = "+name);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//        this.getInitParameter();
//        this.getServletConfig()
    }
}
运行结果

4.转发 getRequestDispatcher()

servletcontext对象 的getRequestDispatcher(path)函数可以转发网页

与重定向不同,转发会直接得到转发的网页,而不是让用户重新访问新网页

转发到上一个get parameter页面的gp路径

public class GetDispatcher extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        resp.setCharacterEncoding("UTF-8");
        resp.setContentType("text/html;charset=utf-8");

        ServletContext context = this.getServletContext();
        System.out.println("进入了getdispatcher");
        context.getRequestDispatcher("/gp").forward(req ,resp);

//        String charset ="GBK"; //假定编码格式
//        String str = "中文";
//
//        boolean flag = str.equals(new String(str.getBytes(),charset));
//        System.out.println(flag);
//        System.out.println("当前JRE:" + System.getProperty("java.version"));
//        System.out.println("当前JVM的默认字符集:" + Charset.defaultCharset());


    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//        this.getInitParameter();
//        this.getServletConfig()
    }
}
4.1中文乱码问题

中途遇到了控制台中文乱码的现象,System.out.println(“进入了getdispatcher”);中文无法显示

解决方案在上一篇文章,tomcat中文乱码文末

就是设置环境变量 JAVA_TOOL_OPTIONS: -Dfile.encoding=UTF-8

4.2运行结果

5.资源读取getResourceAsStream()

中resource目录下资源在编译后会保存到target里的web项目的classes文件夹下

public class GetStreamProperties extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        resp.setCharacterEncoding("UTF-8");
        resp.setContentType("text/html;charset=utf-8");

        InputStream inputStream = this.getServletContext().getResourceAsStream("/WEB-INF/classes/db.properties");
        InputStreamReader inputStreamReader = new InputStreamReader(inputStream,"UTF-8");

        Properties prop = new Properties();
        prop.load(inputStreamReader);
        String name = prop.getProperty("username");
        String pwd = prop.getProperty("password");

        resp.getWriter().println(name+":"+pwd);
        System.out.println(name+":"+pwd);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//        this.getInitParameter();
//        this.getServletConfig()
    }
}
4.1中文乱码问题

刚开始使用老师的方法

InputStream inputStream = this.getServletContext().getResourceAsStream("/WEB-INF/classes/db.properties");

prop.load(inputStream);

会导致db.properties中的中文读取出来乱码

所以改成了

InputStream inputStream = this.getServletContext().getResourceAsStream("/WEB-INF/classes/db.properties");
InputStreamReader inputStreamReader = new InputStreamReader(inputStream,"UTF-8");
prop.load(inputStreamReader);
4.2运行结果

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/704366.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

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

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