韩顺平struts笔记
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
!
Struts视频笔记:
Struts是一个开源的web框架,框架提高了程序的规范的同时也约束了程序员的自由
为什么会有struts:
因为我们队mvc理解的不同,可能造成不同公司写程序的时候,规范不统一,这样不利于程序的维护和扩展,所以我们有必要用一个统一的规范来开发项目(struts)
Struts 的好处: 程序更加规范化,开发效率提高了,可读性增加了,程序的可维护性增加了
^
运行原理:
一个请求从浏览器发送给web服务器,,web服务器首先解析主机然后解析web应用的名称
在解析出资源名转发给总司令ActionServlet(该类由struts框架提供给我们的无需编写,只需配置)ActionServlet有一个文件,该文件配置了表单actionForm(军火库),还配置了action,以及他们之间的对应关系,当ActionServlet拿到命令后它会查询文件去填充数据,把用户的数据填充到表单里边,下个动作就是去调用指定的action(小队长),action去从表单中读取数据,调用某个model(士兵,如service)完成任务,完成任务把结果返回给ActionServlet总司令(返回一个执行的结果),-->总司令又去查询文件,决定跳转到哪个jsp页面,返回一个执行结果(形成静态html文件)直接返回给web服务器服务器再把静态页面以h
ttp响应给浏览器
,登录小项目过程步骤: 新建web工程导入struts包编写编写actionForm和action
配置编写和配置测试
中的<action>中的scope指的是actionform的生命周期范围 struts中<action>的scope默认是session
@
配置过滤器
public class MyFilter extends HttpServlet implements Filter {
@Override
public void doFilter(ServletRequest arg0, ServletResponse arg1,
FilterChain arg2) throws IOException, ServletException {
("gb2312");
("gb2312");
~
(arg0, arg1);
}
配置
<filter>
<filter-name>MyFilter</filter-name>
<filter-class> </filter>
<filter-mapping>
<filter-name>MyFilter</filter-name>
…
<url-pattern>/*</url-pattern>
</filter-mapping>
上面这次比较浪费资源每次都要去实例化但是下面这种过滤器不太彻底,往数据库里插入数据时还是会经常出现乱码
public class MyFilter extends HttpServlet implements Filter {
private String encoding;
public void doFilter(ServletRequest arg0, ServletResponse arg1,
FilterChain arg2) throws IOException, ServletException {
ction</url-pattern>
*
</servlet-mapping>
写一个关于安全性的过滤器,用于过滤一些用户注册使用的关键字
private String keywords[];
public void doFilter(ServletRequest arg0, ServletResponse arg1,
FilterChain arg2) throws IOException, ServletException {
String username=("username");
"this is safe filter !");
if(username!=null){
;
for(String key:keywords){
if(username)){
("err", username+"被第二个管理安全的过滤器拦截了");
("/WEB-INF/").forward(arg0, arg1);
return ;
}
}
}
—
(arg0, arg1);
}
public void init(FilterConfig arg0) throws ServletException {
keywords=("keywords").split(";");
}
然后在配置过滤器还有设置要过滤的关键字
<init-param>
<param-name>keywords</param-name>
>
<param-value>xiaomao;xiaoxiao</param-value>
</init-param>
每个action是单态的,包括actionserver,对网站并发性有影响若要证明的话在***中声明一个静态变量,每次访问自加
什么是单态: 单态是指在整个运行过程中,始终是一个对象;
默认放在WEB-INF目录下,也可以放到其他地方,只需要在中的
<init-param>
?
<param-name>config</param-name>
<param-value>/WEB-INF/</param-value>
</init-param>
有多个只需用","号隔开
java 中插入数据库的语句需要注意标点("insert into user(username,password) values("+"'"+()+"'"+","+"'"+()+"'"+")");
jstl(jsp startand tag liblary) jsp标准标签库: 可以提高开发速度,代码简洁
升级jsp 页面<!DOCTYPE HTML PUBLIC"-oString();
escapeXml表示是否安装html样式显示默认是true:表示以文本显示
;
如何输出request,session,application, pageContext域对象的数据<%
("hello","request你好!");
("hello","session你好!");
("hello","application你好");
("hello","pageContext你们<a href=''>百度</a>");
%>
这里有个优先级的问题,pageContext>request>session>application |
<c:out value="${hello}" default="没有值" escapeXml="false" >如果是在同一个页面,那么这段代码输出pageContext你们好百度<%
User u=new User();
("admin");
("admin");
("user",u);
%>
,
<c:out value="${}"></c:out> | |<c:out value="${}"></c:out>相当于(User) ("user").getUsername();
<c:set>:
<c:set var="abc"value="中国,北京"scope="request"></c:set>
<c:out value="${abc}"/>
<c:remove var="abc"/> 移除之后中国北京将不再显示
<c:catch>:
<c:catch var="err">
#
<%int i=3/0; %>
</c:catch>
<c:out value="${}"></c:out>
<c:if test="${2<30true:false}">ok</c:if>
<c:if>:
<%
("a","hello");
("age","22"); %>
"
判断字符串:
<c:if test="${a=='hello'}">
hello
</c:if>
判断数值
<c:if test="${age>12 and age<30 or age==22}">
年龄大于12 小于30 ${age }
</c:if> <%
】
ArrayList<User> al=new ArrayList<User>();
User u1=new User();
("陈超");
("tiger");
User u2=new User();
("system");
("manager");
(u1); (u2);
)
("alluser",al);
%>
<c:forEach items="${alluser}" var="u">
${}
${} <br/>
</c:forEach>
第一种迭代
<c:forEach var="i" begin="1" end="10">${i} </c:forEach> ]
<br/>
第二种迭代
<c:forEach var="i" begin="1" end="10" step="3">${i} </c:forEach><br />
用于分隔字符:<c:forTokens items="11;33;44;52;" delims=";" var="temp">${temp}</c:forTokens>
什么时候用$符,什么时候不用$
如果是从某个域对象中取出值,取的是一个变量就要用$ ,取的是一个固定的值就不要$第一种:(); 这种方式比较慢
第二种:应用名/goManagerpageNow=”+pageNow
*
<c:if test="${pageNow>1}">前一页:<a href=”/web应用名/goManagerpageNow=${pageNow-1}”></c:if>
当前页:<c:forEach><a href="/web应用名/gotoManagepageNow=${i}">[${i }]</a></c:forEach>
<c:if test="${pageNow<pageCount}">后一页:<a href=”/web应用名/goManagerpageNow=${pageNow+1}”>
</c:if>
当前页${pageNow } /总页数 ${pageCount } 跳转到<input type="button" id="pageNow" name="pageNow" value="跳"/>
<%
Map map=new HashMap();
nvalidate(); etServletContext().getRealPath("file");
)
打印路径
os=new FileOutputStream(keepFilePath+"\\"+fileName);;
String uuid= newFileName=uuid+(beginIndex, ());
int fileSize=();
"uuid:"+uuid);
"文件名称:"+fileName);
"新文件名称:"+newFileName);
"文件大小:"+fileSize);
<
InputStream is=null;
OutputStream os=null;
try {etServletContext().getRealPath("file");
打印路径
os=new FileOutputStream(keepFilePath+"\\"+newFileName);//读取文件并写出到服务器file
int len=0;//缓存
byte []bytes=new byte[1024];
//循环处理
)
while((len=(bytes))>0){
(bytes,0,len);//读一点写一点
return ("loginok");
}
} catch (FileNotFoundException e) {
();
} catch (IOException e) {
[
();
}finally{
try {
();
} catch (IOException e) {
();
}
}
>
return ("loginerr");
}
}
注意事项:如果文件名是中文怎么办
做一个过滤器
("UTF-8");
("UTF-8");
(arg0, arg1);
—
案例: 保存到数据库中
Create database userdb2;
Use userdb2;
Create table t_users
(username varchar(30) unique not null,
myphoto varchar(128) not null,##保存新的文件名
myphoto2 varchar(128) not null ##保存旧的文件名
);
?
Q:37
文件下载
如果下载的文件时中文名那么我们需要在action中对其进行处理
String filterFilkename="GB2312");
思考: 如何控制文件的大小
如何控制文件上传类型
可以从D:\Program Files\Tomcat \conf目录下的中可以查看文件的类型*
如何防止用户名重复
`。