struts笔记.docx

上传人:b****6 文档编号:6175592 上传时间:2023-01-04 格式:DOCX 页数:16 大小:23KB
下载 相关 举报
struts笔记.docx_第1页
第1页 / 共16页
struts笔记.docx_第2页
第2页 / 共16页
struts笔记.docx_第3页
第3页 / 共16页
struts笔记.docx_第4页
第4页 / 共16页
struts笔记.docx_第5页
第5页 / 共16页
点击查看更多>>
下载资源
资源描述

struts笔记.docx

《struts笔记.docx》由会员分享,可在线阅读,更多相关《struts笔记.docx(16页珍藏版)》请在冰豆网上搜索。

struts笔记.docx

struts笔记

Struts是一个开源的web框架,框架提高了程序的规范的同时也约束了程序员的自由

为什么会有struts:

因为我们对mvc理解的不同,可能造成不同公司写程序的时候,规范不统一,这样不利于程序的维护和扩展,所以我们有必要用一个统一的规范来开发项目(struts)

Struts的好处:

程序更加规范化,开发效率提高了,可读性增加了,程序的可维护性增加了

运行原理:

一个请求从浏览器发送给web服务器,http:

//localhost:

8080/web应用/action,web服务器首先解析主机然后解析web应用的名称在解析出资源名转发给总司令ActionServlet(该类由struts框架提供给我们的无需编写,只需配置)ActionServlet有一个文件struts-config.xml,该文件配置了表单actionForm(军火库),还配置了action,以及他们之间的对应关系,当ActionServlet拿到命令后它会查询struts-config.xml文件去填充数据,把用户的数据填充到表单里边,下个动作就是去调用指定的action(小队长),action去从表单中读取数据,调用某个model(士兵,如service)完成任务,完成任务把结果返回给ActionServlet总司令(返回一个执行的结果),-->总司令又去查询struts-config.xml文件,决定跳转到哪个jsp页面,返回一个执行结果(形成静态html文件)直接返回给web服务器服务器再把静态页面以http响应给浏览器

登录小项目过程步骤:

新建web工程导入struts包编写login.jsp编写actionForm和action配置struts-config.xml编写ok.jsp和err.jsp配置web.xml测试

Struts.config.xml中的中的scope指的是actionform的生命周期范围struts中的scope默认是session

配置过滤器

publicclassMyFilterextendsHttpServletimplementsFilter{

@Override

publicvoiddoFilter(ServletRequestarg0,ServletResponsearg1,

FilterChainarg2)throwsIOException,ServletException{

arg0.setCharacterEncoding("gb2312");

arg1.setCharacterEncoding("gb2312");

arg2.doFilter(arg0,arg1);

}

配置web.xml

MyFilter

com.chao98.services.MyFilter

MyFilter

/*

上面这次比较浪费资源每次都要去实例化但是下面这种过滤器不太彻底,往数据库里插入数据时还是会经常出现乱码

publicclassMyFilterextendsHttpServletimplementsFilter{

privateStringencoding;

publicvoiddoFilter(ServletRequestarg0,ServletResponsearg1,

FilterChainarg2)throwsIOException,ServletException{

//arg0.setCharacterEncoding("gb2312");

//arg1.setCharacterEncoding("gb2312");

arg0.setCharacterEncoding(encoding);

arg2.doFilter(arg0,arg1);

}

publicvoidinit(FilterConfigarg0)throwsServletException{

encoding=arg0.getInitParameter("encoding");

}

然后在web.xml中加入

encoding

GB2312

配置struts-config.xml

xmlversion="1.0"encoding="UTF-8"?

>

xmlns="

xmlns:

xsi="http:

//www.w3.org/2001/XMLSchema-instance"

xsi:

schemaLocation="

action

org.apache.struts.action.ActionServlet

config

/WEB-INF/struts-config.xml

debug

2

detail

2

2

action

*.action

写一个关于安全性的过滤器,用于过滤一些用户注册使用的关键字

privateStringkeywords[];

publicvoiddoFilter(ServletRequestarg0,ServletResponsearg1,

FilterChainarg2)throwsIOException,ServletException{

Stringusername=arg0.getParameter("username");

System.out.println("thisissafefilter!

");

System.out.println(username);

if(username!

=null){

for(Stringkey:

keywords){

if(key.equals(username)){

arg0.setAttribute("err",username+"被第二个管理安全的过滤器拦截了");

arg0.getRequestDispatcher("/WEB-INF/tishi.jsp").forward(arg0,arg1);

return;

}

}

}

arg2.doFilter(arg0,arg1);

}

publicvoidinit(FilterConfigarg0)throwsServletException{

keywords=arg0.getInitParameter("keywords").split(";");

}

然后在web.xml配置过滤器还有设置要过滤的关键字

keywords

xiaomao;xiaoxiao

每个action是单态的,包括actionserver,对网站并发性有影响若要证明的话在***action.java中声明一个静态变量,每次访问自加

什么是单态:

单态是指在整个运行过程中,始终是一个对象;

struts-config.xml默认放在WEB-INF目录下,也可以放到其他地方,只需要在web.xml中的

config

/WEB-INF/struts-config.xml

有多个struts-config.xml只需用","号隔开

java中插入数据库的语句需要注意标点st.executeUpdate("insertintouser(username,password)values("+"'"+u.getUsername()+"'"+","+"'"+u.getPassword()+"'"+")");

jstl(jspstartandtagliblary)jsp标准标签库:

可以提高开发速度,代码简洁

升级jsp页面

DOCTYPEHTMLPUBLIC"-//W3C//DTDXHTML1.0Transitional//EN"

"http:

//www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">替换8.5myeclipse:

D:

\Program\Files\Myeclipse\Common\plugins\com.genuitec.eclipse.wizards_8.5.0.me201003052220.jar\templates\jsp\jsp.vtl的

6.5myeclipse:

D:

\ProgramFiles\MyEclipse6.5\myeclipse\eclipse\plugins\com.genuitec.eclipse.wizards_6.5.0.zmyeclipse650200806\templates\jsp

DOCTYPEHTMLPUBLIC"-//W3C//DTDHTML4.01Transitional//EN">这样比较符合现在的开发潮流

各个jstl标签

out>:

outvalue="helloworld">

out>

outvalue="${username}"default="没有值"escapeXml="false">

out>等同于request.getAttribute("user").toString();

escapeXml表示是否安装html样式显示默认是true:

表示以文本显示

如何输出request,session,application,pageContext域对象的数据

<%

request.setAttribute("hello","request你好!

");

session.setAttribute("hello","session你好!

");

application.setAttribute("hello","application你好");

pageContext.setAttribute("hello","pageContext你们XX");

%>

这里有个优先级的问题,pageContext>request>session>application

outvalue="${hello}"default="没有值"escapeXml="false">

如果是在同一个页面,那么这段代码输出pageContext你们好XX 

<%

Useru=newUser();

u.setUsername("admin");

u.setPassword("admin");

request.setAttribute("user",u);

%>

outvalue="${user.username}">

out>||

outvalue="${user.password}">

out>

相当于(User)request.setAttribute("user").getUsername();

set>:

setvar="abc"value="中国,北京"scope="request">

set>

outvalue="${abc}"/>

removevar="abc"/>移除之后中国北京将不再显示

catch>:

catchvar="err">

<%inti=3/0;%>

catch>

outvalue="${err.message}">

out>

iftest="${2<30?

true:

false}">ok

if>

if>:

<%

request.setAttribute("a","hello");

request.setAttribute("age","22");%>

判断字符串:

iftest="${a=='hello'}">

hello

if>

判断数值

iftest="${age>12andage<30orage==22}">

年龄大于12小于30${age}

if><%

ArrayListal=newArrayList();

Useru1=newUser();

u1.setUsername("陈超");

u1.setPassword("tiger");

Useru2=newUser();

u2.setUsername("system");

u2.setPassword("manager");

al.add(u1);al.add(u2);

request.setAttribute("alluser",al);

%>

forEachitems="${alluser}"var="u">

${u.username}

${u.password}

forEach>

第一种迭代 

forEachvar="i"begin="1"end="10">${i}  

forEach>


第二种迭代

forEachvar="i"begin="1"end="10"step="3">${i}  

forEach>

用于分隔字符:

forTokensitems="11;33;44;52;"delims=";"var="temp">${temp}

forTokens>

什么时候用$符,什么时候不用$

如果是从某个域对象中取出值,取的是一个变量就要用$,取的是一个固定的值就不要$

第一种:

Window.open(); 这种方式比较慢

第二种:

window.location.href=”/web应用名/goManager?

pageNow=”+pageNow

iftest="${pageNow>1}">前一页:

pageNow=${pageNow-1}”>

if>

当前页:

forEach>

pageNow=${i}">[${i}]

forEach>

iftest="${pageNow后一页:

pageNow=${pageNow+1}”>

if>

当前页${pageNow}/总页数${pageCount}跳转到

<%

Mapmap=newHashMap();

//map.put("aa","admin");

//map.put("bb","scott");

Useru1=newUser();

u1.setUsername("xiaoming");

u1.setPassword("xiaoming");

Useru2=newUser();

u2.setUsername("xiaoming");

u2.setPassword("xiaoming");

map.put("u1",u1);

map.put("u2",u2);

request.setAttribute("person",map);

%>

forEachitems="${person}"var="per">

key:

${per.key}值name:

${per.value.username}值password:

${per.value.password}

forEach>

<%

Setset=newHashSet();

Useru3=newUser();

u3.setUsername("scott");

u3.setPassword("tiger");

set.add(u3);

request.setAttribute("setuser",set);

%>

forEachitems="${setuser}"var="myusers">

值name:

${myusers.username}值password:

${myusers.password}

iftest="${!

emptysetuser}">有人

if>

forEach>

重定向:

redirecturl=""/>

import标签:

importurl="a.jsp">

paramname="name"value="admin"/>

import>

Strtus标签:

baseref=""/>goto

如果没有给超链接设置则默认跳到XX(如上)

imagesrc="images/chadu.png">

image>这是一个图片按钮

imgsrc="images/chadu.png"/>这是真真正正的一i张图片

bean标签:

用于输出信息

<%

Useru1=newUser();

u1.setUsername("admin");

u1.setPassword("admin");

request.setAttribute("user",u1);

%>

writename="user"property="username">

write>

另外还有两种创建bean的方法,但是用的不多

defineid=""/>

define>

useBeanid="u2"class="com.chao98.forms.User">

useBean>

setPropertyname="u2"property="username"value="chenchao"/>

Logic标签:

logic标签使用

<%

Useru1=newUser();

u1.setUsername("admin");

u1.setPassword("aa");

Useru2=newUser();

u2.setUsername("tiger");

u2.setPassword("ac");

Useru3=newUser();

u3.setUsername("scott");

u3.setPassword("ab");

ArrayListal=newArrayList();

al.add(u1);

al.add(u2);

al.add(u3);

request.setAttribute("users",al);

%>

iterateid="user"name="users">

writename="user"property="username"/>

writename="user"property="password"/>

iterate>

emptyname="ee">

属性不存在

empty>

notEmptyname="users">

users属性存在

notEmpty>

iterateid="myusers"name="users">

greaterThanvalue="20"property="age"name="myusers">

年龄大于二十

greaterThan>

iterate>

标签的选择:

通常会选择el表达式$

opStruts第23讲:

开发struts的用户管理系统

Createtableusers(

Idintprimarykey,

Namevarchar(20)notnull,

Pwdvarchar(30)notnull,

Emailv

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 表格模板 > 合同协议

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1