Servlet开发得需要JSP等技术的辅助,我们先来看一下Servlet与表单的应用。
Servlet程序开发---一个实例
由于Servlet本身也存在着HttpServletRequest和HttpServletResponse对象的声明,所以既可以使用Servlet接受用户所提交的内容
我们来以一个实例说明一下:
项目如下:
先做一个表单的页面
- input.html
- <html>
- <head>
- <title>WEB开发</title>
- </head>
- <body>
- <form action="../InputServlet" method="post"> 关于action路径问题下面会讲到
- 输入内容:<input type="text" name="info">
- <input type="submit" value="提交">
- </form>
- </body>
- </html>
做好表单页面后再来做Servlet页面
- InputServlet.java
- package ServletDemo
- import java.io.*;
- import javax.servlet.*;
- import javax.servlet.http.*;
- public class InputServlet extends HttpServlet{
- public void doGet(HttpServletRequest req,HttpServletResponse resp)
- throws ServletException,IOException{ //覆写doGet()方法
- String info=req.getParameter("info");//接受请求参数
- PrintWriter out=resp.getWriter(); //准备输出
- out.println("<html>");
- out.println("<head><title>WEB开发</title></head>");
- out.println("<body>");
- out.println("<h1>"+info+"</h1>");
- out.println("</body>");
- out.println("</html>");
- out.close();//关闭输出
- }
- public void doPost(HttpServletRequest req,HttpServletResponse resp)
- throws ServletException,IOException{ //处理POST请求
- this.doGet(req, resp);//同一种方法体处理
- }
- }
在程序中doPost()方法是用来处理表单中method=”post”的,如果表单中method=”get”的话就交个代码中的doGet()来处理
当一个Servlet编写完成之后下面就需要在web.xml文件之中进行Servlet的映射配置。
- <servlet>
- <servlet-name>Servlet</servlet-name>
- <servlet-class>ServletDemo.InputServlet</servlet-class>
- </servlet>
- <servlet-mapping>
- <servlet-name>Servlet</servlet-name>
- <url-pattern>/InputServlet</url-pattern> url路径问题下面会讲到
- </servlet-mapping>
这个样子就已经写好了一个项目,细心照着做的同学可能会发现很多疑点,表单中的action的内容是怎么来的,web.xml中的<url-pattern>的内容是怎么写的,是不是随意命名就可以呢?不是的,这是个路径问题,不要着急,因为我们这一篇文章主要就来是来解决路径问题的。
路径匹配详解
以上代码一定要注意路径匹配问题,
这个地方一定要注意路径问题,有关路径的编写,有2个地方需要些正确:
1. 在input.html中,action的值是../InputServlet.
2. 在web.xml中,<url-pattern>的值是/InputServlet.
这两个地方一定要写正确了,action表示表单提交给Servlet来执行,但是Servlet有一个url的映射路径,如果路径填写的是/InputServlet,那么action的值就应该是../InputServlet.
../表示的是上一层目录,也就是根目录,而url中的/表示的就是根目录。这样才能将表单中的内容提交给Servlet来执行。
Action中的../是很麻烦的,如果../多了就会感觉到头晕,我们还有一种方法,就是actiond=”InputServlet” web.xml中的<url-pattern>为/jsp/InputServlet, 因为input.html是在jsp文件夹下的。例如我们可以把上述的程序改为如下:
- input.html
- <html>
- <head>
- <title>WEB开发</title>
- </head>
- <body>
- <form action="InputServlet" method="post">
- 输入内容:<input type="text" name="info">
- <input type="submit" value="提交">
- </form>
- </body>
- </html>
- <servlet>
- <servlet-name>Servlet</servlet-name>
- <servlet-class>ServletDemo.InputServlet</servlet-class>
- </servlet>
- <servlet-mapping>
- <servlet-name>Servlet</servlet-name>
- <url-pattern>/jsp/InputServlet</url-pattern>
- </servlet-mapping>
修改之后也是一样可以运行的。
不知道大家的脑子是不是有点混乱了,我们来总结一下这个路径的问题,因为这个路径曾经难倒了一大片的学生啊。
路径配置总结(重点)
Servlet和表单,表单中的内容要通过action 提交到自己编写的Servlet中执行,但是自己编写的Servlet代码会在web.xml中有个配置的url路径(url路径是<url-pattern>的内容),既然Servlet的路径是自己配置的,那么action要提交到什么地方吗?提交的路径要怎么写呢?我们解决的就是这个路径匹配问题。 我们说有两种做法:
第一种:
让action 提交的路径去匹配Servlet的配置路径。
例如: action=”../X” 那么web.xml中的url为 /X. 这里的X是自己命名的。 ../意思是上一层目录,也就是根目录
第二种:
让Servlet的配置路径去匹配action表单提交的路径
例如: 表单页面在一个叫做A的文件夹里 action=”X” 那么web.xml中的url为
/A/X. 这里的X也是自己命名的。我们的表单页面时.html,但是如果是.jsp页面呢?答案是和.html一样的,但是如果是jsp页面的话,这个路径配置还有第三种方法:
例如; 表单页面在一个叫做A的文件夹里 action=”<%=request.getContextPath()%>/A/X” 那么web.xml中的url为
/A/X. 这里的X也是自己命名的 。这种方法只能在jsp页面中才能使用
好了,关于Servlet与表单的问题就学到这个地方,本文章的重点就是路径问题,一定要弄明白
转载于:https://blog.51cto.com/zhaoyuqiang/1148434