1,新建一个WEB工程:servletTest
在工程目录下会出现两个文件夹:src和WebRoot
src用于存放工程源代码,WebRoot\WEB-INF下有两个目录,分别是classes和lib,还有一个web.xml文件(部署描述符)。
classes用于存放所有编译生成的class文件,lib用于存放所有第三方lib包。
2,三种部署方式:
一,修改tomcat的配置文件
配置tomcat的conf目录下的server.xml文件,
<Context path="/servletTest" docBase="E:\workspace\servletTest\WebRoot" reloadable="true"/>
path指的是逻辑路径,用于映射docBase的物理路径。reloadable指当页面内容改变时,服务器会自动重启加载。
经过如上配置后,输入如下地址即可访问该工程的页面。
http://localhost:8080/servletTest/index.jsp
二,使用myeclipse的部署:
选中工程,然后点击工具栏上的部署按钮,弹出如下窗口,点击确定后,会在tomcat的webapps目录下生成一个以当前工程名命名的目录(此名称可手工修改),并将工程中的WebRoot目录下的文件复制到此目录下。用户同样可通过如下地址访问。
http://localhost:8080/servletTest/index.jsp
三:使用myeclipse生成WAR包部署:
部署完后,会在tomcat的webapps目录下生成一个servletTest.war包文件,启动tomcat时,会自动解压此文件。同样可通过如上的地址访问。
推荐使用第一种方式部署!
-----------------------------------------------------------------------------------------
下面写一个servlet程序在页面上显示"hello world"
package com.kingdee.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 HelloWorldServlet extends HttpServlet {
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
resp.setContentType("text/html");
PrintWriter out = resp.getWriter();
out.println("<html><head><title>hello world</title></head>");
out.println("<body><h1>Hello World</h1></body></html>");
out.flush();
}
}
修改web-inf目录下的web.xml文件,需注意:servlet必须要配置web.xml
<?xml version="1.0" encoding="UTF-8"?> <web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"> <welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list> <servlet> <servlet-name>HelloWorld</servlet-name> <servlet-class>com.kingdee.servlet.HelloWorldServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>HelloWorld</servlet-name> <url-pattern>/HelloWorld</url-pattern> </servlet-mapping> </web-app>
在浏览器中输入 http://localhost:8080/servletTest/HelloWorld
页面上会显示Hello World
使用JSP显示HelloWorld并显示当前时间
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<html>
<head>
<title>My JSP 'HelloWorld.jsp' starting page</title>
</head>
<body>
Hello World <%=new java.util.Date().toLocaleString() %>
</body>
</html>
我们可以将Servlet看作是嵌套了html代码的JAVA类,可以将JSP看作是嵌套了JAVA类的HTM页面。
下面编写一个简单的登录页面:
在JSP页面填写用户名与密码,在SERVLET中进行处理。需注意action中的路径,
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<html>
<body>
<form action="/servletTest/login">
username:<input type="text" name="username"></input><br>
password:<input type="password" name="password"></input><br>
<input type="submit" value="提交"></input>
<input type="reset" name="重置"></input>
</form>
</body>
</html>
package com.kingdee.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 {
String username = req.getParameter("username");
String password = req.getParameter("password");
resp.setContentType("text/html");
PrintWriter out = resp.getWriter();
out.println("<html><body>");
out.println("username:"+username+"<br>");
out.println("password:"+password+"<br>");
out.println("</body></html>");
out.flush();
}
}
同样要配置web.xml文件
<servlet> <servlet-name>Login</servlet-name> <servlet-class>com.kingdee.servlet.LoginServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>Login</servlet-name> <url-pattern>/login</url-pattern> </servlet-mapping>
上面的例子中 <form action="/servletTest/login">如果没定,就会用默认的get方式提交表单,这样会在URL地址中显示出参数与参数值。如下就显示出了用户名与密码的值。
http://localhost:8080/servletTest/login?username=sdf&password=fff
采用POST的方式需要在servlet类中重写doPost方法:
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
String username = req.getParameter("username");
String password = req.getParameter("password");
resp.setContentType("text/html");
PrintWriter out = resp.getWriter();
out.println("<html><body>");
out.println("username:"+username+"<br>");
out.println("password:"+password+"<br>");
out.println("</body></html>");
out.flush();
}
并将<form action="/servletTest/login"> 改为<form action="/servletTest/login" method="post">
POST方式不会在URL地址中显示出参数值.
下面是POST与GET的差别,get有长度限制,POST没有,下图中POST格式中有好几处换行。
此外使用浏览器进行文件上传时,一定要使用POST,而绝不能使用GET。
相对路径与绝对路径:
将<form action="/servletTest/login" method="get">改为<form action="login" method="get">也可以访问成功,login是相对路径,相对于/servletTest。建议使用相对路径。
其中/servletTest是工程名。