javaee2020-教程直播-04Servlet的运行环境、相关设置、域中的数据

Servlet的运行环境

首先,它是java,设置 Java 开发工具包(Java Development Kit)
它跑在服务器上,设置 Web 服务器:Tomcat

Servlet的配置

访问Servlet之前,必须配置Servlet,否则不同的请求,如何对应不同的Servlet来进行处理呢?

在web.xml中配置

Servlet的主要配置信息,示例如下:

<servlet>  
    <!-- 自定义的名字,在web.xml中不重复 --->
    <servlet-name>MyServlet</servlet-name>
    <!-- Servlet类的完整名字 -->
    <servlet-class>j2ee.servlet.MyServlet</servlet-class>
</servlet>

<servlet-mapping>
    <!-- 与之前自定义的名字相对应 -->
    <servlet-name>MyServlet</servlet-name>
    <!-- 自定义的逻辑地址,必须以/开头 -->
    <url-pattern>/doServlet</url-pattern>
</servlet-mapping>

这里重点说明一下url-pattern,自定义的逻辑地址,也就是说如果访问的url中,根路径之后符合自定义的逻辑要求,则跳转到对应的Servlet,如上/doServlet,意味着如果我的url是诸如 http://localhost:8080/doServlet,那么访问会跳转到 j2ee.servlet.MyServlet 类中去,根据GET或POST调用相应的doGet或doPost方法。
其中,自定义的逻辑地址,有以下几种

配置读解与注意事项【注意】

① 上面的两个必须相同====这个名字,是容器中唯一存在的,是容器中的某个Servlet的标识
  ② 后面指在对应的类上面【一定是类全名,因为类一般在包里面,要带上包名】.技巧:你可以直接在你的servlet类中复制过来,这样可以避免出错!
  ③  必须是/servlet 再加servlet名字.大家现在就这么记.

匹配方式

完全匹配

如/doServlet
即如 http://localhost:8080/doServlet 才能访问, …/doServlet.do 或 …/doServlet/xxx 等都无法访问到该Servlet

路径匹配

如/*
即根路径下所有请求都会访问到对应Servlet

扩展名匹配

.do 以 .do 结尾的请求
如.html 以 .html 结尾的请求

请求、会话、上下文属性比较

在HttpServletRequest、HttpSession、ServletContext中有三个相同的方法,都与属性有关:
public Object getAttribute(String name);
public void setAttribute(String name, Object o);
public void removeAttribute(String name);

对这三者而言,实际上就是作用域不同的问题,范围从小到大分别是:Request < Session < ServletContext

请求属性
请求对象的生命周期较短,每个线程访问Web组件,都会创建一个新的请求,只有请求转发时才将请求转发到下一个资源。
所以请求属性不会长期驻留在容器内存中,也不会带来并发访问的问题,能够使用请求属性完成相关功能时,尽量使用请求属性。

会话属性
会话对象在一次会话过程中是一个唯一的对象,生命周期比请求要长
建议在Web应用中,只有当某些对象必须在会话范围内共享,必须使用会话属性时,才考虑使用会话属性。

上下文属性
上下文对象随容器启动而创建,只有容器关闭时才销毁,所以生命周期长,而且一个应用只有一个上下文对象。
所以,不要轻易使用上下文属性,只有当确定某对象必须在上下文范围内共享时,才考虑使用。

作用域就可以理解为:

请求:HTTP请求开始到结束这段时间
会话:HTTP会话开始到结束这段时间
上下文:服务器启动到停止这段时间

如果你只有request,想获取ServletContext,那么可以有:

request.getSession().getServletContext() 

实际上,这种方式也常在涉及文件存放时获取项目的物理路径,如:

String path = request.getSession().getServletContext().getRealPath("/WEB-INF/temp/image/") + fileName;

提到request对象获取数据

request.getAttribute()方法
request请求中还有一个getParameter()方法,两者还是稍有区别的:

  • getParameter()是获取POST/GET传递的参数值,是String类型,它从客户端到服务器
  • getAttribute()则是获取对象容器中的数据,是Object类型,只是在Web容器内部传递
  • getParameter()中的参数,在请求转发不会丢失,仍可在新的Servlet中获取到,而重定向方式则会丢失
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值