servlet是在tomcat中运行的组件 是用Java编写的服务器端程序 首先生成loginServlet这个类 随后继承自父类httpServlet即可
在这个类中 编写程序
// @Override
// protected void service(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {
// String name = req.getParameter("name");
// String password = req.getParameter("password");
// System.out.print(name);
// System.out.print(password);
// }
从表单获取form的表单值 随后进行打印输出即可
随后在web,xml中进行配置<servlet>和<servlet-mapping>这两个即可 通过<servlet-name>来进行链接
<servlet>
<servlet-name>LoginServlet</servlet-name>
<servlet-class>com.kevinSwift.Servlet.LoginServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>LoginServlet</servlet-name>
<url-pattern>/LoginServlet</url-pattern>
</servlet-mapping>
要记得在form的action中填写正确的servlet的类名 和method中配置正确的操作 post或者get
<form action = "<%=request.getContextPath() %>/checkRequest" method = "post">
/后面就是正确的servlet的代码
也可以直接创建一个servlet类 随后在其中进行方法的编写 主要用到的是有doGet方法和doPost这两个方法 在doGet方法中要调用doPost方法 post请求比get请求 安全性更高
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html");
PrintWriter out = response.getWriter();
out.println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">");
out.println("<HTML>");
out.println(" <HEAD><TITLE>A Servlet</TITLE></HEAD>");
out.println(" <BODY>");
out.print(" This is ");
out.print(this.getClass());
out.println(", using the GET method");
out.println(" </BODY>");
out.println("</HTML>");
out.flush();
out.close();
doPost(request,response);
}
/**
* The doPost method of the servlet. <br>
*
* This method is called when a form has its tag value method equals to post.
*
* @param request the request send by the client to the server
* @param response the response send by the server to the client
* @throws ServletException if an error occurred
* @throws IOException if an error occurred
*/
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html");
PrintWriter out = response.getWriter();
out.println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">");
out.println("<HTML>");
out.println(" <HEAD><TITLE>A Servlet</TITLE></HEAD>");
out.println(" <BODY>");
out.print(" This is ");
out.print(this.getClass());
out.println(", using the POST method");
out.println(" </BODY>");
out.println("</HTML>");
out.flush();
out.close();
String name = request.getParameter("name");
String password = request.getParameter("password");
if(name == null || password == null){
request.setAttribute("msg", "用户名或者密码错误");
}else{
//进行校验
String forward = "/01/success.jsp";
RequestDispatcher rd = request.getRequestDispatcher(forward);
rd.forward(request, response);
}
}
可以通过requestDispatcher这个对象进行转发 就是加载到一个新的界面
一下代码中通过respnse的重定向进行跳转时 是不能传值的 而通过requestDispatcher时是可以进行传值的
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String name = req.getParameter("name");
String password = req.getParameter("password");
if(name.equals("cao") && password.equals("kai")){
//进行请求转发 要注意请求转发只能在同一个项目中进行 而不能跳转到其他的项目中
//进行页面的跳转 用servlet 但是servlet的跳转是不能带值的 也就是说success.jsp或者error.jsp不能取到值
String forword = "/01/success.jsp";
RequestDispatcher rd = req.getRequestDispatcher(forword);
//进行跳转
rd.forward(req, resp);
//而请求的重定向却可以跳转到其他的界面去
// resp.sendRedirect(req.getContextPath() + "/01/success.jsp");
}else{
//这是页面的重定向
resp.sendRedirect(req.getContextPath() + "/01/error.jsp");
}
}
servlet拦截器
可以在tomcat处理servlet前 进行拦截 从而进行一些配置信息的处理
可以单独创建一个filter 这个类
随后主要应用的是doFilter这个类 在这个中处理业务逻辑
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
// TODO Auto-generated method stub
// place your code here
//响应链 若执行的话 就会自动到下一个servlet 或者servlet的过滤器
// pass the request along the filter chain
System.out.println("开始执行doFilter");
chain.doFilter(request, response);
System.out.print("结束执行doFilter");
}
随后在web,xml中进行配置
同样是通过<filter>和<filter-mapping>这两个元素进行配置
<filter>
<filter-name>checkFilter</filter-name>
<filter-class>com.kevinSwift.Servlet.checkFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>checkFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
通过<filter-name>这个来进行关联 这样即可