当前位置: 首页 > news >正文

Servlet基础(续集)

Servlet原理

Servlet是由Web服务器调用,Web服务器在收到浏览器请求之后,会:

Mapping问题

一个Servlet可以指定一个映射路径

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

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

  <servlet-mapping><servlet-name>hello</servlet-name><url-pattern>/hello</url-pattern></servlet-mapping><servlet-mapping><servlet-name>hello</servlet-name><url-pattern>/hello2</url-pattern></servlet-mapping><servlet-mapping><servlet-name>hello</servlet-name><url-pattern>/hello3</url-pattern></servlet-mapping><servlet-mapping><servlet-name>hello</servlet-name><url-pattern>/hello4</url-pattern></servlet-mapping><servlet-mapping><servlet-name>hello</servlet-name><url-pattern>/hello5</url-pattern></servlet-mapping>

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

  <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>*.zzc</url-pattern></servlet-mapping>

errorservlet例子:

package com.kuang.servlet;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 ErrorServlet extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {resp.setContentType("text/html");resp.setCharacterEncoding("UTF-8");PrintWriter writer = resp.getWriter();writer.print("<h1>404</h1>");}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {super.doPost(req, resp);}
}//在servlet请求文件中写上:<servlet><servlet-name>error</servlet-name><servlet-class>com.kuang.servlet.ErrorServlet</servlet-class></servlet><servlet-mapping><servlet-name>error</servlet-name><url-pattern>/*</url-pattern></servlet-mapping>

 优先级问题:指定了固有的映射路径优先级最高,如果找不到就会走默认的处理请求;



ServletContext

web容器在启动的时候,它会为每个web程序都创建一个对应的ServletContext对象,它代表了当前web应用;

  • 共享数据:我在这个Servlet中保存的数据,可以在另外一个servlet中拿到;

    @Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//        this.getInitParameter()    初始化参数
//        this.getServletConfig()    Servlet配置
//        this.getServletContext()   Servlet上下文ServletContext context = this.getServletContext();String username = "zzc";//数据context.setAttribute("username", username);//将一个数据保存在了ServletContext中,名字为:username、值:usernameSystem.out.println("Hello");}@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//该步骤用于获取servlet01存放的contextServletContext context = this.getServletContext();String username = (String) context.getAttribute("username");//下面两个是用来识别中文汉字,以至于不会出现乱码resp.setContentType("text/html");resp.setCharacterEncoding("UTF-8");//注意在获取context前,首先需要让servlet01放入数据,我们再访问servlet02的网络resp.getWriter().println("名字"+username);}<!--先访问hello--><servlet><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>
<!--再访问getc--><servlet><servlet-name>getc</servlet-name><servlet-class>com.kuang.servlet.GetServlet</servlet-class></servlet><servlet-mapping><servlet-name>getc</servlet-name><url-pattern>/getc</url-pattern></servlet-mapping>

测试访问结果:

  • 获取初始化参数
<!--配置一些web应用初始化参数--><context-param><param-name>url</param-name><param-value>jdbc:mysql://localhost:3306/mybatis</param-value></context-param>@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//该步骤用于获取servlet01存放的contextServletContext context = this.getServletContext();String url = context.getInitParameter("url");resp.getWriter().print(url);}
  • 请求转发

 他路径是sd4,但是请求了/gp,所以就显示了gp的内容

    <servlet><servlet-name>sd4</servlet-name><servlet-class>com.kuang.servlet.ServletDome04</servlet-class></servlet><servlet-mapping><servlet-name>sd4</servlet-name><url-pattern>/sd4</url-pattern></servlet-mapping>@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {ServletContext context = this.getServletContext();RequestDispatcher requestDispatcher = context.getRequestDispatcher("/gp");//转发的请求路径//调用forward实现请求转发;requestDispatcher.forward(req, resp);}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {super.doPost(req, resp);}
}

转发概念:

重定向概念:

  • 读取资源文件

Properties

  • 在java目录下新建properties
  • 在resources目录下新建properties

发现:都被打包到同一路径下:classes,我们俗称这个路径为classpath

思路:构建一个 文件流

    <servlet><servlet-name>sd5</servlet-name><servlet-class>com.kuang.servlet.ServletDome05</servlet-class></servlet><servlet-mapping><servlet-name>sd5</servlet-name><url-pattern>/sd5</url-pattern></servlet-mapping>@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//该步骤用于获取所需东西,然后把资源变成一个流InputStream is = this.getServletContext().getResourceAsStream("/WEB-INF/classes/db.properties");//第一个/表示模块路径(当前web项目)Properties prop= new Properties();//load()加载数据prop.load(is);String user = prop.getProperty("username");String pwd = prop.getProperty("password");resp.getWriter().print(user+":"+pwd);}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {}

 

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • ANSYS APDL中使用SF和SFFUN命令,对不同节点施加不同大小的面载荷
  • Elasticsearch:Open Crawler 发布技术预览版
  • 【Qt知识】部分QWidget属性表格
  • 输入偏置电流是什么?
  • ROUGE指标介绍
  • MLU370-M8 chattts-ui快速出击
  • 算法训练营day51
  • AWS Load Balancer Controller 实践
  • HarmonyOS NEXT Push接入
  • jenkins插件之Jdepend
  • ⌈ 传知代码 ⌋ 以思维链为线索推理隐含情感
  • web服务器性能测试
  • C语言——使用函数创建动态内存
  • 贪吃蛇双人模式设计(2)
  • ORA-01652 表空间不够解决方案
  • 《用数据讲故事》作者Cole N. Knaflic:消除一切无效的图表
  • 【399天】跃迁之路——程序员高效学习方法论探索系列(实验阶段156-2018.03.11)...
  • ABAP的include关键字,Java的import, C的include和C4C ABSL 的import比较
  • CSS居中完全指南——构建CSS居中决策树
  • ES学习笔记(12)--Symbol
  • iOS编译提示和导航提示
  • learning koa2.x
  • tensorflow学习笔记3——MNIST应用篇
  • Tornado学习笔记(1)
  • Twitter赢在开放,三年创造奇迹
  • Vue ES6 Jade Scss Webpack Gulp
  • VuePress 静态网站生成
  • Vue官网教程学习过程中值得记录的一些事情
  • 大主子表关联的性能优化方法
  • 精彩代码 vue.js
  • 马上搞懂 GeoJSON
  • 排序(1):冒泡排序
  • 实现菜单下拉伸展折叠效果demo
  • AI算硅基生命吗,为什么?
  • 阿里云API、SDK和CLI应用实践方案
  • ​linux启动进程的方式
  • ‌分布式计算技术与复杂算法优化:‌现代数据处理的基石
  • ### Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLTr
  • (1)Jupyter Notebook 下载及安装
  • (android 地图实战开发)3 在地图上显示当前位置和自定义银行位置
  • (Java入门)抽象类,接口,内部类
  • (STM32笔记)九、RCC时钟树与时钟 第一部分
  • (附源码)ssm智慧社区管理系统 毕业设计 101635
  • (免费领源码)Java#Springboot#mysql农产品销售管理系统47627-计算机毕业设计项目选题推荐
  • (十)c52学习之旅-定时器实验
  • (太强大了) - Linux 性能监控、测试、优化工具
  • (转)chrome浏览器收藏夹(书签)的导出与导入
  • (转)eclipse内存溢出设置 -Xms212m -Xmx804m -XX:PermSize=250M -XX:MaxPermSize=356m
  • (转)详解PHP处理密码的几种方式
  • ******IT公司面试题汇总+优秀技术博客汇总
  • *_zh_CN.properties 国际化资源文件 struts 防乱码等
  • .mysql secret在哪_MySQL如何使用索引
  • .Net 6.0--通用帮助类--FileHelper
  • .NET 中让 Task 支持带超时的异步等待
  • .net中的Queue和Stack