springMVC 浏览器直接显示jsp源码。求解?

只是_曾经 2013-10-09 05:06:02
直接访问jsp也会显示源码.


controller代码

package com.controller;


import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.servlet.ModelAndView;
import com.pojo.User;
import com.service.IUserService;
import com.validator.UserValidator;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@Controller
@RequestMapping(value = "/user")
public class UserController {
@Autowired
private IUserService userService;
@Autowired
private UserValidator userValidator;

@RequestMapping(value = "/getUser/id/{userID}")
public ModelAndView getUser(@PathVariable int userID) throws Exception {
ModelAndView model=new ModelAndView("hello");
model.addObject("hello_1", userService.getUserByID(userID));
Logger logger = Logger.getLogger(UserController.class);
logger.info("test");
return model;
}

@RequestMapping(value="/listPageUser")
public ModelAndView listPageUser(User user){
ModelAndView model=new ModelAndView("hello_s");
model.addObject("hello_s", userService.listPageUser(user));
return model;
}

@RequestMapping(value = "/getStr")
@ResponseBody
public String getStr(HttpServletRequest request,
HttpServletResponse response) throws Exception {
return "hello!";
}

@RequestMapping(value = "/getJSP")
public String getJSP(HttpServletRequest request,
HttpServletResponse response) throws Exception {
request.setAttribute("hello_1", userService.getUserByID(1));
return "hello";
}
@RequestMapping(value="/delete/id/{id}")
@ResponseBody
public String deleteUser(@PathVariable int id){
userService.deleteUserByID(id);
return "Success!";
}
@RequestMapping(value="/saveUser")
@ResponseBody
public String saveUser(User user,BindingResult result){
userValidator.validate(user,result);
if(result.hasErrors()){
return "fail!";
}
int userID=userService.saveUser(user);
return "userID="+userID;
}
@RequestMapping(value="/throwException")
public String throwException(){
int bbb=Integer.valueOf(null);
return "exception";
}
}


spring配置文件

<?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:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd">
<!-- 连接池配置 -->
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName" value="com.mysql.jdbc.Driver"></property>
<property name="url"
value="jdbc:mysql://localhost:3306/myBatis?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull"></property>
<property name="username" value="root"></property>
<property name="password" value="root"></property>
<property name="maxActive" value="100"></property>
<property name="maxIdle" value="30"></property>
<property name="maxWait" value="500"></property>
<property name="defaultAutoCommit" value="true"></property>
</bean>
<!-- MyBatis的 sqlSessionFactory -->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="configLocation" value="classpath:MyBatis-Configuration.xml"></property>
<property name="dataSource" ref="dataSource" />
</bean>
<!-- 以下是springMVC配置 -->
<bean id="viewResolver"
class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/jsp/" />
<property name="suffix" value=".jsp" />
</bean>

<!-- 使Spring关注Annotation -->

<context:annotation-config />

<!-- 让Spring通过自动扫描来查询和管理Bean -->
<context:component-scan base-package="com.controller" />
<context:component-scan base-package="com.dao" />
<context:component-scan base-package="com.service.impl" />
<context:component-scan base-package="com.validator" />

<bean class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping"/>
<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter"/>

<!-- 静态资源-->
<mvc:default-servlet-handler/>
<!-- <mvc:resources mapping="/staticFile/**" location="/staticFile/"/>-->

<!-- 拦截器配置-->
<mvc:interceptors>
<mvc:interceptor>
<mvc:mapping path="/user/getUser/**" />
<bean class="com.Interceptor.UserInterceptor"></bean>
</mvc:interceptor>
</mvc:interceptors>

<!-- 总错误处理-->
<bean id="exceptionResolver" class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
<property name="defaultErrorView">
<value>error/error</value>
</property>
<property name="defaultStatusCode">
<value>500</value>
</property>
<property name="warnLogCategory">
<value>org.springframework.web.servlet.handler.SimpleMappingExceptionResolver</value>
</property>
</bean>
<!-- 配置事务管理器 -->
<bean id="transactionManager"
class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"></property>
</bean>
<!-- 配置事务的传播特性 -->
<tx:advice id="txAdvice" transaction-manager="transactionManager">
<tx:attributes>
<tx:method name="save*" propagation="REQUIRED" />
<tx:method name="update*" propagation="REQUIRED" />
<tx:method name="delete*" propagation="REQUIRED" />
<tx:method name="query*" propagation="REQUIRED" />
<tx:method name="*" read-only="true" />
</tx:attributes>
</tx:advice>

<!-- 配置参与事务的类或方法 -->
<aop:config>
<aop:pointcut id="allServiceMethod" expression="execution(* com.service.*.*.*(..))" />
<aop:advisor pointcut-ref="allServiceMethod" advice-ref="txAdvice" />
</aop:config>


</beans>
...全文
7488 24 打赏 收藏 转发到动态 举报
写回复
用AI写文章
24 条回复
切换为时间正序
请发表友善的回复…
发表回复
海渔夫 2016-02-29
  • 打赏
  • 举报
回复
引用 21 楼 liwenjieifk 的回复:
<servlet-mapping> <servlet-name>springMVC</servlet-name> <url-pattern>/*</url-pattern> </servlet-mapping> 将上面的改为下面的即可 拦截是/ 而不是/* <servlet-mapping> <servlet-name>springMVC</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping>
fireinjava 2015-07-21
  • 打赏
  • 举报
回复
力挺21楼! 拦截是/ 而不是/*
  • 打赏
  • 举报
回复
InternalResourceViewResolver将视图名解析为一个url,可以理解为转发获取jsp页面。如果使用/*拦截,则需要配置 <mvc:resources mapping="/WEB-INF/jsp/demo/**" location="/WEB-INF/jsp/demo/" cache-period="31556926"/>`标签或者 <mvc:default-servlet-handler/>,就可以访问静态资源了。但是这样的话就显示jsp源码了,并没有解析为servlet。所以使用*.html拦截。
liwenjieifk 2014-07-23
  • 打赏
  • 举报
回复
<servlet-mapping> <servlet-name>springMVC</servlet-name> <url-pattern>/*</url-pattern> </servlet-mapping> 将上面的改为下面的即可 拦截是/ 而不是/* <servlet-mapping> <servlet-name>springMVC</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping>
honchy 2014-05-20
  • 打赏
  • 举报
回复
引用 19 楼 lianyong168 的回复:
你这个16楼,只是说了错误的配置是什么,而并没有把怎么解决问题的写清楚啊,楼主。 就详细解释一下哦!
测试了下,这样配置是可行的。版本是spring最新的4 web.xml
	<servlet-mapping>
		<servlet-name>dispatcher</servlet-name>
		<url-pattern>/</url-pattern>		
	</servlet-mapping>
view-resolver.xml
<!-- 配置内容协商视图解析 -->
	<bean id="contentNegotiatingViewResolver"
		class="org.springframework.web.servlet.view.ContentNegotiatingViewResolver">
		<!-- medieTypes -->
		<property name="mediaTypes">
			<props>
				<prop key="json">application/json</prop>
			</props>
		</property>
		<!-- 设置默认视图 -->
		<property name="defaultViews">
			<list>
				<ref bean="mappingJacksonJsonView" />
			</list>
		</property>
	</bean>

	<!-- 默认jsp视图 -->
	<bean id="defalutViewResolver"
		class="org.springframework.web.servlet.view.InternalResourceViewResolver">
		<property name="prefix" value="/WEB-INF/jsp/"></property>
		<property name="suffix" value=".jsp"></property>
	</bean>

	<!-- JSON视图 -->
	<bean id="mappingJacksonJsonView"
		class="org.springframework.web.servlet.view.json.MappingJackson2JsonView"></bean>
dispatcher.xml
<!-- 开启注解驱动 -->
	<!-- 这样可以使用@Controller这些注解 -->
	<mvc:annotation-driven />
	<!-- 开启默认处理 -->
	<!-- 这样静态资源就可以访问了-->
	<mvc:default-servlet-handler />

	<context:component-scan base-package="qa.controller"></context:component-scan>

	<!-- 导入hibernate配置 <import resource="hibernate-beans.xml" /> -->
	<!-- 导入视图解析配置 -->
	<import resource="view-resolve.xml" />
终于可以碎觉了。搞定
lianyong168 2014-04-08
  • 打赏
  • 举报
回复
你这个16楼,只是说了错误的配置是什么,而并没有把怎么解决问题的写清楚啊,楼主。 就详细解释一下哦!
只是_曾经 2014-03-03
  • 打赏
  • 举报
回复
引用 17 楼 Kcher_VIII 的回复:
楼主,你最后是怎么解决的呢?
看16楼。。
Kcher_VIII 2014-03-02
  • 打赏
  • 举报
回复
楼主,你最后是怎么解决的呢?
只是_曾经 2013-10-10
  • 打赏
  • 举报
回复
引用 15 楼 finallygo 的回复:
[quote=引用 14 楼 shanxiuwei 的回复:] [quote=引用 12 楼 finallygo 的回复:] Server Apache-Coyote/1.1 你的代码有部署到tomcat么?
是的,部署在myeclipse的默认tomcat下[/quote] 但是响应头中看到的信息是apache返回的,可能是apache和tomcat整合有问题,也可能是apache中也部署了代码 建议你直接访问tomcat,不走apache试试[/quote] 问题已经解决: 当springMVC配置

<!-- 静态资源-->
	<mvc:default-servlet-handler/> 
	<bean class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping"/>
    <bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter"/>
并且将web.xml中的springMVC拦截配置为

<servlet-mapping>
		<servlet-name>springMVC</servlet-name>
		<url-pattern>/*</url-pattern>
	</servlet-mapping>
在这种情况向springMVC会把*.jsp,*.sql,*.txt都当做txt处理。结果就是直接在浏览器加载了jsp源码。 谢谢各位帮助!
finallygo 2013-10-09
  • 打赏
  • 举报
回复
引用 14 楼 shanxiuwei 的回复:
[quote=引用 12 楼 finallygo 的回复:] Server Apache-Coyote/1.1 你的代码有部署到tomcat么?
是的,部署在myeclipse的默认tomcat下[/quote] 但是响应头中看到的信息是apache返回的,可能是apache和tomcat整合有问题,也可能是apache中也部署了代码 建议你直接访问tomcat,不走apache试试
只是_曾经 2013-10-09
  • 打赏
  • 举报
回复
引用 12 楼 finallygo 的回复:
Server Apache-Coyote/1.1 你的代码有部署到tomcat么?
是的,部署在myeclipse的默认tomcat下
只是_曾经 2013-10-09
  • 打赏
  • 举报
回复
引用 8 楼 rui888 的回复:
重新编译启动。
这个肯定是试过了。不是临时文件的问题
finallygo 2013-10-09
  • 打赏
  • 举报
回复
Server Apache-Coyote/1.1 你的代码有部署到tomcat么?
只是_曾经 2013-10-09
  • 打赏
  • 举报
回复
引用 9 楼 finallygo 的回复:
[quote=引用 6 楼 finallygo 的回复:] 你使用的是tomcat的么? 是的话,可以参考http://hi.baidu.com/sim_na/item/3a5155cd6fc6c124e80f2e71
或者是你使用了apache, 最后是apache来解析jsp了,你开启下浏览器的控制台(F12),把响应的header发一下[/quote] 响应头信息原始头信息 Date Wed, 09 Oct 2013 09:41:55 GMT Server Apache-Coyote/1.1 请求头信息原始头信息 Accept text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Accept-Encoding gzip, deflate Accept-Language zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3 Cache-Control max-age=0 Connection keep-alive Host 192.168.0.220:8080 If-Modified-Since Mon, 23 Sep 2013 02:14:55 GMT If-None-Match W/"1004-1379902495703" User-Agent Mozilla/5.0 (Windows NT 5.1; rv:24.0) Gecko/20100101 Firefox/24.0 来自缓存的响应头信息 Content-Length 1004 Date Wed, 09 Oct 2013 09:41:55 GMT Etag W/"1004-1379902495703" Last-Modified Mon, 23 Sep 2013 02:14:55 GMT Server Apache-Coyote/1.1
只是_曾经 2013-10-09
  • 打赏
  • 举报
回复
引用 6 楼 finallygo 的回复:
你使用的是tomcat的么? 是的话,可以参考http://hi.baidu.com/sim_na/item/3a5155cd6fc6c124e80f2e71
这篇文章讲的是文件列表的问题。和显示源码好像没关系。。
finallygo 2013-10-09
  • 打赏
  • 举报
回复
引用 6 楼 finallygo 的回复:
你使用的是tomcat的么? 是的话,可以参考http://hi.baidu.com/sim_na/item/3a5155cd6fc6c124e80f2e71
或者是你使用了apache, 最后是apache来解析jsp了,你开启下浏览器的控制台(F12),把响应的header发一下
tony4geek 2013-10-09
  • 打赏
  • 举报
回复
重新编译启动。
只是_曾经 2013-10-09
  • 打赏
  • 举报
回复
引用 6 楼 finallygo 的回复:
你使用的是tomcat的么? 是的话,可以参考http://hi.baidu.com/sim_na/item/3a5155cd6fc6c124e80f2e71
我去看看。
finallygo 2013-10-09
  • 打赏
  • 举报
回复
你使用的是tomcat的么? 是的话,可以参考http://hi.baidu.com/sim_na/item/3a5155cd6fc6c124e80f2e71
只是_曾经 2013-10-09
  • 打赏
  • 举报
回复
引用 3 楼 u010786672 的回复:
看错了……==……如果@RequestMapping(value = "/getUser/id/{userID}")这个页面没问题的话,你是不是把hello_s改成其他的变量名,不要和页面的命名相同?
其实直接访问http://192.168.0.220:8080/MyBatisAndSpring/index.jsp 也是显示jsp源码的。所以才感觉奇怪
加载更多回复(4)

81,092

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧