上一篇,我们讲了如何用Servlet做Hello, world。那如果要做一个复杂的页面,还像这样写……
@WebServlet(urlPatterns = "/hello")
public class HelloServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
resp.setContentType("text/html");
PrintWriter pw = resp.getWriter();
pw.write("<h1>Hello, world!</h1>");
pw.flush();
}
}
所以,就有了JSP。
依赖和上次一样:
<dependencies>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>4.0.1</version>
</dependency>
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-core</artifactId>
<version>9.0.39</version>
</dependency>
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-jasper</artifactId>
<version>9.0.39</version>
</dependency>
</dependencies>
在写界面之前,我们要先了解一下重定向和转发:
如果你已经会了,就千万不要再看下去了,有些浪费时间,直接看下一篇博客!
重定向
重定向就是比如:访问了/redirect
,通过指定代码,自动跳转到/hello
。
实例代码:
创建Java class:RedirectServlet
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
@WebServlet(urlPatterns = "/redirect")
public class RedirectServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String name = req.getParameter("name");
String url = "/hello" + "?" + (name == null ? "" : "name=" + name);
resp.sendRedirect(url);
}
}
HelloServlet
:
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
@WebServlet(urlPatterns = "/hello")
public class HelloServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
resp.setContentType("text/html");
String name = req.getParameter("name");
PrintWriter pw = resp.getWriter();
pw.write("<h1>Hello, " + (name == null ? "world!" : name + "!") + "</h1>");
pw.flush();
}
}
直接访问/hello
效果:
访问/redirect
效果:
转发
你可以想象,转发就是把别的链接的东西搬过来,变成这个链接的页面。代码如下:
创建Java class:ForwardServlet
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
@WebServlet(urlPatterns = "/forward")
public class ForwardServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String name = req.getParameter("name");
String url = "/hello" + "?" + (name == null ? "" : "name=" + name);
req.getRequestDispatcher(url).forward(req, resp);
}
}
效果:
可以发现,url没有变。
这一片博客先写到这里。为了不让大家学习压力太大,我会把JSP放在下一篇。