无法获取 servlet 转发的 jsp 中的属性
Can't get attribute in jsp forwarded by servlet
我有一个简单的 jsp 应用程序。那使用Maven.
Pom.xml:
<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://maven.apache.org/POM/4.0.0"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>Lab3.web_application</groupId>
<artifactId>web_application</artifactId>
<packaging>war</packaging>
<version>1.0-SNAPSHOT</version>
<name>web_application Maven Webapp</name>
<url>http://maven.apache.org</url>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>javax</groupId>
<artifactId>javaee-web-api</artifactId>
<version>6.0</version>
<scope>provided</scope>
</dependency>
</dependencies>
<build>
<finalName>web_application</finalName>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.3.2</version>
<configuration>
<source>1.6</source>
<target>1.6</target>
</configuration>
</plugin>
<plugin>
<groupId>com.oracle.weblogic</groupId>
<artifactId>wls-maven-plugin</artifactId>
<version>12.1.3.0</version>
<configuration>
<middlewareHome>/home/bluebird/Oracle/Middleware/Oracle_Home</middlewareHome>
<adminurl>t3://localhost:7001</adminurl>
<domainHome>/home/bluebird/Oracle/Middleware/Oracle_Home/user_projects/domains/base_domain
</domainHome>
<user>weblogic</user>
<password>yamahar6</password>
<upload>true</upload>
<remote>false</remote>
<verbose>true</verbose>
<source>./target/web_application.war</source>
<name>${project.build.finalName}</name>
</configuration>
<executions>
<execution>
<id>startserver</id>
<phase>initialize</phase>
<goals>
<goal>start-server</goal>
</goals>
</execution>
<execution>
<phase>pre-integration-test</phase>
<goals>
<goal>deploy</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
<distributionManagement>
<snapshotRepository>
<id>localSnapshot</id>
<name>local snapshot repository</name>
<url>file:///home/bluebird/.m2/repository</url>
</snapshotRepository>
</distributionManagement>
</project>
索引jsp:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>Hello World ${requestScope.name}</title></head>
<body>
Hello World!<br/>
<%
out.println("Your IP address is " + request.getRemoteAddr());
out.println("Your name is " + request.getAttribute("name"));
%>
</body>
</html>
web.xml:
<!DOCTYPE web-app PUBLIC
"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd" >
<web-app>
<display-name>Archetype Created Web Application</display-name>
<servlet>
<servlet-name>MainServlet</servlet-name>
<servlet-class>MainServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>MainServlet</servlet-name>
<url-pattern>/processForm</url-pattern>
</servlet-mapping>
</web-app>
MainServlet.java:
@WebServlet("/processForm")
public class MainServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
req.setAttribute("name", "Devcolibri");
req.getRequestDispatcher("index.jsp").forward(req, resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
super.doPost(req, resp);
}
}
服务器成功 运行 并且应用程序正常运行。但是,我无法获取 servlet 设置的属性。在网络浏览器中我收到:
世界,您好!
你的 IP 地址是 127.0.0.1 你的名字是 null
我读过这个
但这对我没有帮助。
感谢所有阅读到最后的人。希望对你有所帮助。
P.S。对不起我的英语不好。我来自乌克兰。
我认为您阅读的 上的答案解释了这种情况,但没有告诉您确切的 url 用途。 /processForm
是您必须请求才能调用 servlet 的映射路径。
因此,如果您的 Web 应用程序的上下文路径是 /web_application
,您需要浏览到 /web_application/processForm
。
如果您单独浏览 /web_application
,您的容器将搜索 welcome files,并且由于 index.jsp
默认存在,您将请求 jsp无需调用 servlet。因此,servlet 中设置的请求属性将为空。
我有一个简单的 jsp 应用程序。那使用Maven.
Pom.xml:
<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://maven.apache.org/POM/4.0.0"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>Lab3.web_application</groupId>
<artifactId>web_application</artifactId>
<packaging>war</packaging>
<version>1.0-SNAPSHOT</version>
<name>web_application Maven Webapp</name>
<url>http://maven.apache.org</url>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>javax</groupId>
<artifactId>javaee-web-api</artifactId>
<version>6.0</version>
<scope>provided</scope>
</dependency>
</dependencies>
<build>
<finalName>web_application</finalName>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.3.2</version>
<configuration>
<source>1.6</source>
<target>1.6</target>
</configuration>
</plugin>
<plugin>
<groupId>com.oracle.weblogic</groupId>
<artifactId>wls-maven-plugin</artifactId>
<version>12.1.3.0</version>
<configuration>
<middlewareHome>/home/bluebird/Oracle/Middleware/Oracle_Home</middlewareHome>
<adminurl>t3://localhost:7001</adminurl>
<domainHome>/home/bluebird/Oracle/Middleware/Oracle_Home/user_projects/domains/base_domain
</domainHome>
<user>weblogic</user>
<password>yamahar6</password>
<upload>true</upload>
<remote>false</remote>
<verbose>true</verbose>
<source>./target/web_application.war</source>
<name>${project.build.finalName}</name>
</configuration>
<executions>
<execution>
<id>startserver</id>
<phase>initialize</phase>
<goals>
<goal>start-server</goal>
</goals>
</execution>
<execution>
<phase>pre-integration-test</phase>
<goals>
<goal>deploy</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
<distributionManagement>
<snapshotRepository>
<id>localSnapshot</id>
<name>local snapshot repository</name>
<url>file:///home/bluebird/.m2/repository</url>
</snapshotRepository>
</distributionManagement>
</project>
索引jsp:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>Hello World ${requestScope.name}</title></head>
<body>
Hello World!<br/>
<%
out.println("Your IP address is " + request.getRemoteAddr());
out.println("Your name is " + request.getAttribute("name"));
%>
</body>
</html>
web.xml:
<!DOCTYPE web-app PUBLIC
"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd" >
<web-app>
<display-name>Archetype Created Web Application</display-name>
<servlet>
<servlet-name>MainServlet</servlet-name>
<servlet-class>MainServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>MainServlet</servlet-name>
<url-pattern>/processForm</url-pattern>
</servlet-mapping>
</web-app>
MainServlet.java:
@WebServlet("/processForm")
public class MainServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
req.setAttribute("name", "Devcolibri");
req.getRequestDispatcher("index.jsp").forward(req, resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
super.doPost(req, resp);
}
}
服务器成功 运行 并且应用程序正常运行。但是,我无法获取 servlet 设置的属性。在网络浏览器中我收到:
世界,您好! 你的 IP 地址是 127.0.0.1 你的名字是 null
我读过这个
感谢所有阅读到最后的人。希望对你有所帮助。 P.S。对不起我的英语不好。我来自乌克兰。
我认为您阅读的 /processForm
是您必须请求才能调用 servlet 的映射路径。
因此,如果您的 Web 应用程序的上下文路径是 /web_application
,您需要浏览到 /web_application/processForm
。
如果您单独浏览 /web_application
,您的容器将搜索 welcome files,并且由于 index.jsp
默认存在,您将请求 jsp无需调用 servlet。因此,servlet 中设置的请求属性将为空。