Servlet文档1

Servlet

	1、如何去书写一个servlet
	2、如何去访问一个servlet
	3、如何去快速创建一个servlet
	4、web中一些路径的访问分析
	5、servlet一些配置项(servletConfig)
	6、web项目的配置项(servletContext)

servlet简介

Servlet 是sun公司提供的一门用于开发动态web资源的技术

Server:serv

let: applet 小程序; let

Servlet 是基于Request Response编程模型
Oracle公司在其API提供了一个Servlet接口,用户若想开发一套动态的web项目,需要完成以下2步骤:
1、编写一个java类,实现servlet接口
2、把开发好的程序布署到服务器中

在这里插入图片描述

servlet:1、接受浏览器发送过来的消息。
	    2、给浏览器返回消息。浏览器认识html。可以动态去输出html

Request:请求。客户端向服务端发送的信息。C->S
Response:响应。服务器向客户端发送的信息。S-C>
通常请求和响应是成对出现的。


作用:servlet 编写一个程序生成网页。
浏览器请求servlet,servlet会生产html。把html传送给浏览器(响应)。浏览器看到内容是html

在这里插入图片描述

servlet快速入门

实现步骤

写servlet做两件事
1、创建一个类来实现servlet接口。 由ORACLe公司定义的一个接口。(定义一个规范)
2、把项目部署到web服务器中(tomcat)。

sun公司定义一个servlet的规范。定义了servlet应该有哪些方法,以及方法需要的参数。
1、实现servlet接口(javax.servlet.Servlet)

2、重写service方法
	当浏览器输入地址,访问servlet的时候,servlet会执行servcie方法。
3、在Web/WEB-INF/web.xml中配置servlet的路径 。浏览器访问servlet的路径
	web.xml

代码实现

实现servlet 接口

/**
 * @Auther: yanqi
 * @Desc 写一个普通的类,实现servlet接口即可
 */
public class MyServlet implements Servlet {
    @Override
    public void init(ServletConfig servletConfig) throws ServletException {
        System.out.println("我是初始化init方法");
    }

    @Override
    public ServletConfig getServletConfig() {
        return null;
    }

    @Override
    public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws 	ServletException, IOException {
        System.out.println("我是service方法,每一次请求都会响应");
	   //获取用户提交过来的数据
        HttpServletRequest request = (HttpServletRequest)servletRequest;
        String username = request.getParameter("username");
        System.out.println(username);

        //响应给浏览器
        HttpServletResponse response = (HttpServletResponse)servletResponse;
        response.getWriter().println("你刚刚输入的是:"+username);
    }

    @Override
    public String getServletInfo() {
        return null;
    }

    @Override
    public void destroy() {
        System.out.println("我是destroy方法,挂掉");

    }
}

配置请求路径

在web.xml中配置servlet的请求路径

    <servlet>
        <!--servlet的名字-->
        <servlet-name>MyServlet</servlet-name>
        <!--servlet所在的路径-->
        <servlet-class>cn.yanqi.web.MyServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <!--servlet的名写一定要于上面的名字保持一致-->
        <servlet-name>MyServlet</servlet-name>
        <!--servlet请求路径(地址)-->
        <url-pattern>/MyServlet</url-pattern>
    </servlet-mapping>

访问 servlet

启动tomcat服务器,面页访问

请求路径的分析

在这里插入图片描述

servlet的生命周期

servlet 什么时候出生,什么活动,什么销毁

1、当用户第一次访问servlet时,servlet会初始化,并且只初始化一次(init)
2、每一次请求都会走service方法
3、当服务器正常关闭,servlet销毁(destroy)

服务器启动配置

    <servlet>
        <!--servlet的名字-->
        <servlet-name>MyServlet</servlet-name>
        <!--servlet所在的路径-->
        <servlet-class>cn.yanqi.web.MyServlet</servlet-class>
        
        <!--配置servlet初始化时机,此时服务器启动时,servet就会初始化-->
        <load-on-startup>1</load-on-startup>
        
    </servlet>
    <servlet-mapping>
        <!--servlet的名写一定要于上面的名字保持一致-->
        <servlet-name>MyServlet</servlet-name>
        <!--servlet请求路径(地址)-->
        <url-pattern>/MyServlet</url-pattern>
    </servlet-mapping>

url-pattern三种配置

1、完全路径匹配,以”/”开头 后面是具体的路径信息。
	你输入什么内容。访问的时候,就需要输入什么内容,才可以找到对应的servlet
	例如
  <url-pattern>/hello</url-pattern>

2、目录匹配,以/*结尾
   <url-pattern>/*</url-pattern>	
   http://ip:端口/abc/abx
   http://ip:端口/abc/bdsf 

3、扩展名匹配     *.扩展名     注意:  *.扩展名(正确)   /*.扩展名(错误)
	<url-pattern>*.do</url-pattern>
	<url-pattern>*.action</url-pattern>
    *.do 
	*.action

也可以三种方式:

		<url-pattern>/hello</url-pattern>
        <url-pattern>/user/*</url-pattern>
        <url-pattern>*.do</url-pattern>

servlet入门小结

	1、创建一个类,去实现javax.servlet.Serlvet 这个接口(注意包不要导错)
	2、重写类中 service方法
	3、在web-inf/web.xml 中去配置serlvet一些信息
    <servlet>
        <!--servlet的名字-->
        <servlet-name>MyServlet</servlet-name>
        <!--servlet所在的路径-->
        <servlet-class>cn.yanqi.web.MyServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <!--servlet的名写一定要于上面的名字保持一致-->
        <servlet-name>MyServlet</servlet-name>
        <!--servlet请求路径(地址)-->
        <url-pattern>/MyServlet</url-pattern>
    </servlet-mapping>

快速创建servlet

实现步骤

借助开发工具可以快速的创建servlet

1、自己去定义的servlet 只需要继承HttpServlet 就可以实现 servlet的接口了。
2、以后处理用户的请求,都写在doGet或者doPost方法中。

/**
 * @Desc  1、servlet 3.0以后的版本是可以直接使用注解开发,简化了手动配置servlet请求路径
 *        2、@WebServlet( urlPatterns = "/ServletDemo")  等价于  我们在web.xml中配置
 */
@WebServlet(urlPatterns ="/loginServlet")
public class LoginServlet extends HttpServlet {
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("这个是post请求");
    }
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("这个是get请求...");
    }
}

什么时候走get请求?
​ ----- 当指定为get请求时,浏览器默认走的get请求

什么时候走post请求?
​ ----- 指定为post请求时才会走post请求

修改servlet路径模版

当我们每一次创建完servlet之后都需要手动修改请求的路径,@WebServlet( name= “ServletDemo”)比较麻烦,
我们可以修改idea开发工具中的模版,下次再创建就不用再修改@WebServlet(urlPatterns = “/ServletDemo”)

在这里插入图片描述

web中的资源路径

如何去访问一个web中的资源

在这里插入图片描述

如果把hello.html放在WEB-INF下会发现无法直接访问。其实也可以访问,得通过后台访问,代码如下:

request.getRequestDispatcher(“WEB-INF/hello.html”).forward(request,response);

项目部署位置

我们把项目中的什么东西部署到tomcat中了?
这里是找tomcat部署的路径
C:\Users\你的用户名\.IntelliJIdeaxxx版\system\tomcat\Tomcat_8_5_33_12-servletDemo\conf\Catalina\localhost\ ROOT.xml

找到ROOT.xml中提示的路径即是项目部署的项目:
E:\Java\idea_workspase_20036\12-servletDemo\out\artifacts\12_servletDemo_war_exploded

我们发现部署是web下的所有资源:
    把项目部署到tomcat中,到底把项目中的什么东西部署到tomcat中?
    把所有web下的东西全部部署到tomcat了!!!!
    
请问src下java源代码在哪里了?
	放在WEB-INF\classes

请求路径

绝对路径

localhost:8081,后期更换IP了,会出问题。

<form action="http://localhost:8081/ServletDemo" method="post">
          
</form>

相对路径

<form action="/ServletDemo" method="post">
            
</form>

servlet配置说明

servletConfig

servletConfig 是一个对象。javaee规范中定义的一个对象。要求web服务器(tomcat),创建一个servlet的同时,也要去创建一个servletConfig对象。还要给servlet去使用。

serlvetConfig 是我们servlet 一些的配置信息。如果一个servlet 使用的过程中需要一些参数信息。这些参数信息,可以配置到servletConfig中。 之后servlet去使用。

代码实现

方式一

    <servlet>
        <!--servlet的名字-->
        <servlet-name>MyServlet</servlet-name>
        <!--servlet所在的路径-->
        <servlet-class>cn.yanqi.web.MyMVC</servlet-class>

        <!--给当前servlet配置一些参数-->
        <init-param>
            <param-name>username</param-name>
            <param-value>rose</param-value>
        </init-param>
        <init-param>
            <param-name>charset</param-name>
            <param-value>utf-8</param-value>
        </init-param>

        <!--配置servlet初始化时机-->
        <load-on-startup>1</load-on-startup>
    </servlet>
public class MyMVC implements Servlet {
    @Override
    public void init(ServletConfig servletConfig) throws ServletException {
        System.out.println("servlet初始化");

        //获取配置参数
        String username = servletConfig.getInitParameter("username");
        System.out.println(username);

    }
} 

方式二

initParams{@WebInitParam{},@WebInitParam{}}

在这里插入图片描述

@WebInitParam配置多个InitParam

name为InitParameter名字,value为值,之间用特殊符号隔开,这里用逗号。

@WebServlet(urlPatterns = "/ServletDemo" , initParams = {@WebInitParam(name = "charset",value = "utf-8")})
public class ServletDemo extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        System.out.println("post");
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        /*
        //获取ServletConfig
        ServletConfig servletConfig = this.getServletConfig();
        //获取参数
        String username = servletConfig.getInitParameter("username");
        System.out.println(username);
        */

        //获取ServletConfig
        ServletConfig servletConfig = this.getServletConfig();
        //获取参数
        String charset = servletConfig.getInitParameter("charset");
        //设置响应字符集
        //该句话一定是最上面,在中间输出有问题。
        response.setContentType("text/html;charset="+charset);
        response.getWriter().println("hello");  
    }
}

servletContext

在这里插入图片描述

ServletContext是整个web项目应用程序运行后的代表对象。(代表当前一个项目)可以通过ServletConfig的getServletContext() 的方法得到,然后可以用该对象取得整个应用程序的相关资源或者信息。

代码实现

    <!--配置全局参数,所有的servlet都可以进行访问-->
    <context-param>
        <param-name>charset</param-name>
        <param-value>utf-8</param-value>
    </context-param>
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //获取ServletContext
        ServletContext servletContext = this.getServletContext();
        //获取参数
        String charset = servletContext.getInitParameter("charset");
        //设置响应字符集
        response.setContentType("text/html;charset="+charset);
        response.getWriter().println("我是小燕燕");
    }

两者区别

ServletConfig:
	一个servlet被实例化后,对任何客户端在任何时候访问有效,但仅对本servlet有效,一个servlet的ServletConfig对象不能被另一个servlet访问。
     
ServletContext:
	对任何servlet,任何人在任何时间都有效,等于是全局的对象。

getServletContext();
//获取参数
String charset = servletContext.getInitParameter(“charset”);
//设置响应字符集
response.setContentType(“text/html;charset=”+charset);
response.getWriter().println(“我是小燕燕”);
}


##  两者区别

ServletConfig:
一个servlet被实例化后,对任何客户端在任何时候访问有效,但仅对本servlet有效,一个servlet的ServletConfig对象不能被另一个servlet访问。

ServletContext:
对任何servlet,任何人在任何时间都有效,等于是全局的对象。


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值