javaweb学习听课笔记简要

一、Oracle

1.oracle数据库创建用户

因为hr用户里面已经有很多表了,新建的项目会跟以前的表冲突,我们可以创建一个新用户,来做新项目,这样新项目跟老项目的表就不会冲突了。

--创建出王五用户,密码为王五,需要注意,新创建的用户不能登录到系统中。因为没有权限。
create user wangwu identified by wangwu;
--给wangwu赋权,赋了connect和resource权利
grant connect,resource to wangwu;

二、JDBC

1.事务控制使用条件:单纯的查询可以不用设置 手动提交和事务回滚
public Person getOnePerson(Integer id) {
		Connection conn = null;
		try{
			//1.创建连接
			conn = JdbcUtil.getConn();
			//2.设置手动提交
			//conn.setAutoCommit(false);
			//3.调用dao层方法
			Person p = pdao.findOneById(id);
			//4.事务提交
			conn.commit();
			return p;
		}catch(Exception e){
			//try {
				//4.事务回滚
				//conn.rollback();
			//} catch (Exception e1) {
				//throw new RuntimeException(e1);
			//}
			throw new RuntimeException(e);
		}finally{
			//5.释放资源
			JdbcUtil.release(null, conn, null);	
		}
	}

三、Servlet

1.描述forword和sendRedirect的区别。

	1)forward:地址栏不变,转发页面和转发到的页面是同一次请求,共享request里面的数据,并且只能转同意web应用中的资源
	2)senRedirect:地址栏发生改变,转发页面和转发到的页面是多次请求,不共享request里面的数据,但是可以访问站外资源。

四、JSP

1.<c:forEach>的几种遍历方式

<%
	// 测试数据 
	User u1 = new User("tom", "111111");
	User u2 = new User("jerry", "222222");
	User u3 = new User("huxz", "333333");
	
	List<User> list = new ArrayList<User>();
	list.add(u1);
	list.add(u2);
	list.add(u3);
	
	Map<String,User> map = new HashMap<String,User>();
	map.put("cat", u1);
	map.put("haozi", u2);
	map.put("cto", u3);
	
	request.setAttribute("list", list);  // action存命名属性
	request.setAttribute("map", map);
 %>
1.对集合的遍历:
<!-- 集合遍历 -->
<c:forEach items="${requestScope.list }" var="user" varStatus="s">
	${user.username }, ${user.password }, 循环状态:${s.count },${s.index },${s.first },${s.last }<br/>
</c:forEach>
2.对map的遍历:
<!-- map的遍历 -->
<c:forEach items="${requestScope.map }" var="m" varStatus="s">
	${m.key},${m.value.username },${s.count }<br/>
</c:forEach><hr/>
3.简单for循环
<!-- 简单for循环 -->
<c:forEach var="i" begin="10" end="15" step="1" varStatus="s">
	hello ${i } , 循环状态:${s.count }<br/>
</c:forEach>

2.Servlet中的三大作用域对象,并分别标明作用范围。

request
	开始:client与server建立连接开始
	结束:响应回cient结束
session:
    开始:client向server发请求,第1次遇到getSession(true)
    结束:超时、server停止、手动销毁
ServletContext:
    开始:server启动
    结束:server停止

3.JSP中的9个隐藏域对象

作用域对象(4个):pageContext request session application

响应相关(2个):response out

特殊(1个):exception

打酱油(2个):page config

4.JSP、Servlet中几个作用域的区别

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LHvnkqFt-1594618246966)(C:\Users\Wang Yuheng\Desktop\Myfile\arduino\截图_2020-04-03_11-28-53.png)]

五、struts2

1.简述Struts2的核心过滤器(前端控制器)的主要作用

StrutsPrepareAndExecuteFilter主要作用有2个: struts2框架和启动初始化相关工作、对client的所有请求进行处理

2.简述Struts2的action控制器和servlet控制器的主要区别(至少3个)

action控制器servlet控制器
实现Action或继承ActionSupport实现Servlet接口或继承HttpServlet
配置struts.xml用action标签配置web.xml用servlet和servlet-mapping标签
多例单例
效率低效率高
多线程中数据安全多线程中数据不安全
自动解决post的utf-8自己写代码、filter

3.简述Action程序成员变量的作用有哪些

1>使用成员变量自动收参,获取client请求数据

2>替换request作用域

4.Struts2中是如何收集客户端参数的,具体有哪些形式及使用注意事项

struts2使用成员成量自动收参,具体有3种形式:
①使用零散数据:请求参数名 和 成员变量名 必须相同
②对象形式: 请求参数名是 对象名.属性名
③数组或集合: 用于对复选框收参,即可以是零散数据也可以是对象形式

5.struts2中的跳转方式有哪些,分别是什么?

4种,
	1> action-->jsp
		转发:	<result name="" type="dispatcher">
		重定向:<result name="" type="redirect">
	2> action-->action
		转发:	<result name="" type="chain">
		重定向:<result name="" type="redirectAction">

六、 MyBatis

1.拦截器

(一)、自定义拦截器
public class LoginInterceptor implements Interceptor {

    @Override
    public void destroy() {

    }

    @Override
    public void init() {

    }

    @Override
    public String intercept(ActionInvocation ai) throws Exception {
        Admin adminDB = (Admin) ServletActionContext.getRequest().getSession().getAttribute("adminDB");
        if (adminDB != null){
            ai.invoke();//放行
            return null;
        }
        return "login";
    }
}

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VG4qGmGE-1594618246975)(C:\Users\Wang Yuheng\AppData\Roaming\Typora\typora-user-images\image-20200618094904883.png)]

(二)、配置拦截器struts.xml
<package name="person" extends="struts-default" namespace="/person">
    <interceptors>
        <!-- 声明拦截器 -->
        <interceptor name="i1" class="com.wyh.interceptor.LoginInterceptor"></interceptor>	
    </interceptors>

    <!-- 整合:添加,修改,刪除,批量刪除,查所有,查一个 -->
    <action name="*" method="{1}" class="com.wyh.action.PersonAction">
        <!-- 引用拦截器 -->
        <interceptor-ref name="defaultStack" />
        <interceptor-ref name="i1" />
        <result name="queryByPageJsp" type="dispatcher">/jsp/queryByPage.jsp</result>
        <result name="updateQueryPersonDetailJsp" type="dispatcher">/jsp/updateQueryPersonDetailJsp.jsp</result>
        <result name="queryByPage" type="redirectAction">queryByPage</result>
        <result name="queryPersonDetailJsp" type="dispatcher">/jsp/queryPersonDetailJsp.jsp</result>
        <result name="catchError">/NotFound.html</result>
    </action>

</package>

2.使用插件进行分页

​ mybatis为了简化分页的开发,提供了一个插件,可以简化分页的步骤。

具体用法:
  1. 引入mybatis的插件依赖。
    	<dependency>
          <groupId>com.github.pagehelper</groupId>
          <artifactId>pagehelper</artifactId>
          <version>5.1.11</version>
        </dependency>
    
  2. 在mybatis的配置文件中配置使用插件。

    需要在mybatis-config.xml里面进行配置。下面的配置要写在实体类起别名和数据库连接信息之间。

    	<!-- 分页的插件 -->
    	<plugins>
    	    <plugin interceptor="com.github.pagehelper.PageInterceptor"></plugin>
    	</plugins>
    
  3. 在dao中写一个查询全部的方法。

    跟以前一样,没有区别。定义dao接口中的方法,为这个方法到mapper文件中进行配置。

  4. 在业务类中调用dao的方法,然后把结果封装到插件中的PageInfo里面。
    public class TeaServcieImpl implements TeaService {
    
    	@Override
    	public PageInfo<Tea> selectByPage(int curPage, int pageSize) {
    		//通过PageHelper设置要查询的页的信息。
    		PageHelper.startPage(curPage, pageSize);
    		
    		SqlSession session = MyBatisUtil.openSession();
    		TeaDao td = session.getMapper(TeaDao.class);
    		List<Tea> teaList = td.selectTea();
    		//把查询到的集合放入到PageInfo里面
    		PageInfo<Tea> pi=new PageInfo<>(teaList);
    		
    		MyBatisUtil.close(session);
    		return pi;
    	}
    
    }
    
    

    PageInfo里面有分页的所有信息,我们可以通过pageInfo获取想要的数据。

    	public void testSelectAll() {
    		TeaService ts=new TeaServcieImpl();
    		PageInfo<Tea> pi = ts.selectByPage(1, 10);
    		
    		List<Tea> list = pi.getList();
    		list.forEach(System.out::println);
    		//获取总页数
    		int totalPage=pi.getPages();
    		System.out.println(totalPage);
    		System.out.println("下一页的页号:"+pi.getNextPage());
    		System.out.println("是否有下一页:"+pi.isHasNextPage());
    		System.out.println("总条数:"+pi.getTotal());
    	}
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值