-------------------------------------1----------------------------------
MVC:Model(JavaBean),View(JSP),Controller(Servlet)
Servlet中跳转到另一个JSP,并且将参数保存在request中,写在doPost中
ServletContext application = this.getServletContext();
RequestDispatcher rd = application.getRequestDispatcher("/result.jsp");
rd.forward(request, response);
引入一个自定义类<%@ page import="po.Student"%>
或者:<jsp:directive.page import="po.Student;">
//////////////有时出现错误,可能是局部对象作用范围的问题,参见Prj1_1里的
SQL模糊查询,LIKE的通配符"_"(一个字符),"%"(任意个字符),汉字是两个字符,所以使用__
eg:SELECT * FROM table WHERE name LIKE '%s%';包含s的所有结果
-------------------------------------2----------------------------------
Struts就是一个基于MVC模式的框架,只是一个编程规范,让大家的代码风格更统一
在Struts中:
1.JSP表单内容首先提交给ActionServlet,ActionServlet将信息打包在ActionFrom中,送给Action(ActionServlet是Struts自带的)
2.ActionServlet不直接处理业务逻辑,让Action来调用JavaBean
3.Action负责决定跳转到另一个JSP,并显示结果(只是决定跳转,但动作还是由底层的ActionServlet做的)
4.配置文件(负责JSP->ActionForm,ActionForm->Action的映射)
需要编写:JSP,ActionForm,Action,配置文件(xml文件,struts-config.xml),JavaBean
////////////首先必须导入Struts支持包,并更爱base package for new calsses
////////////ActionFrom容纳表单提交的值
1。必须继承org.apache.struts.action.ActionForm
2。必须编写和表单元素同名的的属性
3。必须在Struts配置文件中进行注册(让Struts框架认识这个ActionFrom)
<form-beans>
<form-bean name = "随便起名字" type = "类路径(包名.类名:Prj2_1.queryForm)"></form-bean>
<form-beans>
////////////Action负责接收ActionFrom传来的数据
1。必须继承org.apache.struts.action.Action;
2。重写execute函数,来处理业务逻辑
3。将这个类在配置文件中进行注册
public ActionForward execute(ActionMapping mapping, ActionForm form, HTTPServletRequest request, HTTPServletResponse response) throws Exception{
//ActionForward:封装了跳转目标的路径
//mapping:访问配置文件
//form:传过来的ActionFrom对象
//跳转部分写法如下,变量可以保存在request里面,因为ActionForward默认的不是进行重定向跳转,而是进行forward跳转,所以不会丢失
ActionForward af = new ActionForward("/queryResult.jsp");
return af;
}
////////注册
<action-mapping><!--此处的path更改好后,需要在queryForm中修改action的目标地址-->
<action name = "相应的ActionFrom名称(queryForm)" path = "客户端提交到服务器端时指定的路径(/query)" type = "类路径(Prj2_1.QueryAction)"></action>
</action-mapping>
运行流程总结:客户端JSP提交到ActionForm,ActionFrom根据客户端JSP里的action,去掉".do"后,获得/query --> 在xml中的mapping中查找到/query --> 取得name里的queryForm --> 将提交的内容送给queryForm --> 又根据mapping中的 type获得Action的地址,将ActionForm中打包的内容送给Action
///////可以将所要跳转的地址设置成为逻辑名称
<!--这是定义全局的URL逻辑名称,另一种方法是写到<action-mapping>标签中<ation>标签内部:<forward name = "" path = "" > 成为局部的逻辑名称-->
<global-forwards>
<forward name = "RESULT" path = "/queryResult.jsp"></forward>
</global-forwards>
在action中跳转代码则变成:ActionForward af = mapping.findForward("RESULT");
-------------------------------------3----------------------------------
//////////自己建立配置文件的映射关系只需要在config文件的图形界面中右击new->form action and jsp
Struts框架包括自定义标签库,它可以用在很多方面.尽管这些库并不要求用框架,但是使用他们会有助于程序的开发.
struts-html taglib : 包含用来生成动态html用户界面和窗体的tag
struts-bean taglib : 包含在访问bean和bean的属性时使用的tag,也包含一些消息显示的tag
struts-logic taglib : 包含的tag用来管理根据条件生成输出文件,和其他一些用来控制的信息
tld文件是标签库定义文件(tag library definition)
/////////////////html标签库
其中的<html:form action=""></html:form>//action的内容不同于传统的form,传统的需要写成"/Prj3_1/reg.do",这里只需要写成"/reg.do",其中的"/"相当于项目的根目录,而且可以不写".do"
//需要在ActionForm中定义同名的property,并设置set,get函数.如果设置了value的话则不需要,因为:
在Struts标签中如果没有手动设置property的value值,则系统会自动调用ActionForm的getter函数获取初始值,不过最好还是定义一下
文本框:<html:text property="相当于传统input的名称name"></html:text>
密码框:<html:password property=""></html:password>
多行文本框:<html:textarea property=""></html:textarea>
隐藏表单:<html:hidden property="" value=""/>
单选按钮:<html:radio property="sex" value = "man"></html:radio>男//默认选择的话需要在ActionFrom中设置,
private String sex = "boy";
<html:radio property="sex" value = "women"></html:radio>女
下拉菜单:
<html:select property = "home" value = "设置默认值,是下面option中的一个value值">
<html:option value = "传给服务器的值">显示的值</html:option>
</html:select>
成组多选按钮://最好使用multibox
<html:checkbox property = "fav" value = "sing">唱歌</html:checkbox>
<html:checkbox property = "fav" value = "dance">跳舞</html:chekbox>
在ActionForm中需要定义一个数组来存储多选按钮的值:private String[] fav;//不能设置初值,有问题,要使用可以设置初值的则选用
<html:multibox property = "fav" value = "sing">唱歌</html:checkbox>
<html:multibox property = "fav" value = "dance">跳舞</html:chekbox>
设置初始值,private String[] fav = {"初始值1","初始值2"};
单个复选按钮:
<html:checkbox property = "inteam">是否会员?</html:checkbox>//返回的是boolean值
ActionForm中定义如下:private boolean inteam = true;//但是此方法会出现inteam的值不可以更改,可在reset函数(每次提交都执行一次)
中设置如下:inteam = false;
多选下拉列表框:<html:select property="" mulitple="true" size = "5"></html:select>//multiple属性设置了可以进行多选,size表示显示的时候是显示几个.
ActionForm中定义如下:private String[] books = {"sanguo","hongloumeng"};//可以跳着多选,并不需要顺序对应
-------------------------------------4----------------------------------
html标签库:生成链接
<a href = "jsp2.jsp"></a>
1。<html:link page = "/jsp2.jsp"></html:link>//需要使用'/'符号,否则出错
2。<html:link href = "jsp2.jsp"></html:link>
3。<html:link forward= "JSP2"></html:link>//需要在配置文件中的<global-forwards>内进行注册
<forward name="JSP2" path="/jsp2.jsp"></forward>
4。<html:link action= "/XXX.do"></html:link>//适合链接同时还做一些操作的情况,如退出操作
链接的同时传递参数
1。<html:link page = "/jsp2.jsp?param=0001"></html:link>//参数param保存在request中
2。<% session.setAttribute("msg","1"); request.setAttribute("msg","2"); application.setAttribute("msg","3");%>
<html:link page = "/jsp2.jsp" paramId = "param" paramName = "msg"></html:link>//系统找到2
//系统自动从page--->request--->session--->application中寻找参数paramName对应的参数
其他情况:在一个类中的属性作为参数
<% Student stu = new Student(); stu.setStuId("0001"); session.setAttribute("stu", stu);%>
<html:link page = "/jsp2.jsp" paramId = "param" paramName = "stu" paramProperty = "stuID"></html:link>//传递stu的stuId属性
其他情况:传递多个参数,可将多个参数放到HaspMap中
<% HashMap hm = new HashMap(); hm.put("param1","msg1"); hm.put("param2","msg2"); session.setAttribute("hm",hm);%>
<html:link page = "/jsp2.jsp" name = "hm"></html:link>
/////////////////bean标签,访问http信息,name是从别处的来的,id是自己的
1。<bean:parameter>得到参数值并放入变量,Id:将参数给一个变量名,Name:参数名.相当于request.getParameter();
<bean:parameter id="str" name="param"/>//将名字为param的变量值传递给str,相当于String str = request.getParameter("param");
2。<bean:write>相当于out.print,可以显示javabean内容,Name:显示某个变量的值,也可以显示javaBean内的属性:<bean:write name="stu" property="stuId" />如果内容中有标签,如:<B>hello</B>,此标签默认不会识别标签,显示的时候就是原样显示.filter属性设置成false就可以使得所要显示的内容不要以原样显示.filter="false",显示成粗体hello.而out.print则不是以原样显示,显示成粗体hello
打印上面的内容:<bean:write name = "str"/>
3。<bean:cookie>得到cookie并放入变量.Id:将参数给一变量名,Name:cookie名,value:默认值,相当于request.getCookie();然后for循环查找cookie.只有读cookie标签,没有写cookie标签,这样符合MVC设计模式
<% request.addCookie(new Cookie("username","cst"));%>
<bean:cookie id="cookie1" name="username"/>
<bean:write name="cookie1" property="value"/>//显�