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是工程名。