我试着学习springmvc。但是当我开始时,我遇到了一个问题。
我认为这是一个简单的问题。我在网上搜索它并找到很多例子。但我找不到原因。这就是代码。
HomeControll.java
package cn.qingtianr.controll;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.RequestMapping;
/**
* Created by jack on 16-5-20.
*/
@Controller
public class HomeControll {
@RequestMapping("/")
public String index(ModelMap model){
String s = "hhh";
model.addAttribute("hello",s);
return "index";
}
}
的index.jsp
<%--
Created by IntelliJ IDEA.
User: jack
Date: 16-5-20
Time: 下午6:31
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
${hello}
</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>hello</servlet-name>
<servlet-class>
org.springframework.web.servlet.DispatcherServlet
</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>hello</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>
您好-servlet.xml中
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd">
<context:component-scan base-package="cn.qingtianr.controll"/>
<mvc:default-servlet-handler/>
<mvc:annotation-driven/>
<bean id="jspViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/>
<property name="prefix" value="/"/>
<property name="suffix" value=".jsp"/>
</bean>
</beans>
的pom.xml
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
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>cn.qingtianr</groupId>
<artifactId>springmvctest</artifactId>
<packaging>war</packaging>
<version>1.0-SNAPSHOT</version>
<name>springmvctest Maven Webapp</name>
<url>http://maven.apache.org</url>
<properties>
<spring.version>4.2.5.RELEASE</spring.version>
<spring-data.version>1.2.0.RELEASE</spring-data.version>
</properties>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>jstl</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
</dependencies>
<build>
<finalName>springmvctest</finalName>
</build>
</project>
当我访问index.jsp时,我的浏览器上的${hello}
不是hhh
。也许我得到了一个低级错误。但我真的不知道。
那么有人可以帮助我吗?谢谢。
答案 0 :(得分:1)
看起来像DispatcherServlet映射的旧SpringMVC问题。
您将servlet映射到/,这意味着它将获得没有其他servlet(包括默认容器1)可以解析的所有URL。一个常见的问题是Spring MVC DispatcherServlet永远不会收到空的URL&#39; /&#39; (请参阅我的另一篇answer以获得更详细的解释。)
所以我假设你直接调用index.jsp文件而没有先命中控制器。但是(当然)hello
模型变量尚未放入请求属性中,因此无法使用。
如何解决:
为避免直接命中jsp文件,优秀做法建议将它们放在WEB-INF文件夹下。这样,它们永远不会是servlet容器的服务器,并且只有在从控制器转发到时才会显示=&gt;在WEB-INF / jsp / index.jsp下移动index.jsp,并相应地在jspViewResolver配置中更改<property name="prefix" value="/WEB-INF/jsp/"/>
。
然后使用参考帖子中的一个解决方案。我建议将DispatcherServlet映射到/*
并将静态资源移动到由ResourceHttpRequestHandler处理的文件夹,例如:
<mvc:resources mapping="/resources/**" location="/public-resources/"/>
正在使用xml配置
答案 1 :(得分:0)
试试这个:
之前添加!DOCTYPE
class ConfigurePort(QDialog):
def __init__(self, parent):
super(ConfigurePort, self).__init__(parent)
uic.loadUi("configurePort.ui", self)
self.myValue = 10
self.restoreSettings()
self.connect(self.btn_checkconn, SIGNAL("clicked()"), self.check_ports)
self.buttonBox.button(QDialogButtonBox.Cancel).clicked.connect(self.close)
self.buttonBox.button(QDialogButtonBox.Ok).clicked.connect(self.closeEvent)
self.iniUi()
def check_ports(self):
pass
def iniUi(self):
pass #I just create some QLabels in here
@classmethod
def retrieve_data(cls, parent = None):
dlg = cls(parent)
dlg.exec_()
text = dlg.getPortText()
return text
def closeEvent(self, event):
self.saveSettings()
super(QDialog,self).closeEvent(event)
def saveSettings(self):
settings = QSettings("MyOrg", "MyApp")
settings.setValue("myValue", self.myValue)
def restoreSettings(self):
settings = QSettings("MyOrg", "MyApp")
self.myValue = settings.value("myValue", self.myValue)
打印值:
TypeError: QWidget.closeEvent(QCloseEvent): argument 1 has unexpected type 'bool'
完整的index.jsp:
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1" isELIgnored="false"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
希望它有所帮助。
答案 2 :(得分:0)
从弹簧配置中删除 <mvc:default-servlet-handler/>
。你不需要它,因为你的web.xml中已经有SpringDispatcher,并且你的spring配置中有一个视图解析器。
为&#34; /&#34;以外的请求映射添加值。例如,@RequestMapping("/blam")
。 (此网址为http://<host>/<context>/blam)。
不要使用&#34; index.jsp&#34;作为您的视图文件名。 &#34;的index.jsp&#34;是默认的欢迎文件名。
这对我有用:
<mvc:default-servlet-handler/>
。@RequestMapping("/blam")
。return "blam.jsp
。blam.jsp
。注意:我对<mvc:default-servlet-handler/>
错了。它提供了我想象的其他价值。