1.浏览器与服务器连接的一般过程:
ServerSocket serverSocket = new ServerSocket(80);
serverSocket.accept();
www.sohu.com + 80 (浏览器自动加的)->DNS(Domain Name Service)->221.179.180.20:80
Socket socket = new Socket("221.179.180.20",80);
www.sohu.com:81
2.当我们通过在浏览器的地址栏中直接输入网址的方式去访问网页的时候,浏览器采用的是GET方法向服务器获取资源。
web.xml(deployment descriptor),部署描述符。
注意:对于修改servlet和配置文件的内容,服务器必须重启;而修改JSP中的内容,不需重启服务器!!!
运行JSP的结果:
3.我们可以将Servlet看作是嵌套了HTML代码的Java类;可以将JSP看作是嵌套了JAVA代码的HTML页面。
4.get与post方法之间的差别:
1)浏览器地址呈现的结果不同(表象)
2)真正的原因在于服务器端发送请求时的形式是不同的
3)get的请求格式: GET/test/LoginServlet?username=hello&password=world HTTP/1.1
4)post的请求格式:
POST/test/LoginServlet HTTP/1.1
Connection:Keep-Alive
username=hello&password=word
5.通过浏览器进行文件上传时,一定要使用post方式而绝不能使用get方式。
6. 通过浏览器地址栏输入网址的方式来访问服务器端资源,全部使用的是get方法请求的。
使用Servlet生成静态页面
首先新建一个web工程,在src目录下新建一个包,名字叫com.test.servlet,在我们建的包下面新建一个类,名字叫MyServlet,该类需要继承HttpServlet类(一般来说,Servlet都需要继承此类)。使得我们生成的类覆盖超类的doGet()和doPost()方法,Eclipse会为我们自动生成相关代码,并且为我们导入相关的包和类,这些类都在Servlet.jar包中。现在我们需要编写项目的配置文件web.xml,每一个JAVA WEB项目都需要一个这样的配置文件,并且它的存放路径必须在WEB-INF目录下(因为这是J2EE规范规定的)
在web.xml文件中增加的内容:
<servlet>
<servlet-name>MyFirstServlet</servlet-name>
<servlet-class>com.test.servlet.MyServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>MyFirstServlet</servlet-name>
<url-pattern>/MyServlet</url-pattern>
</servlet-mapping>
</web-app>
接下来,我们在生成的类中编写JAVA代码。
以上所输入的内容为本项目的配置信息,它来告诉服务器应该按照什么方法来找到我们写好的文件。
protected void
process(HttpServletRequest arg0,HttpServletResponse arg1) throws ServletException,
IOException
{
arg1.setContentType("test/html");
PrintWriter out = arg1.getWriter();
out.println("<HTML><HEAD><TITLE>My First Servlet</TITLE></HEAD>");
out.println("<BODY>");
out.println("<H1>Hello World</H1>");
out.println("</BODY></HTML>");
}
接下来,在doGet()与doPost()方法中分别调用我们刚刚写好的process()方法,形式如下:
package com.shengsiyuan.servlet;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class LoginServlet extends HttpServlet
{
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException
{
process(req, resp);
}
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException
{
System.out.println("doGet invoked!");
process(req,resp);
}
private void process(HttpServletRequest req, HttpServletResponse resp) throws IOException
{
System.out.println(req);
System.out.println(resp);
String username = req.getParameter("username");
String password = req.getParameter("password");
resp.setContentType("text/html");
PrintWriter out = resp.getWriter();
out.println("<html><head><title>Login Result</title></head>");
out.println("<body> username: "+username + "<br>");
out.println("password: "+ password +"</body></html>");
out.flush();
}
}
process(arg0,arg1);
配置好Tomcat的参数
现在启动Tomcat服务器
打开IE或firefox浏览器,输入如下地址:
http://localhost:8080/test/MyServlet
如图所示,会生成一个页面,其中的内容就是我们输入的内容:Hello World 并且网页的标题也是我们输入的标题:My First Servlet
现在我们对process()方法进行修改:加上如下的语句:
out.println("<br>"+newjava.util.Date().toLocaleString());
保存,我们发现Tomcat已经重新启动了。
Tomcat:Reloading this Context has started 这时我们再刷新刚才的页面。尝试不断刷新浏览器,会发现在不断的变化。
继续对MyServlet类进行修改,增加如下语句:
System.out.println("当前系统时间为:"+newjava.util.Date().toLocaleString());
保存:会发现Tomcat又重新启动了。刷新刚才的网页,并查看Tomcat的窗口。
生成页面的流程:
客户端、服务器与Servlet/JSP的关系
Multiple markers at this line @Override的解决方法
333