`

Web开发2:第一个Servlet程序深度剖析,Web.xml文件深入详解

阅读更多

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

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics