- 浏览: 310198 次
最新评论
-
nucleus:
为什么都是没有图的。。。。。。。求图片啊
《研磨struts2》第七章 值栈和OGNL 之 7.4 ActionContext和ServletActionContext -
nucleus:
为什么都是没有图的。。。。。。。求图片啊
《研磨struts2》第七章 值栈和OGNL 之 7.4 ActionContext和ServletActionContext -
nucleus:
为什么都是没有图的。。。。。。。求图片啊
《研磨struts2》第七章 值栈和OGNL 之 7.4 ActionContext和ServletActionContext -
nucleus:
为什么都是没有图的。。。。。。。求图片啊
《研磨struts2》第七章 值栈和OGNL 之 7.4 ActionContext和ServletActionContext -
hunanjun000:
《研磨struts2》第四章 Action 之 4.5 Action的其它重要知识
2.3.Struts2的HelloWorld 之从Servlet+JSP+JavaBean实现MVC开始
2.3.1 起点概述
考虑到大部分朋友都是有一定经验的web开发者,因此从Servlet+JSP+JavaBean实现MVC开始,再过渡到Struts2的开发,这样能让大家把以前的知识自然迁移到Struts2上,使得学习曲线变得平滑。
说明一下,由于本机的8080端口被别的软件占用了,所以把tomcat改到了9080端口,以后在程序里出现的时候,也将是9080。
注意:如果要修改Tomcat的端口,需要修改Tomcat中的server.xml配置文件,并且应该在创建动态工程之前进行修改。请找到Tomcat的安装目录下的conf子目录,找到其中的server.xml,在这个文件中搜索8080,会找到相应的配置部分:
把上面配置中的8080改为9080即可。
比如Tomcat安装在E:\Struts2\server\apache-tomcat-6.0.29,因此需要修改的配置文件在E:\Struts2\server\apache-tomcat-6.0.29\conf\server.xml
2.3.2 建立动态的web工程
为了使用eclipse-jee-europa中各种与Web开发相关的功能,先来建立一个动态的web工程。
(1)在Package Expolorer视图中的空白处点右键,选择【New】->【Project】,在弹出页面选中web文件夹下的Dynamic Web Project选项,如下界面。
图2.10 选择新建动态web工程
(2)选择其中的”Dynamic Web Project”,点击Next。会跳转到如下界面。
图2.11 建立web工程的配置1
(3)输入项目名HelloWorld之后,然后选择Target Runtime的值为Apache Tomcat v6.0 ,这样eclipse会帮你导入tomcat下所有的jar包,然后点击Next,得到如下界面:
图2.12 建立web工程的配置2
(4)使用默认的配置,点击Next,得到如下界面:
图2.13 建立web工程的配置3
(5)修改Context Root的值为小写的helloworld,默认是工程名字,是“HelloWorld”。至于WebContent改不改,就看你的习惯了,用默认的就好了。
点击Finish,一个动态的Web工程就创建好了。
2.3.3 配置工程运行环境
在Servers视图中空白处点击右键,选择【New】->【Server】,得到如下界面。
图2.14 选择新建服务器
选择“Tomcat v6.0 Server”选项,点击Next,得到如下界面:
图2.15 选择web工程
选择HelloWorld工程,点击Add按钮,把工程添加到右边的列表,然后点击Finish,就完成了配置。这时候,在Package Explorer里会增加一个叫Servers的工程,这是eclipse自动管理的,暂时不需要修改这个工程中的任何文件。
2.3.4 编写JavaBean
用Model2来实现MVC,模型部分是使用JavaBean来实现的,而且视图和控制器之间的数据交互也是通过JavaBean来实现的,因此先来把JavaBean编写好。
这里不需要实现什么复杂的业务逻辑,只是一个简单的数据封装model,有三个属性,分别是account、password和submitFlag,其中的submitFlag是用来封装提交请求的标记,为他们提供相应的getter和setter方法,示例代码如下:
- package cn.javass.hello.servletimpl.vo;
- public class HelloWorldModel {
- private String account;
- private String password;
- private String submitFlag;
- public String getAccount() {
- return account;
- }
- public void setAccount(String account) {
- this.account = account;
- }
- public String getPassword() {
- return password;
- }
- public void setPassword(String password) {
- this.password = password;
- }
- public String getSubmitFlag() {
- return submitFlag;
- }
- public void setSubmitFlag(String submitFlag) {
- this.submitFlag = submitFlag;
- }
- public String toString(){
- return "account="+account+",password="+password
- +",submitFlag="+submitFlag;
- }
- /**
- * 示例方法,表示可以执行业务逻辑处理的方法,
- * 比如对数据进行增删改查的操作等等
- */
- public void businessExecute(){
- System.out.println("正在进行业务处理=======>");
- }
- }
2.3.5 编写Servlet
Servlet在Model2中的作用相当于MVC中的控制器,这里只是一个简单的实现,基本的实现主要有如下工作:
- 收集request传递过来的参数。
- 把这些参数组织成为模型需要的类型
- 调用模型进行逻辑功能处理
- 选择下一个页面,先准备好下一个页面需要的数据,然后转向下一个页面。
先来建立Servlet,在src下面先建包cn.javass.hello.servletimpl.servlet,然后在这个包下新建一个类HelloWorldServlet,这个类继承HttpServlet,并重写父类的doPost和doGet方法,其中doGet方法只是转调一下自己的doPost方法即可。在Servlet的doPost方法中,完成上面提到的工作。代码示例如下:
- package cn.javass.hello.servletimpl.servlet;
- import java.io.IOException;
- import javax.servlet.ServletException;
- import javax.servlet.http.HttpServlet;
- import javax.servlet.http.HttpServletRequest;
- import javax.servlet.http.HttpServletResponse;
- import cn.javass.hello.servletimpl.vo.HelloWorldModel;
- public class HelloWorldServlet extends HttpServlet {
- protected void doGet(HttpServletRequest request, HttpServletResponse response)
- throws ServletException, IOException {
- doPost(request, response);
- }
- protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{
- //1:收集参数,不用做了,通过JavaBean传入
- //2:组织参数,也不用作了,已经组织好了,把数据封装成了JavaBean
- //这里只需要获取封装好的JavaBean即可
- HelloWorldModel hwm = (HelloWorldModel)request.getAttribute("helloModel");
- //3:调用模型的逻辑功能处理
- hwm.businessExecute();
- //这里简单的输出一下传入的参数
- System.out.println("用户输入的参数为==="+hwm);
- //4:根据逻辑处理的结果来选择下一个页面,这里直接选择转向欢迎页面
- //4.1:先把需要欢迎页面显示的数据准备好
- request.setAttribute("hwm",hwm);
- //4.2:转向欢迎页面
- request.getRequestDispatcher("/servletimpl/welcome.jsp").forward(request,response);
- }
- }
非常简单,对吧,接下来看看如何配置这个Servlet。
2.3.6 配置web.xml
在web.xml中,配置上面做好的Servlet,配置示例如下:
配置分为<servlet>元素和<servlet-mapping>元素,它们都有一个子元素<servlet-name>,而<servlet>元素和<servlet-mapping>元素的<servlet-name>子元素里面注册的名字必须一样。<servlet>元素的子元素<servlet-class>用来注册Servlet类的全类名,也就是包的全路径再加上类名称,而<servlet-mapping>元素的<url-pattern>元素指明了这个Servlet响应哪些URL对应的请求。
2.3.7 编写登录页面
在项目的WebContent文件夹下创建一个servletimpl的文件夹,然后在servletimpl文件夹上右击,选择【New】->【Other】->【JSP】,创建一个名称为login的jsp页面,然后修改里面的“ISO-8859-1”为“gb2312”。
登录页面提供让用户填写用户名和密码的表单,用户填写好过后,可以点击提交按钮来向Servlet发出登录请求,示例代码如下。
- <%@ page language="java" contentType="text/html; charset=gb2312"
- pageEncoding="gb2312"%>
- <html>
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=gb2312">
- <title>Insert title here</title>
- </head>
- <body>
- <jsp:useBean id="helloModel" class="cn.javass.hello.servletimpl.vo.HelloWorldModel" scope="request"></jsp:useBean>
- <jsp:setProperty name="helloModel" property="*"/>
- <%
- if("login".equals(helloModel.getSubmitFlag())){
- %>
- <jsp:forward page="/hello"></jsp:forward>
- <%
- }
- %>
- <form action="/helloworld/servletimpl/login.jsp" method="post">
- <input type="hidden" name="submitFlag" value="login"/>
- 账号:<input type="text" name="account"><br>
- 密码:<input type="password" name="password"><br>
- <input type="submit" value="提交">
- </form>
- </body>
- </html>
说明一下:<form>元素的action属性用来指定由谁来进行响应,由于这里使用JavaBean来收集页面的数据,因此需要先提交到本页面,然后再转向相应的servlet进行处理,其中的“/helloworld”为这个工程的web上下文名,而“/login”是这个Servlet在这个web工程中的资源名,和web.xml中的配置要对应(就是<servlet-mapping>元素的子元素<url-parttern>中的值)。
提示:为了方便中文的处理,在今后的学习中统一采用gb2312编码,有些朋友可能习惯统一采用utf-8,都没有问题,只要全部统一起来,处理中文的时候就会比较方便。
2.3.8 编写欢迎页面
欢迎页面是完成登录功能过后跳转到的页面,用来显示欢迎信息,非常简单,只是简单的把需要展示的信息输出到页面上。
- <%@ page language="java" contentType="text/html; charset=gb2312"
- pageEncoding="gb2312"%>
- <html>
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=gb2312">
- <title>Insert title here</title>
- </head>
- <body>
- <jsp:useBean id="hwm" class="cn.javass.hello.servletimpl.vo.HelloWorldModel" scope="request"></jsp:useBean>
- 欢迎账号为<%=hwm.getAccount() %>的朋友来访
- </body>
- </html>
2.3.9 测试示例
要测试上面写的示例,需要先启动tomacat服务器,先选中Servers视图的里面的“Tomcat v6.0 Server at localhost”选项,然后点击start的按钮,则会启动tomcat6.0,如下图所示:
图2.16 启动tomcat
等几秒钟,tomcat启动的信息输出会出现在Console视图中,这就表示tomcat启动成功了。
当Tomcat正常启动后,在浏览器窗口中输入如下地址并运行:http://localhost:9080/helloworld/servletimpl/login.jsp,会出现登录页面。如下所示:
图2.17 访问登录页面
在登录页面输入账号和密码,点击提交,则会跳转到相应的HelloWorldServlet。 HelloWorldServlet会先接收请求中的参数,然后在后台输出你刚刚输入的数据,后台输出如下所示:
接着HelloWorldServlet会把这些数据设置到request中,作为共享的数据传递给下一个页面,接下来就该跳转到下一个页面welcome.jsp,也就是欢迎页面了。欢迎页面会把HelloWorldServlet中传递过来的数据,输出到页面上。如下图所示:
2.3.10 中文处理
示例做到这里,好像已经可以很好的工作了,但是,如果在账号里输入“中文”,会发现后台输出的信息和欢迎页面接收到的参数都是乱码,如下所示:
后台输出接收到的参数是乱码,再看看页面上的表现,如下图所示:
图2.19 欢迎页面接收到的参数也是乱码
遇到中文问题了,该怎么处理呢?
在实际项目里会使用一个Filter来解决Tomcat的中文问题,这里不去讨论Filter的写法,在Tomcat的包中就有一个写好的处理字符集的filter,位置在下载的Tomcatd的zip包下\webapps\examples\WEB-INF\classes\filters文件夹下面,名称是SetCharacterEncodingFilter.java。
为了示例简单,去掉了所有的注释,代码如下:
- public class SetCharacterEncodingFilter implements Filter {
- protected String encoding = null;
- protected FilterConfig filterConfig = null;
- protected boolean ignore = true;
- public void destroy() {
- this.encoding = null;
- this.filterConfig = null;
- }
- public void doFilter(ServletRequest request, ServletResponse response,FilterChain chain) throws IOException, ServletException {
- if (ignore || (request.getCharacterEncoding() == null)) {
- String encoding = selectEncoding(request);
- if (encoding != null)
- request.setCharacterEncoding(encoding);
- }
- chain.doFilter(request, response);
- }
- public void init(FilterConfig filterConfig) throws ServletException {
- this.filterConfig = filterConfig;
- this.encoding = filterConfig.getInitParameter("encoding");
- String value = filterConfig.getInitParameter("ignore");
- if (value == null)
- this.ignore = true;
- else if (value.equalsIgnoreCase("true"))
- this.ignore = true;
- else if (value.equalsIgnoreCase("yes"))
- this.ignore = true;
- else
- this.ignore = false;
- }
- protected String selectEncoding(ServletRequest request) {
- return (this.encoding);
- }
然后在web.xml中进行配置,示例如下:
- <filter>
- <filter-name>encoding</filter-name>
- <filter-class>filters.SetCharacterEncodingFilter</filter-class>
- <init-param>
- <param-name>encoding</param-name>
- <param-value>gb2312</param-value>
- </init-param>
- </filter>
- <filter-mapping>
- <filter-name>encoding</filter-name>
- <url-pattern>/*</url-pattern>
- </filter-mapping>
再次运行示例,会发现已经可以正常使用中文了。
私塾在线网站原创《研磨struts2》系列
转自请注明出处:【http://sishuok.com/forum/blogPost/list/0/4012.html】
欢迎访问http://sishuok.com获取更多内容
评论
而且用forward导致登陆后的地址还是login.jsp,非常不友好,这里该用sendRedirect
楼主这段代码的确有点怪异……
有点较真了吧……只不过是个名字而已……况且,好像也没什么命名的问题吧……
一般实现接口是在后面加impl的。虽然这里其实是继承,但是意思就这么个意思。。。
而且用forward导致登陆后的地址还是login.jsp,非常不友好,这里该用sendRedirect
发表评论
-
研磨struts2 目录贴
2012-08-24 12:12 163521.1 《研磨struts2》 第一章 Struts2 ... -
跟着cc学设计 之 研磨设计模式 视频教程 出炉了
2012-08-15 07:16 2研磨设计模式——跟着CC学设计系列精品课程,上线了! ... -
研磨struts2 目录
2012-07-30 21:15 2471.1 《研磨struts2》 第一章 Strut ... -
研磨struts2 目录
2012-07-30 16:54 361.1 《研磨struts2》 第一章 Stru ... -
《研磨struts2》A.2 struts.properties的配置 之 A.2.1 概述
2012-07-09 12:10 3071A.2.1 概述 如果我们希望覆盖在 ... -
《研磨struts2》附录A Struts2的配置 之 A.1 struts.xml的配置
2012-07-09 12:10 2718A.1 struts.xml的配置 A.1.1 ... -
《研磨struts2》第二十一章 零配置 之 21.3 通过注解来实现零配置
2012-07-06 08:07 292921.3 通过注解来实现零配置 21.3.1 ... -
《研磨struts2》第二十一章 零配置 之 21.2 约定大于配置
2012-07-05 10:44 247421.2 约定大于配置 21.2.1 约定 ... -
《研磨struts2》第二十一章 零配置 之 21.1 概述
2012-07-05 10:44 232521.1 概述 21.1.1 零配置概述 在 ... -
《研磨struts2》第二十章 整合SiteMesh 之 20.3 整合Struts2与SiteMesh
2012-07-04 08:15 2089在Struts2中使用SiteMesh ... -
《研磨struts2》第二十章 整合SiteMesh 之 20.2 单独使用SiteMesh
2012-07-03 08:00 210420.2 单独使用SiteMesh 20. ... -
《研磨struts2》第二十章 整合SiteMesh 之 20.1 调整应用的风格
2012-07-03 07:59 186920.1 调整应用的风 ... -
《研磨struts2》19.2 使用execAndWait拦截器模拟进度条 之 19.2.1 模拟长时间运行的Action
2012-07-02 12:24 214919.2.1模拟长时间运行的Action ... -
《研磨struts2》第十九章 进度条 之 19.1 使用“进度条”告知用户进度
2012-07-02 12:23 215119.1 使用“进度条”告知用户进度 ... -
《研磨struts2》第十八章 结合JFreeChart 之 18.3 Struts2结合JFreeChart
2012-06-28 12:12 201418.3 Struts2结合JFreeChart ... -
《研磨struts2》第十八章 结合JFreeChart 之 18.2 Struts2插件概述
2012-06-28 12:11 2030Struts2并没有求大求全,企图把所有 ... -
《研磨struts2》第十八章 结合JFreeChart 之 18.1 JFreeChart使用
2012-06-20 15:48 229618.1 JFreeChart使用 18.1.1概 ... -
研磨struts2(1-10章)电子书下载
2012-06-19 07:30 6078研磨struts2的博客文章 私塾在线学习网 《研 ... -
《研磨struts2》第十七章 防止重复提交 之 17.3 更强大的tokenSession拦截器
2012-06-18 13:46 208117.3 更强大的tokenSession拦截器 ... -
《研磨struts2》第十七章 防止重复提交 之 17.2 使用标签
2012-06-18 13:45 233917.2 使用<s:token/>标签 ...
相关推荐
jsp+servlet+javaBean实现MVC源码 jsp+servlet+javaBean实现MVC源码 jsp+servlet+javaBean实现MVC源码 jsp+servlet+javaBean实现MVC源码 jsp+servlet+javaBean实现MVC源码 jsp+servlet+javaBean实现MVC源码 jsp+...
jsp+servlet+javaBean实现MVC_jspmvcjsp+servlet+javaBean实现MVC_jspmvcjsp+servlet+javaBean实现MVC_jspmvcjsp+servlet+javaBean实现MVC_jspmvcjsp+servlet+javaBean实现MVC_jspmvcjsp+servlet+javaBean实现MVC_...
jsp+servlet+javaBean实现MVC_jspmvc(毕业设计+课程设计)jsp+servlet+javaBean实现MVC_jspmvc(毕业设计+课程设计)jsp+servlet+javaBean实现MVC_jspmvc(毕业设计+课程设计)jsp+servlet+javaBean实现MVC_jspmvc...
[其他类别]jsp+servlet+javaBean实现MVC_jspmvc [其他类别]jsp+servlet+...[其他类别]jsp+servlet+javaBean实现MVC_jspmvc[其他类别]jsp+servlet+javaBean实现MVC_jspmvc[其他类别]jsp+servlet+javaBean实现MVC_jspmvc
jsp+servlet+javaBean实现MVC jsp+servlet+javaBean实现MVCjsp+servlet+javaBean实现MVCjsp+servlet+javaBean实现MVCjsp+servlet+javaBean实现MVCjsp+servlet+javaBean实现MVCjsp+servlet+javaBean实现MVCjsp+...
[其他类别]jsp+servlet+javaBean实现MVC_jspmvc[其他类别]jsp+servlet+javaBean实现MVC_jspmvc[其他类别]jsp+servlet+javaBean实现MVC_jspmvc[其他类别]jsp+servlet+javaBean实现MVC_jspmvc[其他类别]jsp+servlet+...
[其他类别]jsp+servlet+javaBean实现MVC_jspmvc.rar[其他类别]jsp+servlet+javaBean实现MVC_jspmvc.rar[其他类别]jsp+servlet+javaBean实现MVC_jspmvc.rar[其他类别]jsp+servlet+javaBean实现MVC_jspmvc.rar[其他...
在"jsp+servlet+javaBean实现MVC_jspmvc.zip"这个压缩包中,我们可以期待找到以下内容: - JSP文件:包含HTML结构和嵌入的Java代码或JSTL标签,用于展示用户界面。 - Servlet文件:实现了HTTP请求处理逻辑,通常包括...
Servlet+JSP+JavaBean(MVC)模式适合开发复杂的web应用,在这种模式下,servlet负责处理用户请求,jsp负责数据显示,javabean负责封装数据。 Servlet+JSP、JavaBean模式程序各个模块之间层次清晰,web开发推荐采用此...
Java编程项目实战:jsp+servlet+javaBean实现MVC; Java编程项目实战:jsp+servlet+javaBean实现MVC; Java编程项目实战:jsp+servlet+javaBean实现MVC; Java编程项目实战:jsp+servlet+javaBean实现MVC; Java编程项目...
编程项目实战Java-jsp:jsp+servlet+javaBean实现MVC; 编程项目实战Java-jsp:jsp+servlet+javaBean实现MVC; 编程项目实战Java-jsp:jsp+servlet+javaBean实现MVC; 编程项目实战Java-jsp:jsp+servlet+javaBean...
(基于MVC模式下web端的开发,servlet负责处理用户请求,jsp负责数据显示,javabean负责封装数据。 Servlet+JSP+JavaBean模式程序各个模块之间层次清晰) 仅供初学者参考,内有文档注释,部分细节不懂者,留言即可
javaWEB项目:新生管理系统(Servlet+JSP+JavaBean) javaWEB项目:新生管理系统(Servlet+JSP+JavaBean) javaWEB项目:新生管理系统(Servlet+JSP+JavaBean) javaWEB项目:新生管理系统(Servlet+JSP+JavaBean) ...
Jsp+Servlet+JavaBean 实现MVC模式的留言本 声明:本留言本所有源代码开源,使用者可以自由修改和传播,但仅限于非商业用途。 作者:梁龙 博客:http://www.lianglong.net.cn 由于这是本人学习JAVA的第一个项目,...
登录和注册的jsp页面+servlet+javaBean登录和注册的jsp页面+servlet+javaBean登录和注册的jsp页面+servlet+javaBean登录和注册的jsp页面+servlet+javaBean登录和注册的jsp页面+servlet+javaBean登录和注册的jsp页面+...
在本文中,我们将深入探讨如何使用JavaEE技术栈,包括JSP、Servlet和JavaBean,来构建一个简单的在线留言板系统。这个系统的核心功能是允许用户提交留言并展示其他用户的留言。我们将从整体架构、关键组件和技术原理...
MySQL分页JSP实现Servlet+JavaBean+JSP三级架构 本文档对MySQL分页技术进行了总结,讨论了在JSP实现中使用Servlet+JavaBean+JSP三级架构的分页技术的实现方式。文章首先讨论了分页技术的重要性,并且提出了一个基本...