SJ_T_W_javaweb复习

文中题目来源于老师

1、普通java项目如何创建?如何添加数据库的驱动程序?目录结构什么样子?

右键项目,build path -> configure build path -> libraries -> addjars

2、java web项目如何创建?如何添加数据库的驱动程序?目录结构什么样子?

右键项目,build path -> configure build path -> libraries -> addjars

3、使用jdbc访问mysql数据库包括哪几步?用最基本的jdbc语法写出完整的增加、删除、修改、查询一个表的代码。

增删改

//加载驱动
Class.forName("com.mysql.jdbc.Driver");
//创建连接对象
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/testdb", "root", "root");
//创建PreparedStatement对象执行sql语句
String sql = "insert into student(sid,sname,sage) values(?,?,?)";
//String sql = "delete from student where sid = ?";
//String sql = "update student set sage = ? where sid = ?";
PreparedStatement ps = conn.prepareStatement(sql);
ps.setString(1,"1");
ps.setString(2,"张三");
ps.setString(3,17);

//ps.setString(1,"1");

//ps.setString(1,18);
//ps.setString(2,"1");

ps.executeUpdate();

ps.close();
conn.close();

//加载驱动
Class.forName("com.mysql.jdbc.Driver");
//创建连接对象
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/testdb", "root", "root");
//创建PreparedStatement对象执行sql语句
String sql = "select * from student where sid = ?";
PreparedStatement ps = conn.prepareStatement(sql);
ps.setString(1,"1");
Result rs = ps.executeQuery();
while(rs.next()) {
	System.out.println("学号" + rs.getString("sid") + "姓名" + rs.getString("sname"));
}
rs.close();
ps.close();
conn.close();

4、Statement和PreparedStatement的用法有什么不同?用哪个好?

PreparedStatement:在创建statement对象时,就对sql语句进行编译。
Statement:在创建statement对象时,不对sql语句进行编译,在执行sql语句时再进行编译。
PreparedStatement支持预编译的sql语句,如果多次访问数据库的sql语句只是参数不同时,那么该对象比statement对象的效率高,PreparedStatement还可以避免sql注入。

5、jdbc执行事务的方法,如何启动事务?如何提交?如何回滚?如何不起用事务?

Connection conn;
PreparedStatement ps;
try{
	class.forName("com.mysql.jdbc.Driver");
	conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/testdb", "root", "root");
	
	con.setAutoCommit(false);//事务开始,手动提交事务,不写这条语句,默认是true,自动提交事务

	String sql_update = "update user set name = ? where name = ?";
	ps = conn.preparedStatement(sql_update);
	ps.setString(1, "kkk");
	ps.setString(2, "tom");
	ps.executeUpdate();
	
	String sql_delete = "delete from user where name = ?";
	ps = conn.preparedStatement(sql_delete);
	ps.setString(1, "kkk");
	ps.executeUpdate();
	
	conn.commit();//事务提交
}catch(Exception e){
	conn.rollback();//遇到异常回滚
}

6、用jsp指令引入另一个jsp文件的语法跟用jsp动作引入另一个文件有什么区别?效果有什么不同?

  • <%@include为静态包含,<%@include不论包含的是txt文本还是jsp文件,被包含的页面都不会从新编译,包含了几个JSP转译成servlet时就会有几个class文件
  • <jsp:include 为动态包含,<jsp:include 如包含jsp文件,这每次加载主页面的时候,被包含的页面都要重新编译。就是说不管你包含了几个jsp页面转译成servlet时中有一个class文件
    在这里插入图片描述

7、jsp:forward和response.sendRedirect跳转网页的效果有什么不同?

jsp:forward请求转发到另一个资源,可以携带传递参数,
response.sendRedrect是重定向到另一个资源,不可以携带传递参数,会丢失

8、jsp:userBean、setProperty、getProperty的语法、实现的效果是什么?

<jsp:useBean id = "beananme", class "exe.user", scope = "page|request|session|application"></jsp:useBean>
//创建一个user实例,并且设置scope范围,如果servlet容器在指定的作用域中找到实例,就可以在jsp中使用,否则就创建一个实例

<jsp:setProperty name = "beanname" property = "*"/>
//设置与请求参数中同名的javabean对象属性值,并自动转换成bean属性的类型,如果某个请求参数的名与bean的类型名不同,那么不会设置
<jsp:setProperty name = "beanname" property = "propertyName"/>
//将请求参数自动转换并设置到bean的同名属性,每次设置一个,如果需要多个,需要使用多次
<jsp:setProperty name = "beanname" property = "propertyName" param = "paramName"/>
//当请求参数不一致时,将参数自动转换并设置为bean的属性值
<jsp:setProperty name = "beanname" property = "propertyName" value= "expression"/>
//使用指定的表达式设置bean属性的值

<jsp:getProperty name = "beanname" property = "propertyNamr">
//读取一个bean的属性的值

9、会用注解配置servlet、用xml配置servlet。

<servlet>
        <!-- servlet的内部名称,自定义 -->
        <servlet-name>DemoAction</servlet-name>
        <!-- servlet的类全名:包名+类名 -->
        <servlet-class>servlet.DemoAction</servlet-class>
</servlet>

<!-- servlet的映射配置 -->

<servlet-mapping>
        <!-- servlet的内部名称,一定要和上面的内部名称保持一致 -->
        <servlet-name>DemoAction</servlet-name>
        <!-- servlet的映射路径(访问serclet的名称 -->
        <url-pattern>/DemoAction</url-pattern>
</servlet-mapping>

/*
1、首先,从浏览器中发送请求,是从当前工程中的路径与servlet-mapping标签中的url-pattern的标签值进行匹配。
2、根据这个映射值,找到servlet-mapping标签中的servlet-name的值与servlet标签中的servlet-name进行匹
3、匹配到以后,找到servlet标签中的servlet-class标签中对应servlet类的src文件夹下的全路径。
4、从而调用并执行相应的servlet类。
注意:servlet-mapping标签中的servlet-name的值与servlet标签中的servlet-name必须相同。
*/

10、form表单提交后,在Action对应的网页或servlet中如何读取上一个表单中输入的数据?

<jsp:useBean id = "user" class = "exe.user" scope = "session"></jsp:useBean>
<jsp:getProperty property = "uname" name = "user"/>
<jsp:getProperty property = "uage" name = "user"/>

11、如何把数据放到page、request、session、application中?如何从中取出来?

//request存取
request.setAttribute("name", "tom");
(String)request.getAttribute("name");

//session对象
HttpSession session = request,getSession();
session.setAttribute()
session.getAttribute()

//application
ServletContext applicaTION = this.getServletContext();
application.set...
application.get....

12、header中设置refresh的用法和效果

实现刷新页面次数用法为 response.setHeader(“refresh”,“刷新时间间隔”);
实现目的页面跳转用法为 response.setHeader(“refresh”,“刷新时间间隔;目的页面地址”);
refresh是使用get方式跳转,url中可以携带参数和数据,比如response.setHeader(“refresh”,“刷新时间间隔;目的页面地址?xx=”);
refresh会刷新当前request请求,使得request.getAttribute的内容为null,如需使用可用Session方法获取。

13、在jsp网页中如何import其他包中的类?

<%@ page import = " " %>

14、能用jsp+servlet+javabean编写完整的登录功能,实现增、删、改、查功能,能将一条数据或多条数据显示到页面中。注意错误处理,在servlet中读取到form提交的数据不合法时,能够保存错误,并转到录入界面,并显示错误信息。

15、EL表达式的作用是什么?如何用EL表达式获取form表单或超链接、地址栏传递的数据?如何用EL表达式获取放在requst、session、application属性中的数据?语法格式是什么?

<jsp:useBean id = “user” class = “packge.user”></jsp:useBean>
<jsp:setProperty Property = “name” name = “user” value = “mike”/>
username = ${user.name}

<% 
	request.setAttribute("username", "request");
	session.setAttribute("username", "session");
	application.setAttribute("username", "application");
%>
request_name: ${requestScope.username};
sessionname: ${sessionScope.username}
application: ${applicathonScope.username};

16、如何读取web.xml中的中的数据?

17、jstl中的常用的几个标签的语法、用法要求熟练掌握,例如c:if、c:set、c:foreach、c:out等。

<c:out value=" "></c:out>
<c:if test = " "></c:if> //test里面为真,则执行里面的语句
<c:set> 用于将变量存取于 JSP 范围中或 JavaBean 属性中。下面的例子中假设已经有 Person.java 这个类文件。

 

<%@ page language="java" import="java.util.*" pageEncoding="gb2312"%>
<%@page contentType="text/html; charset=utf-8" %>

<jsp:useBean id="person" class="lihui.Person"></jsp:useBean>

<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>JSTL测试</title>
</head>

<body>
<c:set value="张三" var="name1" scope="session"></c:set>
<c:set var="name2" scope="session">李四</c:set>
<c:set value="赵五" target="${person}" property="name"></c:set>
<c:set target="${person}" property="age">19</c:set>
<li>从session中得到的值:${sessionScope.name1}</li>
<li>从session中得到的值:${sessionScope.name2}</li>
<li>从Bean中获取对象person的name值:<c:out value="${person.name}"></c:out></li>
<li>从Bean中获取对象person的age值:<c:out value="${person.age}"></c:out></li>
</body>
</html>

<c:remove> 主要用来从指定的 jsp 范围内移除指定的变量。使用类似,下面只给出语法:

<c:remove var="变量名" [scope="page|request|session|application"]></c:remove>

<c:forEach>
语法:<c:forEach var="name" items="Collection" varStatus="statusName" begin="begin" end="end" step="step"></c:forEach>
该标签根据循环条件遍历集合 Collection 中的元素。 var 用于存储从集合中取出的元素;items 指定要遍历的集合;varStatus 用于存放集合中元素的信息。

18、能用jstl+el,结合jsp+servlet+javabean编写完整的登录功能,实现增、删、改、查功能,能将一条数据或多条数据显示到页面中。

19、能用jpa编写实体类,编写一对一、一对多关系的是实体类,包括单向的写法、双向的写法

双向一对一
@Entity
public class Person {
	
	private int person_id;
	private IDCard person_idcard;
	private String person_name;
	@GeneratedValue
	@Id
	public int getPerson_id() {
		return person_id;
	}
	public void setPerson_id(int person_id) {
		this.person_id = person_id;
	}
	
	@OneToOne(mappedBy = "idcard_person", cascade = CascadeType.REMOVE)
	public IDCard getPerson_idcard() {
		return person_idcard;
	}
	public void setPerson_idcard(IDCard person_idcard) {
		this.person_idcard = person_idcard;
	}
	public String getPerson_name() {
		return person_name;
	}
	public void setPerson_name(String person_name) {
		this.person_name = person_name;
	}
	@Override
	public String toString() {
		return "Person [person_id=" + person_id + ", person_name=" + person_name
				+ "]";
	}
	
@Entity
public class IDCard {
	
	private int idcard_id;
	private int idcard_number;
	private Person idcard_person;
	
	
	@OneToOne
	@JoinColumn(name = "person_id")
	public Person getIdcard_person() {
		return idcard_person;
	}
	public void setIdcard_person(Person idcard_person) {
		this.idcard_person = idcard_person;
	}
	@Id
	@GeneratedValue
	public int getIdcard_id() {
		return idcard_id;
	}
	public void setIdcard_id(int idcard_id) {
		this.idcard_id = idcard_id;
	}
	public int getIdcard_number() {
		return idcard_number;
	}
	public void setIdcard_number(int idcard_number) {
		this.idcard_number = idcard_number;
	}
	@Override
	public String toString() {
		return "IDCard [idcard_id=" + idcard_id + ", idcard_number=" + idcard_number + ", idcard_person="
				+ idcard_person + "]";
	}

双向一对多

@Entity
public class Department1 {
	
	private int department_id;
	private String department_name;
	private List<Employee> employees;
	
	
	@OneToMany(mappedBy = "employee_department", cascade = CascadeType.REMOVE)
	public List<Employee> getEmployees() {
		return employees;
	}
	public void setEmployees(List<Employee> employees) {
		this.employees = employees;
	}
	@Id
	@GeneratedValue
	public int getDepartment_id() {
		return department_id;
	}
	public void setDepartment_id(int department_id) {
		this.department_id = department_id;
	}
	public String getDepartment_name() {
		return department_name;
	}
	public void setDepartment_name(String department_name) {
		this.department_name = department_name;
	}
	@Override
	public String toString() {
		return "Department1 [department_id=" + department_id + ", department_name=" + department_name + ", employees="
				+ employees + "]";
	}

@Entity
public class Employee {
	
	private int employee_id;
	private String employee_name;
	private Department1 employee_department;
	
	@Id
	@GeneratedValue
	public int getEmployee_id() {
		return employee_id;
	}
	public void setEmployee_id(int employee_id) {
		this.employee_id = employee_id;
	}
	public String getEmployee_name() {
		return employee_name;
	}
	public void setEmployee_name(String employee_name) {
		this.employee_name = employee_name;
	}
	
	@ManyToOne
	@JoinColumn( name = "department_id")
	public Department1 getEmployee_department() {
		return employee_department;
	}
	public void setEmployee_department(Department1 employee_department) {
		this.employee_department = employee_department;
	}
	@Override
	public String toString() {
		return "Employee [employee_id=" + employee_id + ", employee_name=" + employee_name + "]";
	}

20、能用jpa实现增删改查,既能在JavaSE中使用jpa,也能在JavaWeb中使用jpa

21、能用jpql实现增删改查。

22、能用jsp+servlet+jpa实现登录、增、删、改、查功能。

23、配置过滤器的方法,多个过滤器如何执行?执行的代码顺序

<filter>
	<filter-name>filtername</filter-name>
	<filter-class>com.exe.filter</filter-class>
</filter>
<filter-mapping>
	<filter-name>filtername</filter-name>
	<url-pattern>/*</url-pattern>
</filter-mapping>

@WebFilter(filterName = "filtername", values  = {"/*"})
按照在xml中部署的顺序执行
过滤器的执行顺序,取决于过滤器在xml中的部署顺序,而且仅仅取决于xml中filter-mapping的顺序。

24、配置监听器的方法,监听器的编写方法

<Listener>
	<Listener-class>com.exe.MyServletContextListener 
	</Listener-class>
</Listener>

public void class MyServletContextListener implements ServletContextListener{
					public void contextDestory(ServletContextEvent o){}
					public void contextInitialized(ServletContextEvent o){}
}
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值