《研磨struts2》 第二章 Struts2的HelloWorld 之从Servlet+JSP+JavaBean实现MVC开始 (二)

2014-11-24 08:17:05 · 作者: · 浏览: 1

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,配置示例如下:

java代码:
查看复制到剪贴板打印

hello
cn.javass.hello.servletimpl.servlet.HelloWorldServlet



hello
/hello


配置分为元素和元素,它们都有一个子元素,而元素和元素的子元素里面注册的名字必须一样。元素的子元素用来注册Servlet类的全类名,也就是包的全路径再加上类名称,而元素的元素指明了这个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"%>



Insert title here





<%
if("login".equals(helloModel.getSubmitFlag())){
%>

<%
}
%>



账号:

密码:







说明一下:

元素的action属性用来指定由谁来进行响应,由于这里使用JavaBean来收集页面的数据,因此需要先提交到本页面,然后再转向相应的servlet进行处理,其中的“/helloworld”为这个工程的web上下文名,而“/login”是这个Servlet在这个web工程中的资源名,和web.xml中的配置要对应(就是元素的子元素中的值)。

提示:为了方便中文的处理,在今后的学习中统一采用gb2312编码,有些朋友可能习惯统一采用utf-8,都没有问题,只要全部统一起来,处理中文的时候就会比较方便。

2.3.8 编写欢迎页面

欢迎页面是完成登录功能过后跳转到的页面,用来显示欢迎信息,非常简单,只是简单的把需要展示的信息输出到页面上。

<%@ page language="java" contentType="text/html; charset=gb2312"
pageEncoding="gb2312"%>



Insert title here




欢迎账号为<%=hwm.getAccount() %>的朋友来访


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会先接收请求中的参数,然后在后台输出你刚刚输入的数据,后台输出如下所示:

正在进行业务处理=======>
用户输入的参数为===account=test,password=test,submitFlag=login


接着HelloWorldServlet会把这些数据设置到request中,作为共享的数据传递给下一个页面,接下来就该跳转到下一个页面welcome.jsp,也就是欢迎页面了。欢迎页面会把HelloWorldServlet中传递过来的数据,输出到页面上。如下图所示:

\

2.3.10 中文处理

示例做到这里,好像已经可以很好的工作了,但是,如果在账号里输入“中文”,会发现后台输出的信息和欢迎页面接收到的参数都是乱码,如下所示:

正在进行业务处理=======>
用户输入的参数为===account= ,password=test,submitFlag=login

后台输出接收到的参数是乱码,再看看页面上的表现,如下图所示:

\

图2.19 欢迎页面接收到的参数也是乱码

遇到中文问题了,该怎么处理呢?

在实际项目里会使用一个Filter来解决Tomcat的中文问题,这里不去讨论Filter的写法,在Tom