熟悉servlet的页面跳转

jspweb里面用到的servlet跳转页面的方法

 使用的jar包只有

commons-lang3-3.5.jar

运行时,tomcat会先根据web.xml里面的信息,查找servlet

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
  <display-name>servlet</display-name>
  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>
  
  <servlet>
      <servlet-name>servlet</servlet-name>
      <servlet-class>com.javaweb.action.Servlet</servlet-class>
  </servlet>
  <servlet-mapping>
      <servlet-name>servlet</servlet-name>
      <url-pattern>*.do</url-pattern>
  </servlet-mapping>
  </web-app>
<servlet> 就是你注册的servlet和他的物理地址
<servlet-mapping>servlet的相对地址,就是在.jsp中怎么用

然后就是根据欢迎页面index.jsp等待用户操作
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%
    String path = request.getContextPath();// 获得当前的项目根目录路径
    String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path;
    //完整路径
%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>这是首页</title>
</head>
<body>
<table border=0 cellpadding=0 cellspacing=0  style="margin:auto;border-collapse:separate; border-spacing:10px;">
<tr>
    <td>
        servlet根目录路径:<%out.print(path);%>
    </td>
</tr>
<tr>
    <td>
        servlet完整路径:<%out.print(basePath);%>
    </td>
</tr>
<tr>
    <td>
        <!--后缀名是.do的直接根据目录找到first方法-->
    <a href="<%=basePath%>/first.do">第一的英文</a>
    </td>
</tr>
<tr>
    <td>
        <!--?的是-->
    <a href="<%=basePath%>/.do?op=second">第二的英文</a>
    </td>
</tr>
<tr>
    <td>
    <!--触发?的else选项,常用来放错误信息-->
    <a href="<%=basePath%>/.do?op=WOSUIBIANDADE">第三的英文</a>
    </td>
</tr>
</table>
</body>
</html>

servlet的具体响应

package com.javaweb.action;

import java.io.IOException;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.commons.lang3.StringUtils;

public class Servlet extends HttpServlet{

    /**
     * 用于版本控制
     */
    private static final long serialVersionUID = -2357925750878300415L;

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        // TODO Auto-generated method stub
        doPost(req, resp);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        // TODO Auto-generated method stub
        //纯碎是用来判断有没有错误
        String url=req.getServletPath();
        String method=url.substring(1,url.lastIndexOf("."));
        try {
            Method met=getClass().getDeclaredMethod(method, HttpServletRequest.class,HttpServletResponse.class);
            try {
                met.invoke(this, req,resp);
            } catch (IllegalAccessException | IllegalArgumentException | InvocationTargetException e) {
                e.printStackTrace();
            }
        } catch (NoSuchMethodException e) {
            e.printStackTrace();
        } catch (SecurityException e) {
            e.printStackTrace();
        }
        //使用?跳转页面
        req.setCharacterEncoding("UTF-8");
        String op=req.getParameter("op");
        if(StringUtils.isNotBlank(op)){
            if("second".equalsIgnoreCase(op)){
                second(req, resp);
            }else{
               PrintWriter out=resp.getWriter();//调用窗口
                out.println("THIRD");


            }
        }
    }

    public void first(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        resp.sendRedirect("first.jsp");
    }
    public void second(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        resp.sendRedirect("second.jsp");
    }
}

显然用?的方法和用.do的方法都能实现同样的功能

但是在大量方法同时存在的时候?方法可以用于区分不同方面的方法

req.getParameter("login");
req.getParameter("logout");....
结果

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏闻道于事

JavaWeb(三)servlet

Servlet * 什么是Servlet 是运行在web服务器端的Java应用程序,它使用JAVA语言编写,具有Java语言的优点。与Java程序的区别:Ser...

40690
来自专栏IT可乐

Servlet 与 Ajax 交互一直报status=parsererror

原因:servlet 返回的数据不是 Json 格式 1、JS代码为: 1 var jsonStr = {'clusterNum':2,'iterationN...

25060
来自专栏闻道于事

JavaWeb项目之电话本,两个版本,以及总结反思

使用技术: Oracle 数据库 前端后台: Servlet + jsp + JDBC + html + css + js 前端界面自定, 但一定实现需要的功能...

56450
来自专栏Ryan Miao

在springmvc中配置jedis:

主要学习https://github.com/thinkgem/jeesite。一下代码均参考于此并稍作修改。 1.jedis 首先,需要添加jedis: <!...

43060
来自专栏个人分享

Redis部分数据结构方法小结

Redis在工程开发中还是比较常用的Nosql内存数据库,简单巩固一下它的各种数据类型与用法~

15230
来自专栏微信公众号:Java团长

Java Web学习总结(六)——Servlet开发(二)

  在Servlet的配置文件web.xml中,可以使用一个或多个<init-param>标签为servlet配置一些初始化参数。

13420
来自专栏黑泽君的专栏

Servlet学习小结

13110
来自专栏GIS讲堂

Java中用Apache POI生成excel和word文档

最近在做项目的过程中遇到了excel的数据导出和word的图文表报告的导出功能,最后决定用Apache POI来完成该项功能。本文就项目实现过程中的一些思路与代...

37740
来自专栏面朝大海春暖花开

快递鸟电子面单打印功能基于java

快递鸟电子面单API地址:http://www.kdniao.com/api-eorder

33720
来自专栏Jack-Cui

第六天、打渔晒网问题

    如果一个渔夫从2011年1月1日开始每三天打一次渔,两天晒一次网,编程实现当输入2011年1月1日以后的任意一天,输出该渔夫是在打渔还是在晒网。 C...

25100

扫码关注云+社区

领取腾讯云代金券