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是两个不同的类。