搭建Servlet的web环境

构建servlet

idea构建一个maven项目

IDEA实现Maven项目创建并连接Tomcat

搭建Servlet的web环境_第1张图片
配置tomcat后启动tomcat

搭建Servlet的web环境_第2张图片
跳转到浏览器:
搭建Servlet的web环境_第3张图片
配置好tomcat服务器后启动正常应该跳转到index.jsp页面,这里出现404说明,未配置成功。

配置工件

出现该原因是因为未配置工件,idea配置工件的作用是将web的war包放在tomcat的webapps目录下,这样才能在tomcat启动时访问到。

配置工件的步骤如下:

  1. 在File中打开Project Structure…
    搭建Servlet的web环境_第4张图片

  2. 选择web application工件,exploed表示拟部署,并不把war包放在webapps目录下但仍然可以在启动tomcat是访问web项目,aechive是部署,将war包放在webapps目录下。这里选在From Module即可。
    搭建Servlet的web环境_第5张图片

  3. 上述步骤是在idea中设置工件,还需要在项目中,应用工件设置

搭建Servlet的web环境_第6张图片
点击+按钮

搭建Servlet的web环境_第7张图片
出现下面的工件即可:

搭建Servlet的web环境_第8张图片

  1. 再次启动就会自动跳转到index.jsp页面

搭建Servlet的web环境_第9张图片

修改默认url地址

部署的工件会自动生成url的地址http://localhost:8080/spring_security_war_exploded/这样看起来不便,这也是可以更改的:

搭建Servlet的web环境_第10张图片

图中横线的部分改为自己喜欢的uri即可,改完启动tomcat会自动跳转到index.jsp。

搭建Servlet的web环境_第11张图片

生成servlet

servlet有多种,一般都使用HttpServlet,其他请移步Java开发网站的核心servlet。

创建一个class类继承HttpServlet ——> extends HttpServlet——> 重写doGet和doPost方法:

public class TestController extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        req.setCharacterEncoding("utf-8");
        PrintWriter out=resp.getWriter();
        out.write("Test");
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        this.doPost(req, resp);
    }
}

servlet输入流

servlet的输出流是HttpServletResponse对象的getWriter方法,用于将数据流写入到http响应体中。其返回值类型是PrintWriter类型:

搭建Servlet的web环境_第12张图片
PrintWriter继承自Writer输出流:
搭建Servlet的web环境_第13张图片
通过PrintWriter提供的方法可以将字符数据写入到响应体。

请求servlet

请求servlet的方式有两种:1、配置文件web.xml;2、@WebServlet注解

web.xml配置一个servlet

  <servlet>
    <servlet-name>servlet2servlet-name>
    <servlet-class>com.example.controller.TestControllerservlet-class>
  servlet>

  <servlet-mapping>
    <servlet-name>servlet2servlet-name>
    <url-pattern>/servlet2url-pattern>
  servlet-mapping>

注解配置servlet

@WebServlet("/servlet1")
public class LoginController extends HttpServlet{
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException, IOException {
        // TODO Auto-generated method stub
        request.setCharacterEncoding("utf-8");
        PrintWriter out=response.getWriter();
        out.write("Hello World");

    }

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // TODO Auto-generated method stub
        doGet(request, response);
    }
}

搭建Servlet的web环境_第14张图片
搭建Servlet的web环境_第15张图片

servlet转发与重定向

转发

转发是返回html页面,如返回模板引擎,共用一次请求和请求参数

@WebServlet("/servlet3")
public class RedirectController extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        req.getRequestDispatcher("index.jsp").forward(req,resp);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        super.doPost(req, resp);
    }
}

HttpServletRequestgetRequestDispatcher方法,如果字符串有后缀,就在webapp下寻找该文件并返回,如果没有后缀,就跳转到另一个servlet中。

特点:
服务器内部跳转的特点:
1.需要使用request对象来完成
2.服务器内部跳转期间,是把请求request和响应response转发到下一个资源中,所以在整个跳转期间所有涉及到的资源使用的都是同一个request和response。
3.服务器内部跳转,不会改变浏览器地址栏中的地址。

重定向

重定向是基于HttpServletResponsesendRedirect方法,用户返回页面和servlet。如果字符串有后缀,就在webapp下寻找该文件并返回,如果没有后缀,就跳转到另一个servlet中。

@WebServlet("/servlet3")
public class RedirectController extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //req.getRequestDispatcher("index.jsp").forward(req,resp);
        resp.sendRedirect("/servlet2");
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        super.doPost(req, resp);
    }
}

特点:

1.需要使用response对象来完成
2.每一个客户端重定向,浏览器都会发出新请求,也就意味着在服务器内部会产生新的request对象和response对象
3.客户端重定向,会改变浏览器地址栏中的地址。

总结

servlet既能返回数据由能返回页面,就可以用前后端分离或混合开发来开发web应用了,更多细节请移步Java开发网站的核心servlet

你可能感兴趣的:(Java,Web,servlet,前端,tomcat)