J2EEServlet

概述:

主要是作为JavaBean与JSP文件之间的中间层,负责调用JSP文件传出的数据,然后提供给Java Bean进行计算.主要在初始的传参数过程中起到用处,但是对于结果的传值就没啥大的作用了.

in MVC:

servlet对于结果传值的无力,在这个模式下尤其明显,这就要求JavaBean中对于结果值要进行一些初步的处理,最好直接返回字符串)

使用

准备

需要在java文件夹下面,与bean同级的文件夹下面新建一个controller文件夹用于存储servlet文件,然后输出的.class文件同JavaBean一样输出到WEB-INF/classes中.

编写

与其他JavaBean文件不同的地方在于,其需要继承于HttpServlet类,同时需要重写init()方法与service()方法.
不同于JSP文件需要使用<jsp:useBean.....>语句来创建对象与定位类,其为java语言,直接导入需要调用的JavaBean包即可.

引入

需要使用.xml文件来辅助导入,通常为web.xml.
需要注意的是<url-pattern>内的路径名,要和引用其的<jsp:forward page="....">的page属性一模一样,否则会找不到servlet,当然在forwrd引用的时候,可以加入动态url的前缀,但是.xml里面则不能加上.
controller文件夹即为其的默认文件夹,不需要在url地址中额外写出,即使其上面还有文件夹,还是只需要把servlet文件名前面加个斜杠就行了.
servlet-name:设置引用名
servlet-class:设置servlet包路径
servlet-name:和上方的servlet-name保持一致
url-pattern:设置跳转时的servlet的url路径

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
  5. version="4.0">
  6. <servlet>
  7. <servlet-name>ComputerSumServlet</servlet-name>
  8. <servlet-class>controller.ComputerSumServlet</servlet-class>
  9. </servlet>
  10. <servlet-mapping>
  11. <servlet-name>ComputerSumServlet</servlet-name>
  12. <url-pattern>/ComputerSumServlet</url-pattern>
  13. </servlet-mapping>
  14. </web-app>

常用方法

init()

用于定义一个servlet对象,方便之后被调用.

service()

和线程类似,代表一个serivlet对象被线程调用的方法,就是这个servlet对象的main函数,

举个例子

一个标准的Servlet
  1. package controller;
  2. import bean.learn.SeriesBean;
  3. import jakarta.servlet.RequestDispatcher;
  4. import jakarta.servlet.ServletConfig;
  5. import jakarta.servlet.http.HttpServlet;
  6. import jakarta.servlet.http.HttpServletResponse;
  7. import jakarta.servlet.http.HttpServletRequest;
  8. import jakarta.servlet.ServletException;
  9. import java.io.IOException;
  10. /**
  11. * @author 橙鼠鼠
  12. */
  13. public class ComputerSumServlet extends HttpServlet {
  14. final String HOME_LINK="learning/MVC/demo001/home.jsp";
  15. @Override
  16. public void init(ServletConfig config) throws ServletException{
  17. super.init(config);
  18. }
  19. @Override
  20. public void service(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException{
  21. SeriesBean seriesData=new SeriesBean();
  22. request.setCharacterEncoding("utf-8");
  23. request.setAttribute("dealer",seriesData);
  24. //不大看重顺序
  25. String[] received=new String[4];
  26. String[] mark={"first","var","numOfItem","mission"};
  27. for (int i = 0; i < received.length; i++) {
  28. mark[i]=request.getParameter(mark[i]);
  29. if(null==mark[i]||0==mark[i].length()){
  30. response.sendRedirect(HOME_LINK);
  31. return;
  32. }
  33. }
  34. seriesData.initialization(Integer.parseInt(mark[0]),Integer.parseInt(mark[1]),Integer.parseInt(mark[2]));
  35. switch (mark[3]){
  36. case "g":
  37. seriesData.calGrade();
  38. seriesData.setP(false);
  39. break;
  40. case"p":
  41. seriesData.calProportional();
  42. seriesData.setP(true);
  43. break;
  44. default:
  45. response.sendRedirect(HOME_LINK);
  46. return;
  47. }
  48. RequestDispatcher requestDispatcher=request.getRequestDispatcher(HOME_LINK);
  49. requestDispatcher.forward(request,response);
  50. }
  51. }