idea构建一个maven项目
IDEA实现Maven项目创建并连接Tomcat
跳转到浏览器:
配置好tomcat服务器后启动正常应该跳转到index.jsp页面,这里出现404说明,未配置成功。
配置工件
出现该原因是因为未配置工件,idea配置工件的作用是将web的war包放在tomcat的webapps目录下,这样才能在tomcat启动时访问到。
配置工件的步骤如下:
选择web application工件,exploed表示拟部署,并不把war包放在webapps目录下但仍然可以在启动tomcat是访问web项目,aechive是部署,将war包放在webapps目录下。这里选在From Module即可。
上述步骤是在idea中设置工件,还需要在项目中,应用工件设置
index.jsp
页面修改默认url地址
部署的工件会自动生成url的地址http://localhost:8080/spring_security_war_exploded/
这样看起来不便,这也是可以更改的:
图中横线的部分改为自己喜欢的uri即可,改完启动tomcat会自动跳转到index.jsp。
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
类型:
PrintWriter继承自Writer输出流:
通过PrintWriter
提供的方法可以将字符数据写入到响应体。
请求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);
}
}
转发
转发是返回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);
}
}
HttpServletRequest
的getRequestDispatcher
方法,如果字符串有后缀,就在webapp下寻找该文件并返回,如果没有后缀,就跳转到另一个servlet中。
特点:
服务器内部跳转的特点:
1.需要使用request对象来完成
2.服务器内部跳转期间,是把请求request和响应response转发到下一个资源中,所以在整个跳转期间所有涉及到的资源使用的都是同一个request和response。
3.服务器内部跳转,不会改变浏览器地址栏中的地址。
重定向
重定向是基于HttpServletResponse
的sendRedirect
方法,用户返回页面和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