我们都知道有get\post两种传递表单信息的方式,其实每一次提交表单,服务器都会通过servlet去处理这些数据。
可以利用这一点,自定义一个servlet,然后自己写代码根据get/post去处理相应的数据操作啦。
在Java Resource的src包下创建一个包,例如myservlet包,再在这个包下右键新建一个servlet类,取名字为FirstServlet
可以看到这个servlet长这样:
package myservlet; import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; /** * Servlet implementation class First */ @WebServlet("/FirstServlet") public class First extends HttpServlet { private static final long serialVersionUID = 1L; /** * @see HttpServlet#HttpServlet() */ public First() { super(); // TODO Auto-generated constructor stub } /** * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) */ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub response.getWriter().append("Served at: ").append(request.getContextPath()); } /** * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) */ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub doGet(request, response); } }
做一个用servlet取到表单的用户名的小demo。。。
先简单写一个login.jsp:
... <body> <form action="FirstServlet" method="get"> 登录名<input name="username"> <input type="submit" value="登录"> </form> </body> ....
改一下FirstServlet:
package myservlet; import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; /** * Servlet implementation class FirstServlet */ @WebServlet("/FirstServlet") //这个名字可以改变,但是相应的jsp中的名字也要改变 public class FirstServlet extends HttpServlet { private static final long serialVersionUID = 1L; protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String name = request.getParameter("username"); response.getWriter().append("my name is:" + name); } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { } }
输入:me
输出:my name is:me
假如我们想要处理,当用户登陆后,转到welcom.jsp页面,有两种跳转方式,可以直接在servlet中添加代码如下:
1。response.sendRedirect("welcom.jsp"); //带参数转发的时候不要用这个跳转
2。request.getRequestDispatcher("welcom.jsp").forward(request, response);
如果我们的jsp页面不是在WebContent目录下,而是WebContent的子目录下,例如WebContent->index->jsp文件。
那我们在表单中提交到的页面就不能写form action="LoginServlet",相应的要改成”../LoginServlet“,否则访问不到。
另外,在Servlet代码中有一段:@WebServlet("/LoginServlet")
这个其实就是配置文件,当然,我们可以在WEB-INF目录下创建一个web.xml来代替它。
例如我们可以在web.xml中,设置FirstServlet的url-mapping=First,那么我们在login.jsp就可以通过First,而不是FirstServlet访问了。当然,在我们新建servlet的时候,输入类名后点击next而非finish也可以看到url-mapping,去修改。