经过这么长时间的Java Web编程,现在越来越觉得基本的开发技术非常重要,由于之前首先接触的不是纯Servlet的开发,所以后来学Struts1等就感觉力不从心,接触以Servlet为基础的原理性技术就感觉很不爽,老是似懂非懂云里雾里的。所以就决心要回去把Servelt好好整整,希望能有所进展吧
Servlet技术是Sun公司提供的一种实现动态网页的解决方案,它是基于Java编程语言的Web服务器端编程技术,同时它是一种独立于平台和协议的服务器端Java应用程序,可以生成动态的Web页面。某种程度上讲,Servlet与Web服务器的关心类似于Applet与Web浏览器的关系。Servlet是CGI Script的一种替代技术,由于Servlet在性能,可移植性,代码重用性等方面比CGI有显著的优势,因此在未来开发中Servlet极有可能取代CGI技术。其主要要点包括:Servlet生命周期,Servlet被装入和实例化,初始化,如何处理请求,多线程和映射,以及中止等,理论体系不再赘述。
创建一个HTTP Servlet,通常涉及到以下4个步骤:
1.扩展HttpServlet抽象类。当然之前需要导入包servlet.zip。
2.重载适当的方法。如重写doGet()和doPost()等。
3.如果有Http请求信息的话,获取该信息。用HttpServletRequest对象来检索HTML表单所提交的数据或URL上查询字符串。请求对象含有特定的方法以检索客户机提供的信心,有3个可用的方法分别是:getParameterNames(),getParameter(),getParameterValues()
4.生成Http相应。HttpServletResponse对象生成响应并将它返回到付出请求的客户机上。该对对象允许设置请求标题和响应主体。响应对象还含有getWriter()方法以以返回一个PrintWriter对象。使用PrintWriter的print()和println()方法以编写Servlet响应来返回给客户机。或者,直接使用out对象输出有关HTML文档内容。
个人认为学习任何一种技术或者一种框架,只要我们能够实现JSP->Actions->JSP这样一个流程就可以算是有了一个简单的开发骨架,以后只是一些扩充性的工作了。 下面是一个具体的小项目:
1.组建包的层次结构如下:
处理流程为:在test.jsp中用Post或者Get方式跳转到actions中的Manager处理类,经过处理跳出到show.jsp
2.代码部分如下:
test.jsp:
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%String path = request.getContextPath();%><!-- 这是路径的很好处理方法-->
<html>
<head><title>eclipse下Servlet开发流程_进入Servlet</title></head>
<body>
<form action="<%=path %>/actions/Manger" method="post">
用户名:<input type="text" name="username"><br>
<input type="submit" value="提交">
</form>
<a href="<%=path %>/actions/Manger?username=Tom">get提交</a>
</body>
</html>
Manager.java:
package actions;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class Manger extends HttpServlet {
public void destroy() {
super.destroy(); // Just puts "destroy" string in log
}
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {//处理get提交
response.setContentType("text/html");
PrintWriter out = response.getWriter();
System.out.println("1best:"+(String)request.getParameter("username"));
String path = request.getContextPath();
response.sendRedirect(path+"/jsp/show.jsp");//重定向形式跳出
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {{//处理post提交
response.setContentType("text/html");
PrintWriter out = response.getWriter();
System.out.println("2best:"+(String)request.getParameter("username"));
request.getRequestDispatcher("/jsp/show.jsp").forward(request, response);//跳出
//String path ="/jsp/show.jsp";//这是等价的形式
//RequestDispatcher rd = request.getRequestDispatcher(path);
//rd.forward(request, response);
}
public void init() throws ServletException {
}
}
show.jsp
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<html>
<head>
<title>eclipse下Servlet开发流程_跳出Servlet</title>
</head>
<body>
You hava succeed!
</body>
</html>
核心部署文件web.xml配置全文如下:
<?xml version="1.0" encoding="UTF-8"?>
<web-app id="WebApp_ID" 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">
<display-name>
xxyy</display-name>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
</welcome-file-list>
<servlet>
<servlet-name>Manger</servlet-name>
<servlet-class>actions.Manger</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Manger</servlet-name>
<url-pattern>/actions/Manger</url-pattern>
</servlet-mapping>
</web-app>