关于springmvc框架的web工程,从.xml到.java再到.jsp显示到网页上的过程,以及jsp静态文件的访问。

ZxxooZ 2015-05-11 03:27:10
作为一个初学者来说解决一个大难题是不容易的,要抓紧记录下来分享给大家才行。

首先,你应该拥有一个配置好的环境和安装好插件的eclipse(需要用到web插件,spring插件和jsp插件),以及tomcat的相关配置。
打开浏览器输入本地服务器地址(一般是http://localhost:8080/),可以显示tomcat主界面。
like this:


好了现在可以创建动态web工程了(工程名字随便起,在工作中要符合规范的起名字,乱来是不行的。这里为了方便理解(PS:主要是起名什么的我嫌麻烦),整个工程里面的名字全部用英语数字代替。),右键新建other...向下面的对话框:




(当然,以后用到的xml,jsp...都在此创建)


先说一下总体的框架,


框架可以理解为前后台两部分,前台是浏览器访问文件,后台是处理数据的java。像图片里画的的那样(这个是以前的,我边写边建一个新的(one)工程,但是基本组成的文件是差不多的)。
工程的目的是在浏览器网页访问本地服务器输出一个存在后台.java中的一个变量(我操作的是一个String name = zhu;访问其他数据也是可以的,比如再显示一张服务器上的照片),我还没有用到数据库的使用,让各位来寻找数据库连接办法的盆友失望了。
首先来了,工程所需要的包是不可缺少的,要导入的包各有各的用途,现在我们只导入基本的包(这些包在网上都有,自己去搜,这你都搜不到的话就别来学电脑了,转行吧!^_^)主要是我不知道怎么上传文件到这个帖子里。


把包放在WEB-INF下的lib文件夹里,然后编译。(可以在libraries找到导入的包就成功了)



下面需要配置web.xml文件这个文件是工程运行时第一个要找的文件,把它建立在WEB-INF下面,名字不能改。
内容是如下以及其详解

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1">
<display-name>one</display-name>
<!-- 上面这些都是系统自动生成的,是固定的,目前还没有理解其作用。 -->
<!-- 制定首页
当用户在浏览器中输入的URL不包含某个servlet名或JSP页面时,welcome-file-list元素可指定显示的默认文件
PS:咱这个工程里基本没用 -->
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>
<!-- servlet控制跳转 ,所有的请求都会被此拦截。有了它就要在外面配置一个对应的xml。-->
<servlet>
<!-- 这个name是随便起的,但是要对应起来 -->
<servlet-name>two</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<!-- 这个地方的name与上面的对应才行,还有外面对应的xml文件要写成 two-servlet.xml必须对应。 -->
<servlet-name>two</servlet-name>
<url-pattern>/</url-pattern><!-- 这个地方的/代表全部请求 -->
</servlet-mapping>
<!-- 字符过滤器 ,在此工程中貌似是没用到。-->
<filter>
<filter-name>encodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>utf8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>encodingFilter</filter-name >
<url-pattern>/*</url-pattern>
</filter-mapping>

</web-app>

好了web.xml的文件配置完成了,下面配置一个里面提到的对应的two-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/mvc
http://www.springframework.org/schema/mvc/spring-mvc-3.1.xsd
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd">
<!-- 上边这些就是一些引用的文件种种,不用管它,照着来就行。 -->
<!-- 引用注解 -->
<mvc:annotation-driven/>
<!-- 自动扫描下面命名的包 ,扫描到注解@controller后,就访问那个后台java了。-->
<context:component-scan base-package="three"/>
<bean id="registry" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/>
<!-- java文件里return的名字就是在这里找/WEB-INF/jsp/(eight).jsp ,于是就找到了-->
<property name="prefix" value="/WEB-INF/jsp/"></property>
<property name="suffix" value=".jsp"></property>
</bean>
</beans>

好了 现在配置文件已经完成了,该写后台文件了,前面说道要扫描的包名,我们先命名为three,则需要创建three包了
顺便也建好four类,数据处理都是在这里完成的。


java文件里我们说到了要用到注解还有与jsp文件传值的各种方法,所以要引入各种包。
直接写在工程里吧!说的比较明白。

package three;

import java.util.Map;

import org.springframework.stereotype.Controller; //你看,这里就用到了我们导入的包。
import org.springframework.web.bind.annotation.RequestMapping;

@Controller //这个就是前面xml文件里扫描到的类似连接进来的注解。
public class Four {
public String Name = "zhu";

//@RequestMapping”请求路径映射,如果标注在某个controller的类级别上,则表明访问此类路径下的
// 方法都要加上其配置的路径;最常用是标注在方法上,表明哪个具体的方法来接受处理某次请求。
@RequestMapping(value={"/","/zhu"}) //value值前后是否有“/”对请求的路径没有影响,即value="zhu" 、"/zhu"、"/zhu/"其效果是一样的
public String seven(Map<String,Object> a){
a.put("lalala", Name);
return "eight"; //这个地方return的值是将要寻找的jsp文件的名称,去哪儿找呢?
//就是去two-servlet。xml配置路径前面说的找eight.jsp。
}
}



好的额,现在运行完java文件又来寻找jsp文件了,jsp文件应该建立在哪里电脑才能找得到呢?
按配置的来呀!配置里写的是/WEB-INF/jsp/下面的.jsp文件,所以就要新建一个jsp文件夹,再把jsp文件放进去。
好的,上图。

jsp文件建好了,写点什么呢?哼哼o( ̄ヘ ̄o#)这就是html语句的使用了,自己去网上学,一天就能把基本的都掌握了。


<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
<!-- 注意上边的默认字符集要改成utf-8,要不然中文会出现乱码。 -->
<!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=ISO-8859-1">
<title>爱吃青菜的猪</title><!-- 这地方是显示在最上方标签位置的文字 -->
</head>
<body> <!-- body里面写的就是网页上显示的正文了。 -->
<!-- java 里用了个Map方法,使用具体信息自己去查。 -->
<p>这是后台里输出来的变量</p>
****************************************************************<br>
${lalala }<br>

</body>
</html>


到这时候输出来的是些什么东西呢?来吧,我们在服务器上运行一下吧!点击工程名右键run as==》run on server。
如果不能显示出来,就关掉eclipse重新以管理员的身份打开试一试吧!再不行的话就去百度解决吧!

看到域名为http://localhost:8080/one/,这个就是访问的我们建立的工程,在java@RequestMapping(value={"/","/zhu"})
就说明了,我们访问http://localhost:8080/one/或者是http://localhost:8080/one/zhu是得到相同的界面。
要是说我想输出各种不同的东西呢?好吧,给你个网址
http://wenku.baidu.com/link?url=oGkl2Xp0oDHE0cY7I3m1YFE8EYKEox7_Pz2Z93A9EMgVSj1Ctz2x5wou9fo3UmlvwxK37Kiw-BUddMcouOOS7mJai7L8-QMxJsXA_zHPcK7
讲的很清楚,学起来太简单。基本的都是很基础的。
来输出个图片,先把资源放进工作空间里去,放到哪里呢,嘿嘿,当然是你定义的eclipse的工作空间了。
比如我的工作空间D:\MyEclipse,再在工作空间里会找到一个和工程名一样的文件夹,按照我们没有使用数据库的前提下
我们要把它放在前台去也就是D:\MyEclipse\one\WebContent这里面,好吧来建一个存放静态文件资源的文件夹。
就叫five好了,来吧图片拷贝进去吧!
这时候你刷新一下你的eclipse就会看到,咦!多出来一个文件夹five呀!

好吧再在jsp文件里加一条输出
<h1>下面是一张图片</h1>
<img src="<%=request.getContextPath()%>/five/tupian.jpg" /><br>
<!-- 中间那玩意是啥呀? 说实话 我也不清楚 O(∩_∩)O~ -->
<img src="/five/tupian.jpg" /><br>
<!-- 去掉也能显示 -->

但是我在输出图片或是音乐一类的文件的时候会出现一些问题,没有图片出来吧!

这是springmvc配置文件在拦截访问路径的时候把你的图片地址也拦下来了,当做一个地址去@controller 找了。
当然找不到,这些文件是在前台,后台有没有
来我们修改配置文件,找到two-servlet.xml在拦截器上戳个洞
按照下边的改了这块。
  
<!-- 引用注解 -->
<mvc:annotation-driven/>
<!-- 自动扫描下面命名的包 ,扫描到注解@controller后,就访问那个后台java了。-->
<context:component-scan base-package="three"/>
<!-- 下面这行,静态文件访问路径权限,意思就是下面的location目录会跳过拦截直接访问,
(在这里写的five,six就是说WebContent的five,six文件夹里的所有东西都可以跳过拦截)
这是后面我要说的静态文件访问的问题用到的。 -->
<mvc:resources location="/five/" mapping="/five/**"/>
<bean id="registry" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/>
<!-- java文件里return的名字就是在这里找/WEB-INF/jsp/(eight).jsp ,于是就找到了-->
<property name="prefix" value="/WEB-INF/jsp/"></property>
<property name="suffix" value=".jsp"></property>
</bean>
</beans>

改完之后,需要重新启动服务器才行。
不要激动,在查个视频音频什么的。
<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
<!-- 注意上边的默认字符集要改成utf-8,要不然中文会出现乱码。 -->
<!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=ISO-8859-1">
<title>爱吃青菜的猪</title><!-- 这地方是显示在最上方标签位置的文字 -->
</head>
<body> <!-- body里面写的就是网页上显示的正文了。 -->
<!-- java 里用了个Map方法,使用具体信息自己去查。 -->
<p>这是后台里输出来的变量</p>
****************************************************************<br>
${lalala }<br>
<h1>下面是一视频和一音乐</h1>
<embed src="five/yinyue.mp3" autostart="false" loop="true" width="300" height="70"> </embed>
<br>
<embed src="five/shipin.mp4" autostart="false" loop="true" width="500" height="300"> </embed>

<h1>下面是一张图片</h1>
<img src="<%=request.getContextPath()%>/five/tupian.jpg" /><br>
<!-- 中间那玩意是啥呀? 说实话 我也不清楚 O(∩_∩)O~ -->
<img src="/five/tupian.jpg" /><br>
<!-- 去掉也能显示 -->

</body>
</html>



此处应该有掌声O(∩_∩)O~





方法均来自网络各种教程,新手学习错误不断,欢迎大家纠正信息。完善我的web工程。
...全文
929 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
PrettyPinkPig 2017-02-22
  • 打赏
  • 举报
回复
PrettyPinkPig 2017-02-22
  • 打赏
  • 举报
回复
可以,初学一看就懂
tobin liao 2016-09-16
  • 打赏
  • 举报
回复
谢谢楼主分享
街头小贩 2016-01-29
  • 打赏
  • 举报
回复
感 谢楼主分享
hnqtlm 2016-01-28
  • 打赏
  • 举报
回复

10,607

社区成员

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

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