如何在 jsp 应用程序管理其他 servlet 中将 servlet 作为第一页加载

How to load servlet as first page in jsp application manage other servlets



我想在我的简单 jsp 应用程序中加载一个 servlet 作为第一页。因此,我在此 URL 映射中添加了 servlet。

<servlet>
    <servlet-name>StudentController</servlet-name>
    <servlet-class>com.stu.controller.StudentController</servlet-class>
</servlet>

<servlet-mapping>
    <servlet-name>StudentController</servlet-name>
    <url-pattern>/</url-pattern>
</servlet-mapping>

这就是上面提到的servlet的Get方法。

@Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        String path = request.getServletPath();
        if (path.equals("/addstudent")) {
            createStudent(request, response);
            ......
        else {
            searchAll(request, response);
        }
     }     

    protected void searchAll(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
        List<StudentDTO> coList = null;
        coList = StudentDAO.searchStudentList();
        if (coList != null) {
           request.setAttribute("stulist", coList);
        } else {
           request.setAttribute("msg", "No Record Found.");
        }
        RequestDispatcher rd = request.getRequestDispatcher("home.jsp");
        rd.forward(request, response);
   }  

这按预期工作,但问题是我尝试创建另一个名为 CourseController 的 servlet,并将其映射到 web.xml

<servlet>
    <servlet-name>CourseController</servlet-name>
    <servlet-class>com.stu.controller.CourseController</servlet-class>
</servlet>
 <servlet-mapping>
    <servlet-name>CourseController</servlet-name>
    <url-pattern>/course/</url-pattern>
</servlet-mapping>

而servlet的Get和之前一样。

@Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        String path = request.getServletPath();
        if (path.equals("/addcourse")) {
            createCourse(request, response);
            ......
     } 

并且我尝试在 home.jsp 页面中使用锚标记访问 servlet。

<a href="${pageContext.request.contextPath}/newstudent">Create Student</a> 
<br/>
<a href="${pageContext.request.contextPath}/course/newcourse/">Create Course</a> 

但是我在尝试连接 CourseController servlet.

时一直收到 404 错误

这与 StudentController servlet 中的 searchAll 方法有关 return。我知道这里的映射有问题。但我不知道那是什么。

请帮忙。 谢谢你。

您需要配置唯一的 url 模式,因此如果您有多个 servlet,“/”将无法工作。

假设您的第一个 servlet 具有 url-模式“/newstudent”,您可以将其配置为欢迎文件:

<welcome-file-list>
    <welcome-file>newstudent</welcome-file>
</welcome-file-list>