jsp-servlet 的相关请求路径问题 —url

jsp-servlet 的相关请求路径问题  —url


本文章主要解决的几方面问题如下:

  1. 常见涉及路径元素;
  2. jsp页面请求和servlet请求转发、重定向的关系
  3. 如何避免下一步请求受上一步请求在URL方面的问题

常见涉及路径元素:

  1. 表单中的action属性 ,其值是提交表单的请求。action中指向的路径与最终请求的页面或servlet关系不大,比如可以指向html页面,可以指向jsp页面(当然,从某方面来讲,两者是一样的,也可以写serlet的urlPatterns指定的位置。)
  2. 重定向。先看代码

    response.sendRedirect("Jsp/Login.jsp");

    此处的重定向实现的是:让服务器对客户端进行响应,并让客户端对project_name/jsp/Login.jsp页面重新请求。显示的url为新的请求的url

  3. 请求转发。先看代码

    request.getRequestDispatcher("Jsp/Home.jsp").forward(request, response);

    此处的请求转发实现的是将请求转发到project_name/jsp/Login.jsp页面.显示的url是该servlet的url,即可以看出在servlet中进行了处理

jsp页面请求和servlet请求转发、重定向的关系:

表单请求会携带表单信息,其中get方式信息在url中,post方式是在请求体当中。而在开发工作中,经常会在servlet中进行获取,根据信息判断进行相应的处理,之后再来进行请求或转发。典型的代表就是登陆表单的验证,密码正确转发到下一步,密码错误重定向到登录界面。

如何避免下一步请求受上一步请求在URL方面的问题:

假如在servlet的注解为

@WebServlet(name = "LoginServlet", urlPatterns = "/LoginServlet")
public class LoginServlet extends HttpServlet {

protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {

response.getWriter().append("Served at: ").append(request.getContextPath());

if ("密码正确的代码") {
request.getRequestDispatcher("Jsp/Home.jsp").forward(request, response);
} else {
response.sendRedirect("Jsp/Login.jsp");
}
}

表单action为

action="LoginServlet"

那么在第一次就密码正确可以登录,可是第一次错了重新输入后登录就吹出现路径问题

原因是重定向后客户端发出的请求与正确的servlet 的urlPatterns值不一致。解决办法就是将表单的请求从根目录开始,即

action="/Personal_name/LoginServlet"

备注:

  1. 路径中默认的是 ./ 表示当前目录
  2. ../表示上一级目录
  3. / 表示根目录

原文地址:https://www.cnblogs.com/StevenZheng/p/10700705.html

时间: 2024-11-01 20:55:13

jsp-servlet 的相关请求路径问题 —url的相关文章

【Hibernate学习笔记】第二章节:JSP/Servlet及相关技术详解

JSP(Java Servr Page)和Servlet是Java EE规范的两个基本成员,他们是Java Web开发的重点知识,也是Java EE开发的基础知识.JSP和Servlet的本质是一样的,因此JSP最终必须编译成Servlet才能运行,或者说JSP只是生成Servlet的"草稿"文件.JSP的特点是在HTML页面中嵌入了Java代码片段,从而可以动态的提供页面内容. 1.Web应用和web.xml文件 JSP.Servlet.Listener和Filter等都必须运行在W

第二章.JSP/Servlet及相关技术详解

JSP的4种基本语法: 1.JSP注释: <%-- JSP注释部分 --%> 2.JSP声明: <%! //声明一个整型变量 public int count; //声明一个方法 public String info(){ return "hello"; } %> 3.输出JSP表达式: <%=count++%> 这句话代替了Java中的out.print(count++);但是注意输出表达式后面不能有分号. 4.JSP脚本: 1 <%@ pa

从0开始学Java——JSP&amp;Servlet——HttpServletRequest相关的几个路径信息

在HttpServletRequest中有几个获取路径的接口:getRequestURI/getContextPath/getServletPath/getPathInfo 这些接口互相之间有什么区别,通过下面这段代码就可以分辨清楚了: 1 @WebServlet("/hello.view") 2 public class FirstServlet extends HttpServlet { 3 /*....*/ 4 protected void doGet(HttpServletRe

JSP/Servlet及相关技术详解

JSP和Servlet是Java EE规范的两个基本成员,他们是Java Web开发的重点知识,也是Java EE开发的基础知识. 1.1page指令 page指令通常位于JSP页面的顶端,一个JSP页面可以使用多条page指令.page指令的语法格式如下: <%@page [language="Java"] [extends="package.class"] [import="package.class|package.*,..."] [

&lt;轻量级Java EE企业应用实战&gt;1:JSP/Servlet及相关技术详解(二)

7 Servlet 介绍 7.1 Servlet 的开发 @WebServlet(name = "helloServlet", urlPatterns = {"/helloServlet"}) public class HelloServlet extends HttpServlet { @Override protected void service(HttpServletRequest req, HttpServletResponse resp) throws

[Servlet]&mdash;在servlet中常混的请求路径

在页面请求,后台获取相关请求路径是,自己长搞混的几个路径,再次做次标记,不要每次使用想不起来是,都去写一个小的demo来测试. request.getContextPath(); request.getRequestURI(); request.getRequestURL(); 打印结果: /servlet_test_all /servlet_test_all/go/parameterTestServelt http://localhost:8888/servlet_test_all/go/pa

JSP Servlet学习笔记

在面试Java程序员工作时,经常会被问到JSP Servlet中相关的知识.这些知识都是JSP Servlet的基础,这篇文章主要梳理一下JSP Servlet比较基础但是又比较重要的知识. 1 service方法调用过程 在Servlet接口中有一个service方法,这个方法不是有人手动的调动,而是在运行时由tomcat自动调用的.GenericServlet抽象类实现了Servlet接口,当然它也重写了service方法,但是它也没有具体实现.到了HttpServlet类中,service

JSP, Servlet, HTML中路径小结

JSP,Servlet和HTML中的路径基本上都是相对路径,只是相对路径的根路径有所区别而已. 以下是例子所使用到的servelt及jsp路径: servlet路径为:http://localhost:8080/testProject/hello/test jsp路径为:http://localhost:8080/testProject/test/test.jsp 假设转发的目标是jsp(当然servlet也一样),完整的请求路径为: http://localhost:8080/testProj

JSP、Servlet中的相对路径和绝对路径

1.JSP.Servlet中的相对路径和绝对路径  前提:假设你的Http地址为http://192.168.0.1/你的web应用为test,path="/test"那么你的web应用URL为http://192.168.0.1/test/ 如果JSP,JS文件放在WEB-INF目录下根本无法访问的,JSP如果放在WEB-INF目录下可以通过服务器内部转向进行访问(主要是为了页面的安全),但是JS是通过客户端向服务器请求的,所以图片以及一些JS,CSS只能放在WEB-INF外面