下面要结合表单输入来实现一个Servlet,首先还是按照已有的方式建立一个InputServlet,这个Servlet要负责接收一个msg的请求参数。
范例:定义InputServlet
package org.lks.demo;
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;
@SuppressWarnings("serial")
public class InputServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("UTF-8");
response.setContentType("text/html;charset=UTF-8");
response.setCharacterEncoding("UTF-8");
String msg = request.getParameter("msg"); //接收一个msg的请求参数
PrintWriter out = response.getWriter();
out.println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">");
out.println("<HTML>");
out.println(" <HEAD><TITLE>A Servlet</TITLE></HEAD>");
out.println(" <BODY>");
out.print(" This is <strong>");
out.print(msg);
out.println("</strong>, using the GET method");
out.println(" </BODY>");
out.println("</HTML>");
out.flush();
out.close();
}
}
随后还需要在web.xml文件之中配置此Servlet。
<servlet>
<servlet-name>InputServelt</servlet-name>
<servlet-class>org.lks.demo.InputServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>InputServlet</servlet-name>
<url-pattern>/input.do</url-pattern>
</servlet-mapping>
随后建立一个input.jsp的页面,这个页面就是编写一个表单,而后进行信息的提交。
范例:定义input.jsp
<%@ page language="java" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>Input Servlet</title>
</head>
<body>
<form action="input.do" method="post">
please input info: <input type="text" name="msg" id="msg">
<input type="submit" value="submit">
</form>
</body>
</html>
以上已经可以成功的处理了表单的get请求与post请求,单并不是说只是处理请求就够了,对所有刚刚接触到Servlet的开发者而言,最大的难度就在于路径的问题。
任何的情况下JSP文件都不可能直接放在根路径下,但是由于页面中存在有:<base>
元素,所以即使此时页面的路径改变了,Servlet也可以使用,因为当前的Servelt就定义在了根路径下;
但是既然Servlet的功能和JSP是类似的,而且最为重要的是如果执行某一个操作时路径来回变化,这样对于程序的维护是非常不方便的,所以在以后的开发之中,强烈建议将Servlet配置在与之功能相匹配的目录下。
<servlet>
<servlet-name>InputServlet</servlet-name>
<servlet-class>org.lks.demo.InputServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>InputServlet</servlet-name>
<url-pattern>/pages/back/admin/news/input.do</url-pattern>
</servlet-mapping>
String inputUrl = basePath + "pages/back/admin/news/input.jsp";
<form action="<%=inputUrl %>" method="post">
以后如果在编写Servlet的时候出现了404的错误路径,请一定要记住观察浏览器上的当前路径是否是Servlet的配置路径。
总结:
(1)Servlet的开发的确是比较高级,可以明确的区分出post与get请求,但是大部分的情况下get和post的请求处理是相同的,也就是说本次给出的Servlet程序就是日后使用最多的程序结构。
(2)Servlet接收请求参数时的访问路径,一定要和所用的JSP页面保持在同一个路径下。