创建第一个Servlet

Servlet概述:
Servlet是采用JAVA编写的运行在服务器上的程序,用于接收用户的请求,并针对请求产生响应。
javax.servlet.Servlet :是Servlet的顶层接口,主要方法有init和destory,service三个方法,没有doPost和doGet。

编写Servlet 程序
Servlet编写总共有3个步骤:
1、定义SendMsgServlet继承HttpServlet,并且放置在com.sixstar.servlet包下
2、通常重写init、destroy、doGet、doPost四个方法
3、在web.xml中配置该Servlet,路径为/room/send

servlet生命周期:
[图片]
工程中创建的类是单实例,Tomcat容器是多线程。
每一个用户连接都会创建一个线程。不存在数据共享(因为不会把数据放到Servlet类中定义)。
这种设计模式叫单例设计模式。所有的线程都共享同一个类,但是传入类方法的实参不同。

GET和POST区别
这里写图片描述

创建工程步骤
1.新建工程目录
这里写图片描述

context root :部署后的根目录
content dirctory:内容目录
这里写图片描述

2.创建类步骤:
这里写图片描述
3.输入代码

package com.sixStar.chatroom;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.Servlet;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.*;

public class ShowMsgServlet extends HttpServlet{

    @Override
    public void init() throws ServletException{
        System.out.println("init调用");
    }

    public void destory(){
        System.out.println("destory方法调用");
    }

    @Override
    public void service(HttpServletRequest request ,HttpServletResponse response) throws IOException{
        System.out.println("service方法被调用");
        System.out.println(request.getParameter("msg"));
        System.out.println(request.getMethod());
        String ip = request.getRemoteAddr();


        StringBuffer strb = new StringBuffer();
        strb.append(ip+"说的:");
        //返回数据给客户端html
        PrintWriter writer = response.getWriter();
        writer.println("<html>");
        writer.println("<body>");
        writer.println("<form action ='send' method='post'>");
        writer.println("<input type='text' id='smg' name='msg'/>");
        writer.println("<input type='text' id='smg1' name='msg'/>");
        writer.println("<input type='submit'/>");
        writer.println("</form>");
        writer.println("</body>");
        writer.println("</html>");

        //doGet和doPost方法,是通过Service方法跳转过去的。
    }

    public void doGet(HttpServletRequest request ,HttpServletResponse response){
        System.out.println("doget方法被调用");
    }

    public void doPost(HttpServletRequest request ,HttpServletResponse response){
        System.out.println("doPost方法被调用");
    }
}

3.修改web.xml文件

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
  <display-name>chatRoom</display-name>

  <servlet>
    <servlet-name>sendMsg</servlet-name>
    <servlet-class>com.sixStar.chatroom.ShowMsgServlet</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>sendMsg</servlet-name>
    <url-pattern>/send</url-pattern>
  </servlet-mapping>

</web-app>

4.添加html文件send.html

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>发送消息</title>
</head>
<body>
    <form action="send" method="get">
        <input type="text" id="msg1" name="msg"></input>
        <input type="submit" value="提交"></input>
    </form>
</body>
</html>

扩展部分
HttpServletRequest中的getParameter和getAttribute方法的区别
——getParameter得到的都是String类型的。或者是http://a.jsp?id=123中的123,或者是某个表单提交过去的数据。
——getAttribute则可以是对象。
——getParameter()是获取POST/GET传递的参数值;
——getAttribute()是获取对象容器中的数据值;
——getParameter:用于客户端重定向时,即点击了链接或提交按扭时传值用,即用于在用表单或url重定向传值时接收数据用。
——getAttribute:用于服务器端重定向时,即在sevlet中使用了forward函数,或struts中使用了mapping.findForward。getAttribute只能收到程序用setAttribute传过来的值。
——getParameter()是获取POST/GET传递的参数值;
——getAttribute()是获取SESSION的值;
另外,可以用setAttribute,getAttribute发送接收对象.而getParameter显然只能传字符串。
setAttribute 是应用服务器把这个对象放在该页面所对应的一块内存中去,当你的页面服务器重定向到另一个页面时,应用服务器会把这块内存拷贝另一个页面所对应的内存中。这样getAttribute就能取得你所设下的值,当然这种方法可以传对象。session也一样,只是对象在内存中的生命周期不一样而已。
getParameter只是应用服务器在分析你送上来的request页面的文本时,取得你设在表单或url重定向时的值。

getParameter 返回的是String, 用于读取提交的表单中的值;
getAttribute 返回的是Object,需进行转换,可用setAttribute设置成任意对象,使用很灵活,可随时用;

关联servlet源码
这里写图片描述
在tomcat网站中,下载源码包,zip
关联上源码就行。

新建html文件
在WebContent目录下新建send.html文档。

常见问题
打开网站
注意网址区分大小写
这里写图片描述
必须和工程名一致

在eclipse里面部署的tomcat,都会先创建一个以工程名为名字的目录,然后把所有的部署文件都放入这个目录中,因此,对网站的所有访问,都必须加入工程名。

input添加nane属性,必须添加id属性,name属性才有效。

HttpServletRequest和ServletRequest是两个不同的类。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值