java Serlvet

Serlvet

简介

java serlvet 是运行在Web服务器或应用服务器上的程序,它是作为来自Web浏览器或者其他HTTP客户端的请求和HTTP服务器上的数据库或应用程序之间的中间层。Servlet 可以使用 javax.servletjavax.servlet.http 包创建,它是 Java 企业版的标准组成部分,Java 企业版是支持大型开发项目的 Java 类库的扩展版本。

Java Servlet 就像任何其他的 Java 类一样已经被创建和编译。在您安装 Servlet 包并把它们添加到您的计算机上的 Classpath 类路径中之后,您就可以通过 JDK 的 Java 编译器或任何其他编译器来编译 Servlet。

Servlet的主要功能在于交互地浏览和修改数据,生成动态Web内容,这个过程为:

  1. 客户端发送请求至服务器端;
  2. 服务器将请求信息发送至servlet;
  3. servlet生成响应内容并将其传给服务器。响应内容动态生成,通常取决于客户端的请求。
  4. 服务器将响应的内容返回个客户端。

创建一个servlt

声明周期
  1. 客户端请求该servlet;
  2. 加载servlet类到内存中;
  3. 实例化并调用其init()方法初始化该servlet;
  4. 调用service()方法根据请求方法不同调用doGet()或者doPost(),此外还有doHead(),doPut(),doTrace(),doDelect(),doOptions().
  5. 销毁,调用destroy方法。
创建servlet
// 继承HttpServlet类
public class Demoservlet extends HttpServlet {
    /**
    *处理get方法发送够来的请求
    */
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        super.doGet(req, resp);
    }
	/**
	*处理Post 方法发送过来的请求
	*/
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        super.doPost(req, resp);
    }
}
// 实现Servlet 接口
class Demo1Servlet implements Servlet{
    /**
    *当Servlet第一次被创建对象时执行该方法,该方法在整个生命周期中只执行一次.
    */
    @Override
    public void init(ServletConfig servletConfig) throws ServletException {

    }
	/**
	*返回个ServletConfig对象,可以得到web.xml文件中的信息。
	*/
    @Override
    public ServletConfig getServletConfig() {
        return null;
    }
	/**
	*对客户端响应的方法,该方法会被执行多次,每次请求该servlet都会执行该方法;
	*/
    @Override
    public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {

    }
	/**
	*它提供有关servlet的信息,如作者、版本、版权
	*/
    @Override
    public String getServletInfo() {
        return null;
    }
	/**
	*当servlet被销毁时执行,只执行一次。
	*/
    @Override
    public void destroy() {

    }
}
// 继承GenericServlet,这是一个抽象类 必须重写其中的service方法。
class Demo3Servlet extends GenericServlet{
    @Override
    public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
        
    }
}
Servlet三大域对象的应用 request、session、application(ServletContext)

ServletContext: 是一个全局的储存信息的空间,服务器开始就存在,服务器关闭才释放。

获取方式

//1
ServeltContext sc = request.getServletContext();
// 2
sc = this.getServletContext();
// 3
sc = request.getSession().getServletContext();
// 实现请求派发
ServeltContext sc = request.getServletContext();
RequestDispatcher rd = sc.getRequestDispatcher("/servlet/ServletContextDemo");
rd.forward(request,response);

Session:服务器会为每个会话创建一个session对象,所以session中的数据可供当前会话中所有servlet共享。

Cookie :是客户端技术,程序把每个用户的数据以cookie形式写个各自的浏览器,当用户使用浏览器访问web资源时就会带着各自的数据去访问。

主要方法:

// 构造方法
Cookie cookie = new Cookie(String name, String value);
// 得到名称
cookie.getName();
// 得到值
cookie.getValue();
//设置值
cookie.setValue(String newvalue);
//设置存活时间,int 秒数
cookie.setMaxAge(int seconeds);
//设置有效路径,当访问该路径时才会带上这个cookie
cookie.setPath(String uri);
// 删除cookie
cookie.setMaxAge(0);
//将cookie保存在客户端浏览器上
response.addCookie(cookie);

session是服务器端对象,保存在服务器端。并且服务器可以将创建session后产生的sessionid通过一个cookie返回给客户端,以便下次验证。

当禁用了Cookie之后进行url地址重写:使用方法:

response.encodeRedirectURL(String url) //用于对sendRedirect方法后的url地址进行重写。
response.encodeURL(String url)//用于对表单action和超链接的url地址进行重写

会话:用户打开浏览器会话开始,直到关闭浏览器会话才会结束。一次会话期间只会创建一个session对象。

获取方式

// 第一次调用时就会创建一个新的session
HttpSession session = request.getSession();
//方法
// 用于判断session是不是重写创建的
isNew()
//设置值
session.setAttribute("key",value);
// 获取值
session.getAttribute("key");
// 删除值
session.removeAttribute("key");
//销毁session
session.invalidate();

request:是表示一个请求,只要发出一个请求就会创建一个request,它的作用域:仅在当前请求中有效。

常用方法:

  1. getRequestURL() 返回客户端发出请求时完整的URL;
  2. getRequestURI() 返回请求行中的资源名部分
  3. gerQuerySrring() 返回请求行中的参数部分
  4. getRemoteAddr() 返回请求发出的客户端IP地址。
  5. Enumeration<String> reqHeadInfos = request.getHeaderNames()获取所有的请求头;
  6. getHeader(String name) 根据请求头的名字获取对应请求头信息
  7. getParameter(String name) 获取客户端的请求参数;
  8. getParameterValues(String name) 获取请求参数(返回数组 常用于多选框);

三大域对象,它们都可以看做是map,都有getAttribute()/setAttribute()方法。

在这里插入图片描述

Servlet URL映射配置

客户端通过URL地址访问web服务器中的资源,如果Servlet程序想被外界访问,必须把sevlet程序映射到URL地址上,可以使用工作在web.xml文件中配置<servlet><servlet-mapping>元素。

<servlet>
    <servlet-name>ServletClassName</servlet-name>
    <servlet-class>com.learn.javaweb.ServletDemo1</servlet-class>
    <!--表示在web应用程序启动时就加载该servlet(实例化并调用init()方法),
	值为正整数和0时,容器在应用启动时就加载并初始化这个servlet,值越小,servlet的优先级越高,就越先被加载。值相同时,容器就会自己选择顺序来加载。当值为负数或者没有设置,则容器会当Servlet被请求时再加载-->
    <load-on-startup>1</load-on-startup>
    <!--可以配置一些Servlet的初始化参数,能够被ServletConfig访问-->
    <init-param>
        <param-name>name</param-name>
        <param-value>context</param-value>
    </init-param>
    <!--配置一些能够被ServletContext访问的数据-->
    <context-param>
        <param-name>url</param-name>
        <param-value>jdbc:mysql://localhost:3306/data</param-value>
    </context-param>
  </servlet>

  <servlet-mapping>
    <servlet-name>ServletClassName</servlet-name>
    <url-pattern>/urlpattrens</url-pattern>
  </servlet-mapping>
<!--当然一个servlet而可以被映射到多个URL上-->
<servlet-mapping>
    <servlet-name>ServletClassName</servlet-name>
    <url-pattern>/urlpattrens1.html</url-pattern>
  </servlet-mapping>
<!--可以使用*通配符1、"*.扩展名" 2、以"/"开头并以"/*"结尾-->

<!--表示所有url都会访问该servlet-->
<servlet-mapping>
    <servlet-name>ServletClassName</servlet-name>
    <url-pattern>/*</url-pattern>
  </servlet-mapping>
<!--表示当找不到匹配的URL时,访问的请求都会交给这个默认的Servlet,用于处理所有其他Servlet都不处理的访问请求。-->
<servlet-mapping>
    <servlet-name>ServletClassName</servlet-name>
    <url-pattern>/</url-pattern>
</servlet-mapping>
<!--设置session 消失的时间-->
 <session-config>
     <session-timeout>15</session-timeout>
</session-config>

注:如果"/“是给服务器用的,则代表当前的web工程,如果”/"是给浏览器用的,则代表webapps目录。

//请求派发,此处"/"用于服务器端,"/"表示web工程
this.getServletContext().getRequestDispatcher("/ingdex.jsp").forward(request,response);
//重定向,表示再次请求服务器,"/"代表的webapps目录;
response.sendRedirect("/javaProject/index.jsp");
//注:在jsp中${pageContext.request.contextPath}得到就是"/javaProject";
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值