为什么redstarstar(红星星)还不来,很忙吗?
要不yanchang (笨笨) 你先说说吧?
要不yanchang (笨笨) 你先说说吧?
解决方案 »
- 为什么在使用<c:forEach>标签是报错?
- JSP中combox在数据库中取值问题,高手请进
- java过滤关键字?
- tomcat服务器报的错,急!!!在线等
- 关于在服务端生成XML文档的奇怪问题,哪位大侠给看看??
- 各位高手,帮一下忙,急
- spring Security3.1 不能创建配置文件里的bean
- 我使用连接池提示这个错误:cannot get Connection pool.
- 怎么用getProperty从bean中取得属性值的问题?
- jsp 与 javascrip的通讯?
- 有哪些高手做过将对数据库的所有操作封装到一个JAVABEAN中?提供有用建议的就给分,分可一直加……
- SQL SERVER7 Connection reset by peer
Model 1与Model 1.5简单来说就是将你的所有Java代码都写在JSP页面与javabean中,也就是通过你的JSP页面与javabean实现所有的业务逻辑。
Model 2则是JSP页面中只有少量的Java代码,然后通过路径的mapping将所有的Http请求都传给一个作为Controller的Servlet。在这个Servlet中调用相应的javabean或者EJB对请求进行处理,最后这个Servlet再forward到合适的JSP页面(也就是view)进行显示。MVC中的model我认为应该是那些保存状态的javabean(比如一个保存用户信息的bean)和所有的Entity bean。
Model 1与Model 1.5的优点:开发简单。
Model 1与Model 1.5的缺点:不好维护。
Model 2的优点:好多。将逻辑彻底从JSP页面中分离,JSP页面只负责显示结果。提高了安全性。易于维护。
Model 2的缺点:开发比较困难(但如果能利用好Struts,我觉得开发还是比较快的)
Struts的网址:
http://jakarta.apache.org/struts/doc-1.0.2/index.html
2.将所有的*.tld文件拷贝到mydomain\applications\DefaultWebApp\WEB-INF下。
3.在web.xml中加入:
<servlet>
<!-- Standard Action Servlet Configuration -->
<servlet-name>action</servlet-name>
<servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
<init-param>
<param-name>application</param-name>
<param-value>ApplicationResources</param-value>
</init-param>
<init-param>
<param-name>config</param-name>
<param-value>/WEB-INF/struts-config.xml</param-value>
</init-param>
<init-param>
<param-name>debug</param-name>
<param-value>2</param-value>
</init-param>
<init-param>
<param-name>detail</param-name>
<param-value>2</param-value>
</init-param>
<init-param>
<param-name>validate</param-name>
<param-value>true</param-value>
</init-param>
<load-on-startup>2</load-on-startup>
</servlet><!-- Standard Action Servlet Mapping -->
<servlet-mapping>
<servlet-name>action</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
<taglib>
<taglib-uri>/WEB-INF/struts-bean.tld</taglib-uri>
<taglib-location>/WEB-INF/struts-bean.tld</taglib-location>
</taglib> <taglib>
<taglib-uri>/WEB-INF/struts-html.tld</taglib-uri>
<taglib-location>/WEB-INF/struts-html.tld</taglib-location>
</taglib> <taglib>
<taglib-uri>/WEB-INF/struts-logic.tld</taglib-uri>
<taglib-location>/WEB-INF/struts-logic.tld</taglib-location>
</taglib>
附:有两次重新安装Struts后,weblogic启动时报错,我对比了weblogic带的web.xml与struts中带的web.xml发现只是在第二行有一些不一样,即<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 1(struts中是2).2//EN"。修改成2就可以正常启动了。
4.在mydomain\applications\DefaultWebApp\WEB-INF下建立struts-config.xml文件,加入如下内容:
<?xml version="1.0" encoding="ISO-8859-1" ?><!DOCTYPE struts-config PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 1.0//EN"
"http://jakarta.apache.org/struts/dtds/struts-config_1_0.dtd">
<struts-config><!-- ========== Form Bean Definitions =================================== -->
<form-beans>
</form-beans><!-- ========== Action Mapping Definitions ============================== -->
<action-mappings>
<!-- The standard administrative actions available with Struts -->
<!-- These would be either omitted or protected by security -->
<!-- in a real application deployment -->
<action path="/admin/addFormBean"
type="org.apache.struts.actions.AddFormBeanAction"/>
<action path="/admin/addForward"
type="org.apache.struts.actions.AddForwardAction"/>
<action path="/admin/addMapping"
type="org.apache.struts.actions.AddMappingAction"/>
<action path="/admin/reload"
type="org.apache.struts.actions.ReloadAction"/>
<action path="/admin/removeFormBean"
type="org.apache.struts.actions.RemoveFormBeanAction"/>
<action path="/admin/removeForward"
type="org.apache.struts.actions.RemoveForwardAction"/>
<action path="/admin/removeMapping"
type="org.apache.struts.actions.RemoveMappingAction"/>
</action-mappings>
</struts-config>
1.login.jsp
<%@ page language="java" %>
<%@ page contentType="text/html" %>
<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %><!-- 声明使用Struts的标签 -->
<html:html locale="true">
<head>
<title>Search</title>
</head>
<body>
<html:form action="/test/login.do"> <!-- action中的路径与struts-config.xml对应 -->
<html:text property="user" /> <!-- 文本框 -->
<html:submit>Submit</html:submit> <!-- 提交按钮 -->
</html:form>
</body>
</html:html>
说明:点击Submit后,Http请求转到Struts中的servlet,这个servlet在struts.jar中,它会调用一个类(用户自己编写的,即下面的LoginAction.class)由它进行逻辑控制。
2.LoginAction.class--Controller
package test;import org.apache.struts.action.*;
import javax.servlet.ServletException;
import javax.servlet.http.*;
import java.io.*;public class LoginAction extends Action
{
public ActionForward perform(ActionMapping mapping,ActionForm form,HttpServletRequest request,HttpServletResponse response)
throws IOException, ServletException
{
HttpSession session=request.getSession(); //获得当前的session对象 String user=(String)request.getParameter("user"); //获得用户名 UserInfo ui=new UserInfo(); //用一个对象保存用户的用户名,相当于model
ui.setUserName(user);
session.setAttribute("userinfo",ui); //将对象放入session中 if(user.equals("Mike"))
{
return (mapping.findForward("success")); //转向success.jsp页面,在struts-contig.xml定义
}
return (mapping.findForward("failed")); //转向failed.jsp页面,在struts-contig.xml定义
}
}
3.LoginForm.class—Model
package test;import javax.servlet.http.*;
import org.apache.struts.action.*;public class LoginForm extends ActionForm
{ public LoginForm()
{
} public void setUser(String user)
{
this.user=user;
}
public String getUser()
{
return user;
}
private String user="";
}
说明:保存提交的表单中的信息,即在一次会话中,用户提交表单后,表单中的所有信息都被保存起来,当用户返回此页面时,用户输入的所有信息均保留。
4.UserInfo.class--Model
package test;public class UserInfo
{ public UserInfo()
{
} public void setUserName(String userName)
{
this.userName=userName;
} public String getUserName()
{
return userName;
} private String userName="";
}
说明:一个保存当前会话信息的bean。
5.success.jsp—view
<%@ page language="java" %>
<%@ page contentType="text/html" %>
<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %>
<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %>
<jsp:useBean id="userinfo" scope="session" class="test.UserInfo"/> <!-- userinfo与LoginAction中对应 -->
<html:html locale="true">
<head>
<title>Search</title>
</head>
<body>
Success!<br>
Welcome <%=userinfo.getUserName() %>!<br>
Welcome <bean:write name="userinfo" property="userName"/>!<!-- 用Struts提供的标签实现读取bean中信息 --><br>
</body>
</html:html>
6.failed.jsp
<%@ page language="java" %>
<%@ page contentType="text/html" %>
<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %>
<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %>
<jsp:useBean id="loginform" scope="session" class="test.LoginForm"/> <!-- loginform与struts-config.xml中对应 -->
<html:html locale="true">
<head>
<title>Search</title>
</head>
<body>
Failed!<br>
No one is called: <bean:write name="loginform" property="user"/>.<br>
</body>
</html:html>
7.struts-config.xml
在<action-mappings>与</action-mappings>中插入如下内容:
<action path="/test/login"
type="test.LoginAction"
name="loginform"
scope="session"
validate="false">
<forward name="success" path="/test/success.jsp"/>
<forward name="failed" path="/test/failed.jsp"/>
</action>
在<form-beans>与</form-beans>中插入如下内容:
<form-bean name="loginform" type="test.LoginForm"/>
8.将所有*.jsp文件拷贝到mydomain\applications\DefaultWebApp\test目录下,将所有*.class拷贝到mydomain\applications\DefaultWebApp\WEB-INF\classes\test下。
我还有不明白的,去jakarta.apache.org/struts/doc-1.0.2/index.html看看
大家以为如何?
你的感受如何?
这是个例子吧
是不是可以研究呢?准备结帐了!